From 4cb1311b21e470aaadeb66e63dc162ccae7fba49 Mon Sep 17 00:00:00 2001 From: Mokych Andrey Date: Fri, 2 Nov 2018 13:37:01 +0200 Subject: [PATCH 01/33] WS#2 added word wrapp task for demo --- .../demo/02_word_count/02_word_count.pro | 10 +++++ tdd_intro/demo/02_word_count/test.cpp | 40 +++++++++++++++++++ tdd_intro/demo/demo.pro | 1 + 3 files changed, 51 insertions(+) create mode 100644 tdd_intro/demo/02_word_count/02_word_count.pro create mode 100644 tdd_intro/demo/02_word_count/test.cpp diff --git a/tdd_intro/demo/02_word_count/02_word_count.pro b/tdd_intro/demo/02_word_count/02_word_count.pro new file mode 100644 index 00000000..e1123a37 --- /dev/null +++ b/tdd_intro/demo/02_word_count/02_word_count.pro @@ -0,0 +1,10 @@ +include(../../gtest.pri) + +TEMPLATE = app +CONFIG += console c++11 +CONFIG -= app_bundle +CONFIG -= qt + +SOURCES += \ + test.cpp + diff --git a/tdd_intro/demo/02_word_count/test.cpp b/tdd_intro/demo/02_word_count/test.cpp new file mode 100644 index 00000000..e969487c --- /dev/null +++ b/tdd_intro/demo/02_word_count/test.cpp @@ -0,0 +1,40 @@ +/* +Given a phrase, count the occurrences of each word in that phrase. Ignore whitespaces and punctual symbols +For example for the input "olly olly in come free please please let it be in such manner olly" +olly: 3 +in: 2 +come: 1 +free: 1 +please: 2 +let: 1 +it: 1 +be: 1 +manner: 1 +such: 1 +*/ + +#include +#include +#include + +std::map CountWords(const std::string& sentence) +{ + return {{sentence, 1}}; +} + +TEST(CountWords, OneWordForSingleSymbol) +{ + EXPECT_EQ(1, CountWords("a").size()); +} + +TEST(CountWords, SameValueForSingleWord) +{ + std::map expectedWords = {{"hello", 1}}; + EXPECT_EQ(expectedWords, CountWords("hello")); +} + +TEST(SplitWords, OneWordFromSentence) +{ + std::map expectedWords = {{"hello", 1}}; + EXPECT_EQ("a", Split("a b c")); +} diff --git a/tdd_intro/demo/demo.pro b/tdd_intro/demo/demo.pro index c2905cb9..9e9ba630 100644 --- a/tdd_intro/demo/demo.pro +++ b/tdd_intro/demo/demo.pro @@ -4,6 +4,7 @@ SUBDIRS += \ 01_bob \ 01_fizz_buzz \ 02_anagram \ + 02_word_count \ #03_allergies \ 03_roman_numerals \ 04_timer From c518474bc70da015cc281ac57b90db863bf25620 Mon Sep 17 00:00:00 2001 From: Mokych Andrey Date: Fri, 9 Nov 2018 11:30:54 +0200 Subject: [PATCH 02/33] added word wrapp to demos --- .../05_word_wrapp.pro => demo/03_word_wrapp/03_word_wrapp.pro} | 0 tdd_intro/{homework/05_word_wrapp => demo/03_word_wrapp}/test.cpp | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tdd_intro/{homework/05_word_wrapp/05_word_wrapp.pro => demo/03_word_wrapp/03_word_wrapp.pro} (100%) rename tdd_intro/{homework/05_word_wrapp => demo/03_word_wrapp}/test.cpp (100%) diff --git a/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro b/tdd_intro/demo/03_word_wrapp/03_word_wrapp.pro similarity index 100% rename from tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro rename to tdd_intro/demo/03_word_wrapp/03_word_wrapp.pro diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/demo/03_word_wrapp/test.cpp similarity index 100% rename from tdd_intro/homework/05_word_wrapp/test.cpp rename to tdd_intro/demo/03_word_wrapp/test.cpp From 21dea71941241a303b4d3ad79e1916fd6b132c09 Mon Sep 17 00:00:00 2001 From: Mokych Andrey Date: Fri, 9 Nov 2018 12:49:12 +0200 Subject: [PATCH 03/33] added word wrapp to demos --- tdd_intro/demo/03_word_wrapp/test.cpp | 85 +++++++++++---------------- tdd_intro/demo/demo.pro | 1 + tdd_intro/homework/homework.pro | 1 - 3 files changed, 34 insertions(+), 53 deletions(-) diff --git a/tdd_intro/demo/03_word_wrapp/test.cpp b/tdd_intro/demo/03_word_wrapp/test.cpp index 77e47210..83821e4e 100644 --- a/tdd_intro/demo/03_word_wrapp/test.cpp +++ b/tdd_intro/demo/03_word_wrapp/test.cpp @@ -7,6 +7,11 @@ last space should be used to wrapp this line. If there are no spaces - wrapp it When pos is specified, the search only includes sequences of characters that begin at or before position pos, ignoring any possible match beginning after pos +split(hee, 1) -> h, e, e +split(hee, 2) -> he, e +split("ha ha", 2|3|4) -> "ha", "ha" +split("h a", 1) -> "h", "a" + "When pos is specified, the", "search only includes sequences", "of characters that begin at or", @@ -16,81 +21,57 @@ ignoring any possible match beginning after pos */ #include -#include - -// empty string -// string shorter than wrap number -// word longer than wrap number -// word much longer than wrap number (more than 2 strings) -// string longer than wrap number - -// string wrapped by several whitespaces (less than wrapLength) -// string wrapped by several whitespaces (more than wrapLength) -// only whitespaces in string +#include +#include -using WrappedStrings = std::vector; - -WrappedStrings WrapString(const std::string& str, size_t wrapLength) +using StringContainer = std::vector; +StringContainer SplitString(const std::string& string, size_t length) { - WrappedStrings result; - for(size_t i = 0; i < str.length(); i += wrapLength) + auto firstSpaceInSubstr = string.rfind(' ', length); + std::string::size_type offset = length; + if (firstSpaceInSubstr != std::string::npos) { - std::string cur = str.substr(i, wrapLength); - if (cur.back() == ' ') - { - cur.pop_back(); - } + offset = firstSpaceInSubstr + 1; + } - if(!cur.empty() && cur.front() == ' ') - { - cur = cur.substr(1); - } + StringContainer result {{ string.substr(0, offset) }}; - if(!cur.empty()) - { - result.push_back(cur); - } + if (length < string.size()) + { + result.push_back(string.substr(offset)); } - return result; } -TEST(WrapString, EmptyString) -{ - ASSERT_EQ(WrappedStrings(), WrapString("", 25)); -} - -TEST(WrapString, StringShorterWrapNumber) +TEST(SplitString, OnePartForOneSymbol) { - ASSERT_EQ(WrappedStrings{"asdf"}, WrapString("asdf", 8)); + StringContainer parts = {"a"}; + EXPECT_EQ(parts, SplitString("a", 1)); } -TEST(WrapString, StringLongerThanWrapNumber) +TEST(SplitString, AbFirstForAbbaAnd2) { - WrappedStrings expected = {"asd", "f"}; - ASSERT_EQ(expected, WrapString("asdf", 3)); + EXPECT_EQ("Ab", SplitString("Abba", 2).at(0)); } -TEST(WrapString, StringLongerThanWrapNumberSeveralParts) +TEST(SplitString, BaSecondForAbbba) { - WrappedStrings expected = {"12", "34", "56"}; - ASSERT_EQ(expected, WrapString("123456", 2)); + EXPECT_EQ("ba", SplitString("Abba", 2).at(1)); } -TEST(WrapString, MultipleWordsLonger) +TEST(SplitString, AbForAbAnd4) { - WrappedStrings expected = {"1", "2"}; - ASSERT_EQ(expected, WrapString("1 2", 1)); + EXPECT_EQ("Ab", SplitString("Ab", 4).at(0)); } -TEST(WrapString, SpaceStringEnd) +TEST(SplitString, SplitAb_AbBeforeSpaceReturnsAbAndAb) { - WrappedStrings expected = {"1", "2"}; - ASSERT_EQ(expected, WrapString("1 2", 2)); + StringContainer parts = {"Ab", "Ab"}; + EXPECT_EQ(parts, SplitString("Ab Ab", 2)); } -TEST(WrapString, StringWrappedBySeveralWhitespace) +TEST(SplitString, SplitAb_AbAtSpaceReturnsAbAndAb) { - WrappedStrings expected = {"12", "34"}; - ASSERT_EQ(expected, WrapString("12 34", 3)); + StringContainer parts = {"Ab", "Ab"}; + EXPECT_EQ(parts, SplitString("Ab Ab", 3)); } diff --git a/tdd_intro/demo/demo.pro b/tdd_intro/demo/demo.pro index 9e9ba630..37ec0908 100644 --- a/tdd_intro/demo/demo.pro +++ b/tdd_intro/demo/demo.pro @@ -5,6 +5,7 @@ SUBDIRS += \ 01_fizz_buzz \ 02_anagram \ 02_word_count \ + 03_word_wrapp \ #03_allergies \ 03_roman_numerals \ 04_timer diff --git a/tdd_intro/homework/homework.pro b/tdd_intro/homework/homework.pro index cf6c01b9..7e131270 100644 --- a/tdd_intro/homework/homework.pro +++ b/tdd_intro/homework/homework.pro @@ -5,5 +5,4 @@ SUBDIRS += \ 02_ternary_numbers \ 03_bank_ocr \ 04_weather_client \ - 05_word_wrapp \ 06_coffee From aeaa1a89dade285db82b8e9f263c36bc366c08f8 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:43:41 +0200 Subject: [PATCH 04/33] decomposition --- tdd_intro/homework/03_bank_ocr/test.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index a01540b9..87d2cf26 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -195,3 +195,27 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", " | _| _||_||_ |_ ||_||_|", " ||_ _| | _||_| ||_| _|" }; + +/* Functions */ + +/* + * Decomposition: + * - CompareDigit(const Digit& a, const Digit& b) -> bool - compares two digits, and returns true if it equals + * - ParseDigit(const Digit& digit) -> int - parses digit from 3x3 char matrix + * - SplitDigits(const Display& display) -> vector - split display to separate digits + * - ParseAccountNumber(const Display& display) -> int - parses account number from Display + * Test list: + * - CompareDigit + * -- Should return true for identical digits + * -- Should return false for different digits + * - ParseDigit + * -- It should return -1 for invalid digit + * -- It should return digit's number if it is in list of known digits + * - SplitDigits + * -- It should return vector of splitted digits from display + * - ParseAccountNumber + * -- Should return account number for display + */ + +/* Tests */ + From 006e95b00cef31f9750af60f03deea692043f507 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:52:14 +0200 Subject: [PATCH 05/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 87d2cf26..9944c0e3 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -196,8 +196,6 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", " ||_ _| | _||_| ||_| _|" }; -/* Functions */ - /* * Decomposition: * - CompareDigit(const Digit& a, const Digit& b) -> bool - compares two digits, and returns true if it equals @@ -217,5 +215,14 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", * -- Should return account number for display */ -/* Tests */ +/* Functions */ +bool CompareDigit(const Digit& a, const Digit& b) +{ + return true; +} +/* Tests */ +TEST(CompareDigitTest, ItShouldReturnFalseForDifferendDigits) +{ + EXPECT_FALSE(CompareDigit(s_digit0, s_digit1)); +} From 870070e2ebddd55305ed9c77ee943a022b391f80 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:52:49 +0200 Subject: [PATCH 06/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 9944c0e3..b4edd6c0 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -218,7 +218,7 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", /* Functions */ bool CompareDigit(const Digit& a, const Digit& b) { - return true; + return false; } /* Tests */ From 841f34692ed923e0ef16420121714902e2805d15 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:54:13 +0200 Subject: [PATCH 07/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index b4edd6c0..60ceb159 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -226,3 +226,7 @@ TEST(CompareDigitTest, ItShouldReturnFalseForDifferendDigits) { EXPECT_FALSE(CompareDigit(s_digit0, s_digit1)); } +TEST(CompareDigitTest, ItShouldReturnTrueForIdendicalDigits) +{ + EXPECT_TRUE(CompareDigit(s_digit0, s_digit0)); +} From 7ff71ac7f15896a5f29900484c246ca70d5109a8 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:55:05 +0200 Subject: [PATCH 08/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 60ceb159..2d80dc0b 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -218,6 +218,10 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", /* Functions */ bool CompareDigit(const Digit& a, const Digit& b) { + if (a.lines[0] == b.lines[0] && a.lines[1] == b.lines[1] && a.lines[2] == b.lines[2]) + { + return true; + } return false; } From 728f780383737e47dd1795cbca81de749863af30 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:56:45 +0200 Subject: [PATCH 09/33] refactoring --- tdd_intro/homework/03_bank_ocr/test.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 2d80dc0b..f6239ee6 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -218,11 +218,14 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", /* Functions */ bool CompareDigit(const Digit& a, const Digit& b) { - if (a.lines[0] == b.lines[0] && a.lines[1] == b.lines[1] && a.lines[2] == b.lines[2]) + for (size_t i = 0; i < g_linesInDigit; ++i) { - return true; + if (a.lines[i] != b.lines[i]) + { + return false; + } } - return false; + return true; } /* Tests */ From 09a815d191f1ee4177ac805c649a356370360db6 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:58:16 +0200 Subject: [PATCH 10/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index f6239ee6..b9eab73a 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -227,6 +227,10 @@ bool CompareDigit(const Digit& a, const Digit& b) } return true; } +int ParseDigit(const Digit& digit) +{ + return -1; +} /* Tests */ TEST(CompareDigitTest, ItShouldReturnFalseForDifferendDigits) @@ -237,3 +241,8 @@ TEST(CompareDigitTest, ItShouldReturnTrueForIdendicalDigits) { EXPECT_TRUE(CompareDigit(s_digit0, s_digit0)); } + +TEST(ParseDigitTest, ItShouldReturn0ForDigit0) +{ + EXPECT_EQ(0, ParseDigit(s_digit0)); +} From 1a674623539223f7a1c15cbc8f3de3d9b1c9cf85 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:58:32 +0200 Subject: [PATCH 11/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index b9eab73a..2ec5d9e7 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -229,7 +229,7 @@ bool CompareDigit(const Digit& a, const Digit& b) } int ParseDigit(const Digit& digit) { - return -1; + return 0; } /* Tests */ From 7bc1b5c2b7cf94adfcc7d7924c650e6c300e9155 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:59:20 +0200 Subject: [PATCH 12/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 2ec5d9e7..1d67c07c 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -246,3 +246,7 @@ TEST(ParseDigitTest, ItShouldReturn0ForDigit0) { EXPECT_EQ(0, ParseDigit(s_digit0)); } +TEST(ParseDigitTest, ItShouldReturn1ForDigit1) +{ + EXPECT_EQ(1, ParseDigit(s_digit1)); +} From 252239e0d9a2c71cfca5e0a243602a84c610d63c Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 20:59:48 +0200 Subject: [PATCH 13/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 1d67c07c..1bae00ca 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -229,6 +229,10 @@ bool CompareDigit(const Digit& a, const Digit& b) } int ParseDigit(const Digit& digit) { + if (CompareDigit(digit, s_digit1)) + { + return 1; + } return 0; } From dbdb55d7e06dc3ba4b7b03df0458ef3c5236275b Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:05:42 +0200 Subject: [PATCH 14/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 1bae00ca..20301eb2 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -216,6 +216,11 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", */ /* Functions */ +static Digit s_digits[] = { + s_digit0, s_digit1, s_digit2, s_digit3, s_digit4, + s_digit5, s_digit6, s_digit7, s_digit8, s_digit9 +}; + bool CompareDigit(const Digit& a, const Digit& b) { for (size_t i = 0; i < g_linesInDigit; ++i) @@ -254,3 +259,10 @@ TEST(ParseDigitTest, ItShouldReturn1ForDigit1) { EXPECT_EQ(1, ParseDigit(s_digit1)); } +TEST(ParseDigitTest, ItShouldReturnIntegerDigitForAnyDigitFromList) +{ + for (int i = 0; i < 10; ++i) + { + EXPECT_EQ(i, ParseDigit(s_digits[i])); + } +} From 9cbffddd8a094159c04e0a7fbc5724dd2c774ff5 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:06:44 +0200 Subject: [PATCH 15/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 20301eb2..dcbe8288 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -234,9 +234,12 @@ bool CompareDigit(const Digit& a, const Digit& b) } int ParseDigit(const Digit& digit) { - if (CompareDigit(digit, s_digit1)) + for (int i = 0; i < 10; ++i) { - return 1; + if (CompareDigit(digit, s_digits[i])) + { + return i; + } } return 0; } From fd6100c6028c66e41f1400fafdefb638c2a1ecee Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:09:22 +0200 Subject: [PATCH 16/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index dcbe8288..8976f2ea 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -243,6 +243,10 @@ int ParseDigit(const Digit& digit) } return 0; } +std::vector SplitDigits(const Display& display) +{ + return {}; +} /* Tests */ TEST(CompareDigitTest, ItShouldReturnFalseForDifferendDigits) @@ -269,3 +273,8 @@ TEST(ParseDigitTest, ItShouldReturnIntegerDigitForAnyDigitFromList) EXPECT_EQ(i, ParseDigit(s_digits[i])); } } + +TEST(SplitDigitsTest, ItShouldReturnVectorWithSizeNine) +{ + EXPECT_EQ(9, SplitDigits(s_displayAll0).size()); +} From 510db83354ee5b75134f6f5c75dff860d6b64bee Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:10:14 +0200 Subject: [PATCH 17/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 8976f2ea..08f4740e 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -245,7 +245,8 @@ int ParseDigit(const Digit& digit) } std::vector SplitDigits(const Display& display) { - return {}; + std::vector result(9); + return result; } /* Tests */ From 0c0855343cfcef681f0753cba3a5e1ded00f27b2 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:10:29 +0200 Subject: [PATCH 18/33] refactoring --- tdd_intro/homework/03_bank_ocr/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 08f4740e..89a421f9 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -246,7 +246,7 @@ int ParseDigit(const Digit& digit) std::vector SplitDigits(const Display& display) { std::vector result(9); - return result; + return std::move(result); } /* Tests */ From fc91d3d4f7fe515a633a41e090e29ccc31149e48 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:12:50 +0200 Subject: [PATCH 19/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 89a421f9..aa8bd9b7 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -279,3 +279,7 @@ TEST(SplitDigitsTest, ItShouldReturnVectorWithSizeNine) { EXPECT_EQ(9, SplitDigits(s_displayAll0).size()); } +TEST(SplitDigitsTest, FirstDigitMustBeZeroForAllZeroes) +{ + EXPECT_TRUE(CompareDigit(s_digit0, SplitDigits(s_displayAll0).front())); +} From 2f96057a51e012662e4af79f281e069c15f2ff40 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:13:44 +0200 Subject: [PATCH 20/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index aa8bd9b7..07985f27 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -246,6 +246,7 @@ int ParseDigit(const Digit& digit) std::vector SplitDigits(const Display& display) { std::vector result(9); + result[0] = s_digit0; return std::move(result); } From 8eec6f57729ca5bb644e91524adef9d29cecb8d8 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:15:42 +0200 Subject: [PATCH 21/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 07985f27..87967aea 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -284,3 +284,7 @@ TEST(SplitDigitsTest, FirstDigitMustBeZeroForAllZeroes) { EXPECT_TRUE(CompareDigit(s_digit0, SplitDigits(s_displayAll0).front())); } +TEST(SplitDigitsTest, FirstDigitMustBeOneForAllOnes) +{ + EXPECT_TRUE(CompareDigit(s_digit1, SplitDigits(s_displayAll1).front())); +} From de73cd931aecdde599378a6b5aeb1ae85de85485 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:16:41 +0200 Subject: [PATCH 22/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 87967aea..cf9c9bed 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -246,7 +246,9 @@ int ParseDigit(const Digit& digit) std::vector SplitDigits(const Display& display) { std::vector result(9); - result[0] = s_digit0; + result[0].lines[0] = display.lines[0].substr(0, 3); + result[0].lines[1] = display.lines[1].substr(0, 3); + result[0].lines[2] = display.lines[2].substr(0, 3); return std::move(result); } From 35be7f25b36512778e0a01968eda30d735ec81ec Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:17:44 +0200 Subject: [PATCH 23/33] refactoring --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index cf9c9bed..a80c9233 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -246,9 +246,10 @@ int ParseDigit(const Digit& digit) std::vector SplitDigits(const Display& display) { std::vector result(9); - result[0].lines[0] = display.lines[0].substr(0, 3); - result[0].lines[1] = display.lines[1].substr(0, 3); - result[0].lines[2] = display.lines[2].substr(0, 3); + for (int i = 0; i < g_linesInDigit; ++i) + { + result[0].lines[i] = display.lines[i].substr(0, g_digitLen); + } return std::move(result); } From 27799d363b856d4987640bd8aeaedd4907f6d7d1 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:19:29 +0200 Subject: [PATCH 24/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index a80c9233..91984d7b 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -291,3 +291,7 @@ TEST(SplitDigitsTest, FirstDigitMustBeOneForAllOnes) { EXPECT_TRUE(CompareDigit(s_digit1, SplitDigits(s_displayAll1).front())); } +TEST(SplitDigitsTest, SecondDigitMustBeTwoForAllTwos) +{ + EXPECT_TRUE(CompareDigit(s_digit2, SplitDigits(s_displayAll2).at(1))); +} From b93f91d614441521bee3cff70db5d34915927b55 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:21:21 +0200 Subject: [PATCH 25/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 91984d7b..7cfadb68 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -246,9 +246,12 @@ int ParseDigit(const Digit& digit) std::vector SplitDigits(const Display& display) { std::vector result(9); - for (int i = 0; i < g_linesInDigit; ++i) + for (int j = 0; j < 9; ++j) { - result[0].lines[i] = display.lines[i].substr(0, g_digitLen); + for (int i = 0; i < g_linesInDigit; ++i) + { + result[j].lines[i] = display.lines[i].substr(0, g_digitLen); + } } return std::move(result); } From 51bfdc9d9095aa0a7d249caa9cfacaf746ff09d2 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:22:24 +0200 Subject: [PATCH 26/33] refactoring --- tdd_intro/homework/03_bank_ocr/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 7cfadb68..b042f824 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -245,12 +245,12 @@ int ParseDigit(const Digit& digit) } std::vector SplitDigits(const Display& display) { - std::vector result(9); - for (int j = 0; j < 9; ++j) + std::vector result(g_digitsOnDisplay); + for (int j = 0; j < g_digitsOnDisplay; ++j) { for (int i = 0; i < g_linesInDigit; ++i) { - result[j].lines[i] = display.lines[i].substr(0, g_digitLen); + result.at(j).lines[i] = display.lines[i].substr(0, g_digitLen); } } return std::move(result); From e5d3a9e0736df749c5781d9510458b5f4c43f2a8 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:33:26 +0200 Subject: [PATCH 27/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index b042f824..fc9a4274 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -298,3 +298,17 @@ TEST(SplitDigitsTest, SecondDigitMustBeTwoForAllTwos) { EXPECT_TRUE(CompareDigit(s_digit2, SplitDigits(s_displayAll2).at(1))); } +TEST(SplitDigitsTest, ItShouldParseEachDigitOnDisplay) +{ + std::vector expected = { + s_digit1, s_digit2, s_digit3, + s_digit4, s_digit5, s_digit6, + s_digit7, s_digit8, s_digit9 + }; + std::vector splitted = SplitDigits(s_display123456789); + + for (size_t i = 0; i < g_digitsOnDisplay; i++) + { + EXPECT_TRUE(CompareDigit(expected.at(i), splitted.at(i))); + } +} From cedcd2e3ec882155317d3e82b6e0b899a01c7977 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:33:54 +0200 Subject: [PATCH 28/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index fc9a4274..bf67f244 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -250,7 +250,7 @@ std::vector SplitDigits(const Display& display) { for (int i = 0; i < g_linesInDigit; ++i) { - result.at(j).lines[i] = display.lines[i].substr(0, g_digitLen); + result.at(j).lines[i] = display.lines[i].substr(j * g_digitLen, g_digitLen); } } return std::move(result); From 34665ea0b7df60cd37b5644f699f4f3f5d70cab8 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:50:15 +0200 Subject: [PATCH 29/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index bf67f244..43d4a4af 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -255,6 +255,10 @@ std::vector SplitDigits(const Display& display) } return std::move(result); } +int ParseAccountNumber(const Display& display) +{ + return 0; +} /* Tests */ TEST(CompareDigitTest, ItShouldReturnFalseForDifferendDigits) @@ -312,3 +316,8 @@ TEST(SplitDigitsTest, ItShouldParseEachDigitOnDisplay) EXPECT_TRUE(CompareDigit(expected.at(i), splitted.at(i))); } } + +TEST(ParseAccountNumberTest, ItShouldReturnNineOnesForAll1) +{ + EXPECT_EQ(111111111, ParseAccountNumber(s_displayAll1)); +} From 302269102ba552f171bab15a795104340a5465fe Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:50:46 +0200 Subject: [PATCH 30/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 43d4a4af..0384806a 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -257,7 +257,7 @@ std::vector SplitDigits(const Display& display) } int ParseAccountNumber(const Display& display) { - return 0; + return 111111111; } /* Tests */ From 6e46818a107a8387057cb1257b9073ba0413766e Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:51:15 +0200 Subject: [PATCH 31/33] red --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 0384806a..ffb12fe2 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -321,3 +321,7 @@ TEST(ParseAccountNumberTest, ItShouldReturnNineOnesForAll1) { EXPECT_EQ(111111111, ParseAccountNumber(s_displayAll1)); } +TEST(ParseAccountNumberTest, ItShouldReturnNineTwosForAll2) +{ + EXPECT_EQ(222222222, ParseAccountNumber(s_displayAll2)); +} From a86d302fb20943c50959c036bce5b5ee40c220a9 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:53:34 +0200 Subject: [PATCH 32/33] green --- tdd_intro/homework/03_bank_ocr/test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index ffb12fe2..19077080 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -257,7 +257,13 @@ std::vector SplitDigits(const Display& display) } int ParseAccountNumber(const Display& display) { - return 111111111; + int result = 0; + std::vector splittedDigits = SplitDigits(display); + for (const Digit& digit : splittedDigits) + { + result = result * 10 + ParseDigit(digit); + } + return result; } /* Tests */ From ba8f865aea4f1b994d9235aefae06e80005e7903 Mon Sep 17 00:00:00 2001 From: Zakhar Kurasov Date: Wed, 14 Nov 2018 21:55:12 +0200 Subject: [PATCH 33/33] acceptance --- tdd_intro/homework/03_bank_ocr/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 19077080..2fc0a569 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -331,3 +331,17 @@ TEST(ParseAccountNumberTest, ItShouldReturnNineTwosForAll2) { EXPECT_EQ(222222222, ParseAccountNumber(s_displayAll2)); } +TEST(ParseAccountNumberTest, AcceptanceUserStory1) +{ + EXPECT_EQ(0, ParseAccountNumber(s_displayAll0)); + EXPECT_EQ(111111111, ParseAccountNumber(s_displayAll1)); + EXPECT_EQ(222222222, ParseAccountNumber(s_displayAll2)); + EXPECT_EQ(333333333, ParseAccountNumber(s_displayAll3)); + EXPECT_EQ(444444444, ParseAccountNumber(s_displayAll4)); + EXPECT_EQ(555555555, ParseAccountNumber(s_displayAll5)); + EXPECT_EQ(666666666, ParseAccountNumber(s_displayAll6)); + EXPECT_EQ(777777777, ParseAccountNumber(s_displayAll7)); + EXPECT_EQ(888888888, ParseAccountNumber(s_displayAll8)); + EXPECT_EQ(999999999, ParseAccountNumber(s_displayAll9)); + EXPECT_EQ(123456789, ParseAccountNumber(s_display123456789)); +}