From 62ab5e08b269f8ce7eb86a283ff0dc11207632c0 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 10:54:15 +0300 Subject: [PATCH 01/20] Merged changes from workshop --- tdd_intro/homework/05_word_wrapp/test.cpp | 83 ++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index f29c0fa..7281e37 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -1,8 +1,89 @@ /* Write a function, that is given a string and a length limit, splits provided string into sequence of string, where length of each string is not more, than provided limit. If there are spaces under provided limit - -last space should be used to wrapp this line. If there are no spaces - wrapp it on provided length limit. +last space should be used to Wrappp this line. If there are no spaces - Wrappp it on provided length limit. + +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. + +"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." */ #include #include +#include +//1. Empty test. +//2. Short word and big limit. +//3. Big word and short limit. +//4. Input string with all spaces. +//5. String with 2 words and space before limit. +//6. String with 2 words and space after limit. +//7. String with 2 words and space on limit. +//8. String with 2 words and several spaces before limit. +//9. String with words and different count of spaces. +//10. + +using Strings_vt = std::vector; +std::vector WordWrapp(std::string data, unsigned int limit) +{ + Strings_vt result; + if (data.empty()) + { + return result; + } + + for (int pos = 0; pos < data.size(); pos += limit) + { + + std::string word(data.substr(pos, limit)); + if (word != " ") + { + if (word.back() == ' ') + { + word.pop_back(); + } + result.push_back(word); + } + } + + return result; +} + +TEST(WordWrappTests, Put_empty_get_empty) +{ + EXPECT_EQ(Strings_vt{}, WordWrapp("", 5)); +} + +TEST(WordWrappTests, Put_ShortWord_with_BigLimit) +{ + EXPECT_EQ(Strings_vt{"Word"}, WordWrapp("Word", 5)); +} + +TEST(WordWrappTests, Put_ShortWord_with_space) +{ + EXPECT_EQ(Strings_vt{"Word"}, WordWrapp("Word ", 4)); +} + +TEST(WordWrappTests, BigWord_ShortLimit) +{ + EXPECT_EQ(Strings_vt({"01234", "56789"}), WordWrapp("0123456789", 5)); +} + +TEST(WordWrappTests, BigWord_ShortLimit_ThreeWords) +{ + EXPECT_EQ(Strings_vt({"01234", "56789", "01234"}), WordWrapp("012345678901234", 5)); +} + +TEST(WordWrappTests, TwoWordWithSpace) +{ + EXPECT_EQ(Strings_vt({"0123", "4567"}), WordWrapp("0123 4567", 5)); +} + +TEST(WordWrappTests, ThreeWordWithSingleSpaces) +{ + EXPECT_EQ(Strings_vt({"012 3", "45678"}), WordWrapp("012 3 45678", 5)); +} From 77a607bde428c92d142d623af779241032031826 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:06:28 +0300 Subject: [PATCH 02/20] Trim_OneSpaceBeforeWord --- tdd_intro/homework/05_word_wrapp/test.cpp | 7 +++ tdd_intro/tdd_intro.pro.user | 74 +++++++++++------------ 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 7281e37..f8439d2 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -87,3 +87,10 @@ TEST(WordWrappTests, ThreeWordWithSingleSpaces) { EXPECT_EQ(Strings_vt({"012 3", "45678"}), WordWrapp("012 3 45678", 5)); } + +TEST(WordWrappTests, Trim_OneSpaceBeforeWord) +{ + std::string wordToTrim(" word"); + trim(wordToTrim); + EXPECT_EQ("word", wordToTrim); +} diff --git a/tdd_intro/tdd_intro.pro.user b/tdd_intro/tdd_intro.pro.user index a2f1674..6206700 100644 --- a/tdd_intro/tdd_intro.pro.user +++ b/tdd_intro/tdd_intro.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {a9e7f687-ac9f-466e-a5b0-c81b575a0a1d} + {950e75d0-15c4-4cbb-8e75-9217fe27f405} ProjectExplorer.Project.ActiveTarget @@ -59,14 +59,14 @@ ProjectExplorer.Project.Target.0 - Qt 5.7.0 (windows) - Qt 5.7.0 (windows) - {bb54e87c-a17e-4f34-bfa2-da2794ff8a10} + Desktop Qt 5.10.0 MSVC2015 32bit + Desktop Qt 5.10.0 MSVC2015 32bit + qt.qt5.5100.win32_msvc2015_kit 0 0 - 11 + 0 - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug + C:/Users/ertev/Desktop/TDD course/tdd-course-2/build-tdd_intro-Desktop_Qt_5_10_0_MSVC2015_32bit-Debug true @@ -120,7 +120,7 @@ true - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Release + C:/Users/ertev/Desktop/TDD course/tdd-course-2/build-tdd_intro-Desktop_Qt_5_10_0_MSVC2015_32bit-Release true @@ -174,7 +174,7 @@ true - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Profile + C:/Users/ertev/Desktop/TDD course/tdd-course-2/build-tdd_intro-Desktop_Qt_5_10_0_MSVC2015_32bit-Profile true @@ -286,13 +286,13 @@ chatclient - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/cleanroom/chatclient/chatclient.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/cleanroom/chatclient/chatclient.pro true cleanroom/chatclient/chatclient.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/cleanroom/chatclient + 3768 false true @@ -344,13 +344,13 @@ 01_bob - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/01_bob/01_bob.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/01_bob/01_bob.pro true homework/01_bob/01_bob.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/01_bob + 3768 false true @@ -402,13 +402,13 @@ 02_word_count - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/02_word_count/02_word_count.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/02_word_count/02_word_count.pro true workshops/02_word_count/02_word_count.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/02_word_count + 3768 false true @@ -460,13 +460,13 @@ 03_anagram 03_anagram2 - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/03_anagram/03_anagram.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/03_anagram/03_anagram.pro true workshops/03_anagram/03_anagram.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/03_anagram + 3768 false true @@ -518,13 +518,13 @@ 04_trinary_numbers 04_trinary_numbers2 - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/04_trinary_numbers/04_trinary_numbers.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/04_trinary_numbers/04_trinary_numbers.pro true workshops/04_trinary_numbers/04_trinary_numbers.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/04_trinary_numbers + 3768 false true @@ -576,13 +576,13 @@ 05_word_wrapp 05_word_wrapp2 - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/05_word_wrapp/05_word_wrapp.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/05_word_wrapp/05_word_wrapp.pro true workshops/05_word_wrapp/05_word_wrapp.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/05_word_wrapp + 3768 false true @@ -634,13 +634,13 @@ 02_leap_year - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/02_leap_year/02_leap_year.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/02_leap_year/02_leap_year.pro true homework/02_leap_year/02_leap_year.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/02_leap_year + 3768 false true @@ -692,13 +692,13 @@ 03_anagram - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/03_anagram/03_anagram.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/03_anagram/03_anagram.pro true homework/03_anagram/03_anagram.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/03_anagram + 3768 false true @@ -750,13 +750,13 @@ 04_trinary_numbers - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/04_trinary_numbers/04_trinary_numbers.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/04_trinary_numbers/04_trinary_numbers.pro true homework/04_trinary_numbers/04_trinary_numbers.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/04_trinary_numbers + 3768 false true @@ -808,13 +808,13 @@ 05_word_wrapp - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro true homework/05_word_wrapp/05_word_wrapp.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/05_word_wrapp + 3768 false true @@ -866,13 +866,13 @@ 06_bank_ocr - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/06_bank_ocr/06_bank_ocr.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/06_bank_ocr/06_bank_ocr.pro true homework/06_bank_ocr/06_bank_ocr.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/06_bank_ocr + 3768 false true @@ -924,13 +924,13 @@ 07_filecopier - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/07_filecopier/07_filecopier.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/07_filecopier/07_filecopier.pro true homework/07_filecopier/07_filecopier.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/07_filecopier + 3768 false true @@ -982,13 +982,13 @@ 08_timer - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/08_timer/08_timer.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/08_timer/08_timer.pro true homework/08_timer/08_timer.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/08_timer + 3768 false true @@ -1040,13 +1040,13 @@ 01_fizz_buzz - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/01_fizz_buzz/01_fizz_buzz.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/01_fizz_buzz/01_fizz_buzz.pro true workshops/01_fizz_buzz/01_fizz_buzz.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/01_fizz_buzz + 3768 false true From ddf4dcbd1b0326122e1d77effe3f53cfda8ee8ea Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:07:44 +0300 Subject: [PATCH 03/20] Trim_OneSpaceBeforeWord - green --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index f8439d2..29c0a00 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -27,6 +27,11 @@ When pos is specified, the search only includes sequences of characters that beg //9. String with words and different count of spaces. //10. +void trim(std::string& str) +{ + str = "word"; +} + using Strings_vt = std::vector; std::vector WordWrapp(std::string data, unsigned int limit) { From ae0b4e00e76b1f063e017196e45729fe2a8c85fb Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:09:53 +0300 Subject: [PATCH 04/20] Trim_SpaceBeforeTwoWords - 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 29c0a00..7c05c59 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -99,3 +99,10 @@ TEST(WordWrappTests, Trim_OneSpaceBeforeWord) trim(wordToTrim); EXPECT_EQ("word", wordToTrim); } + +TEST(WordWrappTests, Trim_SpaceBeforeTwoWords) +{ + std::string wordToTrim(" hello world"); + trim(wordToTrim); + EXPECT_EQ("hello world", wordToTrim); +} From 416ddb7310ab65b732522977a0704191f643048a Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:11:02 +0300 Subject: [PATCH 05/20] Trim_SpaceBeforeTwoWords - green --- 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 7c05c59..624433c 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -29,7 +29,13 @@ When pos is specified, the search only includes sequences of characters that beg void trim(std::string& str) { - str = "word"; + if (str == " word") + { + str = "word"; + return; + } + + str = "hello world"; } using Strings_vt = std::vector; From 2137550380cc20b8f0a89faf678cabbf59dcbd63 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:11:48 +0300 Subject: [PATCH 06/20] Left trim - refactoring --- tdd_intro/homework/05_word_wrapp/test.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 624433c..98e0b5e 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -29,13 +29,9 @@ When pos is specified, the search only includes sequences of characters that beg void trim(std::string& str) { - if (str == " word") - { - str = "word"; - return; - } - - str = "hello world"; + str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](int ch) { + return !std::isspace(ch); + })); } using Strings_vt = std::vector; From dfb7d5b58c254f2263b0e27cd1976bdd459fd3d8 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:14:37 +0300 Subject: [PATCH 07/20] Trim_OneSpaceAfterWord - 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 98e0b5e..2f9e736 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -108,3 +108,10 @@ TEST(WordWrappTests, Trim_SpaceBeforeTwoWords) trim(wordToTrim); EXPECT_EQ("hello world", wordToTrim); } + +TEST(WordWrappTests, Trim_OneSpaceAfterWord) +{ + std::string wordToTrim("word "); + trim(wordToTrim); + EXPECT_EQ("word", wordToTrim); +} From 020bd98bcc4f10cb0890ffe66af3f81e84ad5fd5 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 12 Jun 2018 11:19:57 +0300 Subject: [PATCH 08/20] Trim_OneSpaceAfterWord - 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 2f9e736..62a0033 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -16,6 +16,8 @@ When pos is specified, the search only includes sequences of characters that beg #include #include #include +#include + //1. Empty test. //2. Short word and big limit. //3. Big word and short limit. @@ -32,6 +34,10 @@ void trim(std::string& str) str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](int ch) { return !std::isspace(ch); })); + + str.erase(std::find_if(str.rbegin(), str.rend(), [](int ch) { + return !std::isspace(ch); + }).base(), str.end()); } using Strings_vt = std::vector; From 4774d13acc204229670f031e232d6d741fb3ed71 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:12:02 +0300 Subject: [PATCH 09/20] Test ThreeWordWithSingleSpaces - green --- tdd_intro/homework/05_word_wrapp/test.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 62a0033..03fdfaf 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -49,17 +49,23 @@ std::vector WordWrapp(std::string data, unsigned int limit) return result; } - for (int pos = 0; pos < data.size(); pos += limit) + while (!data.empty()) { + trim(data); - std::string word(data.substr(pos, limit)); - if (word != " ") + std::string word(data.substr(0, limit)); + + trim(word); + + result.push_back(word); + + if (data.size() > limit) + { + data = data.substr(limit); + } + else { - if (word.back() == ' ') - { - word.pop_back(); - } - result.push_back(word); + break; } } From 2e44e0e85b3d07edb60c4f6d9ae52c77c9fc8e70 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:14:07 +0300 Subject: [PATCH 10/20] Test TwoWordSeveralSpaces - already green --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 03fdfaf..3197527 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -107,6 +107,11 @@ TEST(WordWrappTests, ThreeWordWithSingleSpaces) EXPECT_EQ(Strings_vt({"012 3", "45678"}), WordWrapp("012 3 45678", 5)); } +TEST(WordWrappTests, TwoWordSeveralSpaces) +{ + EXPECT_EQ(Strings_vt({"0123", "4567"}), WordWrapp("0123 4567", 6)); +} + TEST(WordWrappTests, Trim_OneSpaceBeforeWord) { std::string wordToTrim(" word"); From c8d4e50daf2edee19dbf522daedb080eb787d10d Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:16:23 +0300 Subject: [PATCH 11/20] Test OnlySpaces - red --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 3197527..ba5de29 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -112,6 +112,11 @@ TEST(WordWrappTests, TwoWordSeveralSpaces) EXPECT_EQ(Strings_vt({"0123", "4567"}), WordWrapp("0123 4567", 6)); } +TEST(WordWrappTests, OnlySpaces) +{ + EXPECT_EQ(Strings_vt{}, WordWrapp(" ", 3)); +} + TEST(WordWrappTests, Trim_OneSpaceBeforeWord) { std::string wordToTrim(" word"); From 102b3fd8ab51ae47cc726b9725e2bb41fa6de890 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:17:01 +0300 Subject: [PATCH 12/20] Test OnlySpaces - green --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index ba5de29..f054edc 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -57,7 +57,10 @@ std::vector WordWrapp(std::string data, unsigned int limit) trim(word); - result.push_back(word); + if (!word.empty()) + { + result.push_back(word); + } if (data.size() > limit) { From 5447e3d98ef1cdcdd33478d5b5e113afac44bf1d Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:20:03 +0300 Subject: [PATCH 13/20] Test SeveralWordsDifferentCountOfSpaces - red --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index f054edc..bf64478 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -120,6 +120,11 @@ TEST(WordWrappTests, OnlySpaces) EXPECT_EQ(Strings_vt{}, WordWrapp(" ", 3)); } +TEST(WordWrappTests, SeveralWordsDifferentCountOfSpaces) +{ + EXPECT_EQ(Strings_vt({"Hello,", "my name is", "Sergey"}), WordWrapp("Hello, my name is Sergey", 10)); +} + TEST(WordWrappTests, Trim_OneSpaceBeforeWord) { std::string wordToTrim(" word"); From 914ac0913c3289c981c1e95346325ffcc4be6ac1 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:29:46 +0300 Subject: [PATCH 14/20] Test Split_TwoWordWithOneSpace --- tdd_intro/homework/05_word_wrapp/test.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index bf64478..34f86ef 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -29,6 +29,8 @@ When pos is specified, the search only includes sequences of characters that beg //9. String with words and different count of spaces. //10. +using Strings_vt = std::vector; + void trim(std::string& str) { str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](int ch) { @@ -40,7 +42,11 @@ void trim(std::string& str) }).base(), str.end()); } -using Strings_vt = std::vector; +Strings_vt split(std::string str) +{ + return {}; +} + std::vector WordWrapp(std::string data, unsigned int limit) { Strings_vt result; @@ -145,3 +151,8 @@ TEST(WordWrappTests, Trim_OneSpaceAfterWord) trim(wordToTrim); EXPECT_EQ("word", wordToTrim); } + +TEST(WordWrappTests, Split_TwoWordWithOneSpace) +{ + EXPECT_EQ(Strings_vt({"Hello", "world"}), split("Hello world")); +} From a42d298d703ff5840416fad5fac4b46d7f4a5671 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:30:32 +0300 Subject: [PATCH 15/20] Test Split_TwoWordWithOneSpace - 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 34f86ef..d5164ab 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -44,7 +44,7 @@ void trim(std::string& str) Strings_vt split(std::string str) { - return {}; + return Strings_vt({"Hello", "world"}); } std::vector WordWrapp(std::string data, unsigned int limit) From d1b8fae36503efe99efd1d0f261b4b885391c511 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:32:03 +0300 Subject: [PATCH 16/20] Test Split_ThreeWordsSingleSpaces - red --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index d5164ab..0e24563 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -156,3 +156,8 @@ TEST(WordWrappTests, Split_TwoWordWithOneSpace) { EXPECT_EQ(Strings_vt({"Hello", "world"}), split("Hello world")); } + +TEST(WordWrappTests, Split_ThreeWordsSingleSpaces) +{ + EXPECT_EQ(Strings_vt({"Hello", "perfect" ,"world"}), split("Hello perfect world")); +} From 768cedc70adf909db17b544b533aefd054c8b473 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 00:40:21 +0300 Subject: [PATCH 17/20] Test Split_ThreeWordsSingleSpaces - green --- tdd_intro/homework/05_word_wrapp/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 0e24563..926e42b 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -44,6 +44,11 @@ void trim(std::string& str) Strings_vt split(std::string str) { + if (str.size() > 11) + { + return Strings_vt({"Hello", "perfect" ,"world"}); + } + return Strings_vt({"Hello", "world"}); } From 5451d60b0065d50b2daff5dc8e8527ec9cd3b383 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 01:50:00 +0300 Subject: [PATCH 18/20] Split function refactoring --- tdd_intro/homework/05_word_wrapp/test.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 926e42b..c4e84e4 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -44,12 +44,28 @@ void trim(std::string& str) Strings_vt split(std::string str) { - if (str.size() > 11) + Strings_vt result; + + int pos; + int prev_pos = 0; + + while (!str.empty()) { - return Strings_vt({"Hello", "perfect" ,"world"}); + pos = str.find(' ', prev_pos); + + std::string word; + if (pos == -1) + { + pos = str.size(); + } + word = str.substr(prev_pos, pos - prev_pos); + prev_pos = pos; + + trim(word); + result.push_back(word); } - return Strings_vt({"Hello", "world"}); + return result; } std::vector WordWrapp(std::string data, unsigned int limit) From 3ad2366897b0632f083f5f78ba9e81fdaf20a8d7 Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 01:58:48 +0300 Subject: [PATCH 19/20] Had wrong idea with split: removed it --- tdd_intro/homework/05_word_wrapp/test.cpp | 36 ----------------------- 1 file changed, 36 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index c4e84e4..73cdd28 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -42,32 +42,6 @@ void trim(std::string& str) }).base(), str.end()); } -Strings_vt split(std::string str) -{ - Strings_vt result; - - int pos; - int prev_pos = 0; - - while (!str.empty()) - { - pos = str.find(' ', prev_pos); - - std::string word; - if (pos == -1) - { - pos = str.size(); - } - word = str.substr(prev_pos, pos - prev_pos); - prev_pos = pos; - - trim(word); - result.push_back(word); - } - - return result; -} - std::vector WordWrapp(std::string data, unsigned int limit) { Strings_vt result; @@ -172,13 +146,3 @@ TEST(WordWrappTests, Trim_OneSpaceAfterWord) trim(wordToTrim); EXPECT_EQ("word", wordToTrim); } - -TEST(WordWrappTests, Split_TwoWordWithOneSpace) -{ - EXPECT_EQ(Strings_vt({"Hello", "world"}), split("Hello world")); -} - -TEST(WordWrappTests, Split_ThreeWordsSingleSpaces) -{ - EXPECT_EQ(Strings_vt({"Hello", "perfect" ,"world"}), split("Hello perfect world")); -} From 94c6a9797ba1edd247c2e225430058f5445a1bbe Mon Sep 17 00:00:00 2001 From: Raynare Date: Wed, 13 Jun 2018 02:14:36 +0300 Subject: [PATCH 20/20] Test SeveralWordsDifferentCountOfSpaces - green --- tdd_intro/homework/05_word_wrapp/test.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp index 73cdd28..696c12d 100644 --- a/tdd_intro/homework/05_word_wrapp/test.cpp +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -54,7 +54,24 @@ std::vector WordWrapp(std::string data, unsigned int limit) { trim(data); - std::string word(data.substr(0, limit)); + int pos = limit; + if (pos < data.size() && data[pos] != ' ') + { + for (int i = pos; i > 0; --i) + { + if (data[i-1] == ' ') + { + pos = i; + break; + } + } + if (pos == 0) + { + pos = limit; + } + } + + std::string word(data.substr(0, pos)); trim(word); @@ -63,9 +80,9 @@ std::vector WordWrapp(std::string data, unsigned int limit) result.push_back(word); } - if (data.size() > limit) + if (data.size() > pos) { - data = data.substr(limit); + data = data.substr(pos); } else {