From a12afae8721f7407a7c957d9884a6b506f617209 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Wed, 31 Oct 2018 17:29:27 +0200 Subject: [PATCH 01/19] 5: refactored --- tdd_intro/homework/05_word_wrapp/test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 77e47210..1802a5fb 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -41,13 +41,13 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) cur.pop_back(); } - if(!cur.empty() && cur.front() == ' ') - { - cur = cur.substr(1); - } - if(!cur.empty()) { + if(cur.front() == ' ') + { + cur = cur.substr(1); + } + result.push_back(cur); } } From f93dce69ed3044850fa0517a948af0e079231259 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Wed, 31 Oct 2018 17:29:36 +0200 Subject: [PATCH 02/19] 5: fixed build --- tdd_intro/homework/homework.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/homework.pro b/tdd_intro/homework/homework.pro index cf6c01b9..8c9e93ce 100644 --- a/tdd_intro/homework/homework.pro +++ b/tdd_intro/homework/homework.pro @@ -6,4 +6,4 @@ SUBDIRS += \ 03_bank_ocr \ 04_weather_client \ 05_word_wrapp \ - 06_coffee + From eaeef3395cf5cf8cb5b4ea1ff0d1b45de95f58dc Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:16:43 +0200 Subject: [PATCH 03/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 1802a5fb..363a1d37 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -94,3 +94,9 @@ TEST(WrapString, StringWrappedBySeveralWhitespace) WrappedStrings expected = {"12", "34"}; ASSERT_EQ(expected, WrapString("12 34", 3)); } + +TEST(WrapString, StringEndsWithOneWhitespace) +{ + WrappedStrings expected = {"123"}; + ASSERT_EQ(expected, WrapString("123 ", 3)); +} From 357bdec269aab2420404f7d810838ab7852baa5a Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:29:56 +0200 Subject: [PATCH 04/19] 5: added tests --- tdd_intro/homework/05_word_wrapp/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 363a1d37..09402858 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -100,3 +100,9 @@ TEST(WrapString, StringEndsWithOneWhitespace) WrappedStrings expected = {"123"}; ASSERT_EQ(expected, WrapString("123 ", 3)); } + +TEST(WrapString, MultipleWhitespaceAtWrapLimit) +{ + WrappedStrings expected = {"123", "4", "56"}; + ASSERT_EQ(expected, WrapString("123 456", 3)); +} From ca7c9fa718d567c3cc1014d38a6429c16d8a66ff Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:48:18 +0200 Subject: [PATCH 05/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 30 +++++++++++++++++------ 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 09402858..fa45ca7b 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -18,14 +18,18 @@ 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 ends with one whitespace longer than limit + -// string wrapped by several whitespaces (less than wrapLength) -// string wrapped by several whitespaces (more than wrapLength) +// string should be wrapped by space if it is present under limit (two words in string, space before limit) +// string should be wrapped by space if it is present under limit (three words in string, two spaces before limit) +// string should be wrapped by space if it is present under limit (three words in string, no space before limit) // only whitespaces in string using WrappedStrings = std::vector; @@ -33,9 +37,21 @@ using WrappedStrings = std::vector; WrappedStrings WrapString(const std::string& str, size_t wrapLength) { WrappedStrings result; - for(size_t i = 0; i < str.length(); i += wrapLength) + size_t curLimit = wrapLength; + for(size_t i = 0; i < str.length(); i += curLimit) { - std::string cur = str.substr(i, wrapLength); + auto pos = str.find_first_of(' '); + std::cout << "POs: " << pos << std::endl; + if(pos != std::string::npos && (pos > i && pos < wrapLength)) + { + curLimit = pos + 1; + } + else + { + curLimit = wrapLength; + } + + std::string cur = str.substr(i, curLimit); if (cur.back() == ' ') { cur.pop_back(); @@ -101,8 +117,8 @@ TEST(WrapString, StringEndsWithOneWhitespace) ASSERT_EQ(expected, WrapString("123 ", 3)); } -TEST(WrapString, MultipleWhitespaceAtWrapLimit) +TEST(WrapString, TwoWordsSpaceBeforeLimit) { - WrappedStrings expected = {"123", "4", "56"}; - ASSERT_EQ(expected, WrapString("123 456", 3)); + WrappedStrings expected = {"1", "234"}; + ASSERT_EQ(expected, WrapString("1 234", 3)); } From 8fb0b2db96f91c8af7268cb04d750b9252cc855b Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:48:55 +0200 Subject: [PATCH 06/19] 5: minor refactoring --- tdd_intro/homework/05_word_wrapp/test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index fa45ca7b..07f6344a 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -41,7 +41,6 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) for(size_t i = 0; i < str.length(); i += curLimit) { auto pos = str.find_first_of(' '); - std::cout << "POs: " << pos << std::endl; if(pos != std::string::npos && (pos > i && pos < wrapLength)) { curLimit = pos + 1; From 729289f8a09907e7fb167ce281b90009505451c1 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:49:10 +0200 Subject: [PATCH 07/19] 5: red --- tdd_intro/homework/05_word_wrapp/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 07f6344a..9a4cfc65 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -121,3 +121,9 @@ TEST(WrapString, TwoWordsSpaceBeforeLimit) WrappedStrings expected = {"1", "234"}; ASSERT_EQ(expected, WrapString("1 234", 3)); } + +TEST(WrapString, ThreeWordsTwoSpaceBeforeLimit) +{ + WrappedStrings expected = {"1 2", "345"}; + ASSERT_EQ(expected, WrapString("1 2 345", 5)); +} From d76d471c344336aba371f54b88631154c735a4ae Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:51:15 +0200 Subject: [PATCH 08/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 9a4cfc65..4adf1812 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -40,7 +40,7 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) size_t curLimit = wrapLength; for(size_t i = 0; i < str.length(); i += curLimit) { - auto pos = str.find_first_of(' '); + auto pos = str.find_last_of(' ', i + curLimit); if(pos != std::string::npos && (pos > i && pos < wrapLength)) { curLimit = pos + 1; From 9296e78702475cf2533693b163c3f039b1674317 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:52:14 +0200 Subject: [PATCH 09/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 4adf1812..3d3587e2 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -127,3 +127,9 @@ TEST(WrapString, ThreeWordsTwoSpaceBeforeLimit) WrappedStrings expected = {"1 2", "345"}; ASSERT_EQ(expected, WrapString("1 2 345", 5)); } + +TEST(WrapString,TwoWordsNoSpaceBeforeLimit) +{ + WrappedStrings expected = {"12", "3", "45"}; + ASSERT_EQ(expected, WrapString("123 45", 2)); +} From 1e5b5f68ab11312bf08f5cc86743b6f610958dc6 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:53:32 +0200 Subject: [PATCH 10/19] 5: red --- tdd_intro/homework/05_word_wrapp/test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 3d3587e2..4763bcb8 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -128,8 +128,14 @@ TEST(WrapString, ThreeWordsTwoSpaceBeforeLimit) ASSERT_EQ(expected, WrapString("1 2 345", 5)); } -TEST(WrapString,TwoWordsNoSpaceBeforeLimit) +TEST(WrapString, TwoWordsNoSpaceBeforeLimit) { WrappedStrings expected = {"12", "3", "45"}; ASSERT_EQ(expected, WrapString("123 45", 2)); } + +TEST(WrapString, OnlySpaces) +{ + WrappedStrings expected = {}; + ASSERT_EQ(expected, WrapString(" ", 2)); +} From 399a9f57b882969537cd85e1b1f29c99faac3de6 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 10:59:32 +0200 Subject: [PATCH 11/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 4763bcb8..2d47f84e 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -56,13 +56,13 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) cur.pop_back(); } - if(!cur.empty()) + if(!cur.empty() && cur.front() == ' ') { - if(cur.front() == ' ') - { - cur = cur.substr(1); - } + cur = cur.substr(1); + } + if(!cur.empty()) + { result.push_back(cur); } } From a3b9cb26f8b46eef1c26e0157f62b5ae7fe9c0a9 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 11:00:45 +0200 Subject: [PATCH 12/19] 5: red --- tdd_intro/homework/05_word_wrapp/test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 2d47f84e..52f298f5 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -139,3 +139,10 @@ TEST(WrapString, OnlySpaces) WrappedStrings expected = {}; ASSERT_EQ(expected, WrapString(" ", 2)); } + + +TEST(WrapString, OnlySpacesThreeSpacesInBlock) +{ + WrappedStrings expected = {}; + ASSERT_EQ(expected, WrapString(" ", 3)); +} From 319719ade34439c59ce51fbc707fde188eab0e19 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 11:01:08 +0200 Subject: [PATCH 13/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 52f298f5..3d5c8e7f 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -61,7 +61,7 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) cur = cur.substr(1); } - if(!cur.empty()) + if(!cur.empty() && cur != " ") { result.push_back(cur); } From c1403a2bf7eedb4c0b7a5e3045860d1032422cd9 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 11:03:53 +0200 Subject: [PATCH 14/19] 5: refactored --- tdd_intro/homework/05_word_wrapp/test.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 3d5c8e7f..a98bdca3 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -34,6 +34,12 @@ ignoring any possible match beginning after pos using WrappedStrings = std::vector; +void TrimString(std::string& str) +{ + str.erase(0, str.find_first_not_of(' ')); + str.erase(str.find_last_not_of(' ') + 1); +} + WrappedStrings WrapString(const std::string& str, size_t wrapLength) { WrappedStrings result; @@ -51,15 +57,7 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) } std::string cur = str.substr(i, curLimit); - if (cur.back() == ' ') - { - cur.pop_back(); - } - - if(!cur.empty() && cur.front() == ' ') - { - cur = cur.substr(1); - } + TrimString(cur); if(!cur.empty() && cur != " ") { From d81cb2deb97e7525066951ef929f2b618645113a Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 11:16:38 +0200 Subject: [PATCH 15/19] 5: red --- tdd_intro/homework/05_word_wrapp/test.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index a98bdca3..e4a9716c 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -138,9 +138,14 @@ TEST(WrapString, OnlySpaces) ASSERT_EQ(expected, WrapString(" ", 2)); } - TEST(WrapString, OnlySpacesThreeSpacesInBlock) { WrappedStrings expected = {}; ASSERT_EQ(expected, WrapString(" ", 3)); } + +TEST(WrapString, WrapLimitAtWordEnd) +{ + WrappedStrings expected = {"123", "456"}; + ASSERT_EQ(expected, WrapString("123 456", 3)); +} From 20913c5f55914c8d2a625c527780198e76f740c0 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 11:40:15 +0200 Subject: [PATCH 16/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index e4a9716c..a5b90939 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -46,6 +46,15 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) size_t curLimit = wrapLength; for(size_t i = 0; i < str.length(); i += curLimit) { + if(str[i] == ' ') + { + auto pos = str.find_first_not_of(' ', i); + if(pos != std::string::npos) + { + i = pos; + } + } + auto pos = str.find_last_of(' ', i + curLimit); if(pos != std::string::npos && (pos > i && pos < wrapLength)) { From db442e80313533da99914ce1c6cbfe26f3c3c2b7 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 13:22:26 +0200 Subject: [PATCH 17/19] 5: red --- tdd_intro/homework/05_word_wrapp/test.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index a5b90939..0b7a97f5 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -158,3 +158,13 @@ TEST(WrapString, WrapLimitAtWordEnd) WrappedStrings expected = {"123", "456"}; ASSERT_EQ(expected, WrapString("123 456", 3)); } + +TEST(WrapString, LongStringWithSpacesAfterWrap) +{ + WrappedStrings expected = {"When pos is specified, the", + "search only includes sequences", + "of characters that begin at or", + "before position pos, ignoring",}; + ASSERT_EQ(expected, WrapString("When pos is specified, the search only includes sequences of characters that begin at or before position pos, ignoring", 30)); +} + From 32d7db8b22e650c810703aa5d906054665ce4d00 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 13:22:49 +0200 Subject: [PATCH 18/19] 5: green --- tdd_intro/homework/05_word_wrapp/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 0b7a97f5..095ccbf3 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -55,10 +55,10 @@ WrappedStrings WrapString(const std::string& str, size_t wrapLength) } } - auto pos = str.find_last_of(' ', i + curLimit); - if(pos != std::string::npos && (pos > i && pos < wrapLength)) + auto pos = str.find_last_of(' ', i + wrapLength); + if(pos != std::string::npos && (pos > i) && i + wrapLength < str.length()) { - curLimit = pos + 1; + curLimit = pos - i; } else { From 4abfaf97a073a4399b7b0267cc944c4e28423fe8 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 1 Nov 2018 13:23:11 +0200 Subject: [PATCH 19/19] 5: acceptance --- tdd_intro/homework/05_word_wrapp/test.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 095ccbf3..b400dfbf 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -168,3 +168,14 @@ TEST(WrapString, LongStringWithSpacesAfterWrap) ASSERT_EQ(expected, WrapString("When pos is specified, the search only includes sequences of characters that begin at or before position pos, ignoring", 30)); } +TEST(WrapString, Acceptance) +{ + WrappedStrings expected = {"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."}; + ASSERT_EQ(expected, WrapString("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.", 30)); +}