From eaaeefa88bd7912b4a51d01790b885dc0fa72046 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 10:32:19 +0300 Subject: [PATCH 01/16] 2: red --- tdd_intro/homework/02_ternary_numbers/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 17503028..7f567156 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -16,3 +16,9 @@ The last place in a ternary number is the 1's place. The second to last is the 3 If your language provides a method in the standard library to perform the conversion, pretend it doesn't exist and implement it yourself. */ + + +TEST(TernaryNumber, BaseTest) +{ + EXPECT_EQ(1, ConvertTernaryToDecimal("1")); +} From c71f73449699a59519e4a0bed552e1c50647ec4e Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 10:34:17 +0300 Subject: [PATCH 02/16] 2: green --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 7f567156..6cb539ee 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -17,6 +17,11 @@ The last place in a ternary number is the 1's place. The second to last is the 3 If your language provides a method in the standard library to perform the conversion, pretend it doesn't exist and implement it yourself. */ +int ConvertTernaryToDecimal(const std::string& ternaryNumber) +{ + return 1; +} + TEST(TernaryNumber, BaseTest) { From c3c913d5d63f902b3e7becf4c066218b33df4965 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 10:43:11 +0300 Subject: [PATCH 03/16] 2: refactored --- tdd_intro/homework/02_ternary_numbers/test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 6cb539ee..38f7b3d2 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -19,11 +19,11 @@ If your language provides a method in the standard library to perform the conver int ConvertTernaryToDecimal(const std::string& ternaryNumber) { - return 1; + return std::stoi(ternaryNumber); } -TEST(TernaryNumber, BaseTest) +TEST(TernaryNumber, OneConvertsToOneTest) { EXPECT_EQ(1, ConvertTernaryToDecimal("1")); } From 11776e0c310fa72778f1644f233b471e32fff3f9 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 10:49:51 +0300 Subject: [PATCH 04/16] 2: red --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 38f7b3d2..4a8d98fd 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -27,3 +27,8 @@ TEST(TernaryNumber, OneConvertsToOneTest) { EXPECT_EQ(1, ConvertTernaryToDecimal("1")); } + +TEST(TernaryNumber, ConvertValidTernaryNumberTest) +{ + EXPECT_EQ(5, ConvertTernaryToDecimal("012")); +} From 276348ba0ca72904ba4525287c2954da356213aa Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 10:53:18 +0300 Subject: [PATCH 05/16] 2: green --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 4a8d98fd..a2cf93f6 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -19,6 +19,11 @@ If your language provides a method in the standard library to perform the conver int ConvertTernaryToDecimal(const std::string& ternaryNumber) { + if(ternaryNumber == "012") + { + return 5; + } + return std::stoi(ternaryNumber); } From 072f36b0df26c11520f04145c049950940eaeb9a Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 10:59:07 +0300 Subject: [PATCH 06/16] 2: red --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index a2cf93f6..29da5ad9 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -37,3 +37,8 @@ TEST(TernaryNumber, ConvertValidTernaryNumberTest) { EXPECT_EQ(5, ConvertTernaryToDecimal("012")); } + +TEST(TernaryNumber, ConvertAnotherValidTernaryNumberTest) +{ + EXPECT_EQ(5, ConvertTernaryToDecimal("102012")); +} From 65d170a9a371e25c779bc9ef9d32589de87b5e86 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:00:16 +0300 Subject: [PATCH 07/16] 2: for previous commit --- tdd_intro/homework/02_ternary_numbers/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 29da5ad9..b3eb7f53 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -40,5 +40,5 @@ TEST(TernaryNumber, ConvertValidTernaryNumberTest) TEST(TernaryNumber, ConvertAnotherValidTernaryNumberTest) { - EXPECT_EQ(5, ConvertTernaryToDecimal("102012")); + EXPECT_EQ(302, ConvertTernaryToDecimal("102012")); } From 24d23ef9f6158f4073f69617634053c02f101032 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:12:24 +0300 Subject: [PATCH 08/16] 2: green --- tdd_intro/homework/02_ternary_numbers/test.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index b3eb7f53..1b82d431 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -19,12 +19,15 @@ If your language provides a method in the standard library to perform the conver int ConvertTernaryToDecimal(const std::string& ternaryNumber) { - if(ternaryNumber == "012") + int sum = 0; + long value = 1; + for(int i = ternaryNumber.length() - 1; i >= 0; --i) { - return 5; + sum += (ternaryNumber[i] - 48) * value; + value *= 3; } - return std::stoi(ternaryNumber); + return sum; } From 02a4be69f3dd2bf7dda6b8974df22d89462a785a Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:15:19 +0300 Subject: [PATCH 09/16] 2: refactored --- tdd_intro/homework/02_ternary_numbers/test.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 1b82d431..e6a3a383 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -17,14 +17,19 @@ The last place in a ternary number is the 1's place. The second to last is the 3 If your language provides a method in the standard library to perform the conversion, pretend it doesn't exist and implement it yourself. */ +const int s_ternary_base = 3; +const int s_ascii_shift = 48; + int ConvertTernaryToDecimal(const std::string& ternaryNumber) { int sum = 0; long value = 1; - for(int i = ternaryNumber.length() - 1; i >= 0; --i) + int numberLen = ternaryNumber.length(); + + for(int i = numberLen - 1; i >= 0; --i) { - sum += (ternaryNumber[i] - 48) * value; - value *= 3; + sum += (ternaryNumber[i] - s_ascii_shift) * value; + value *= s_ternary_base; } return sum; From 743ea9ebb4d1f1b96068cd6af6cce389b05f9949 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:16:08 +0300 Subject: [PATCH 10/16] 2: red --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index e6a3a383..a97c34cc 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -50,3 +50,8 @@ TEST(TernaryNumber, ConvertAnotherValidTernaryNumberTest) { EXPECT_EQ(302, ConvertTernaryToDecimal("102012")); } + +TEST(TernaryNumber, InvalidTernaryNumberTest) +{ + EXPECT_EQ(0, ConvertTernaryToDecimal("502012")); +} From e3792736a5d663c0a06c3047f0c35b62d37ba03a Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:19:27 +0300 Subject: [PATCH 11/16] 2: green --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index a97c34cc..2a7f2a4b 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -28,6 +28,11 @@ int ConvertTernaryToDecimal(const std::string& ternaryNumber) for(int i = numberLen - 1; i >= 0; --i) { + int currentSymbol = static_cast(ternaryNumber[i]) - s_ascii_shift; + if(currentSymbol > 3 || currentSymbol < 0) + { + return 0; + } sum += (ternaryNumber[i] - s_ascii_shift) * value; value *= s_ternary_base; } From f8d79bf779339f5db4de2b628fe82da8a715fcb6 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:22:24 +0300 Subject: [PATCH 12/16] 2: refactored --- tdd_intro/homework/02_ternary_numbers/test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 2a7f2a4b..edd98164 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -20,6 +20,11 @@ If your language provides a method in the standard library to perform the conver const int s_ternary_base = 3; const int s_ascii_shift = 48; +bool IsValidTernaryDigit(int digit) +{ + return (digit <= 3 && digit >= 0); +} + int ConvertTernaryToDecimal(const std::string& ternaryNumber) { int sum = 0; @@ -29,10 +34,11 @@ int ConvertTernaryToDecimal(const std::string& ternaryNumber) for(int i = numberLen - 1; i >= 0; --i) { int currentSymbol = static_cast(ternaryNumber[i]) - s_ascii_shift; - if(currentSymbol > 3 || currentSymbol < 0) + if(!IsValidTernaryDigit(currentSymbol)) { return 0; } + sum += (ternaryNumber[i] - s_ascii_shift) * value; value *= s_ternary_base; } From 0f1b5265c11fd3c4e8a6eacf108ee26c8ec8121b Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:25:59 +0300 Subject: [PATCH 13/16] 2: red --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index edd98164..43d3a1cb 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -66,3 +66,8 @@ TEST(TernaryNumber, InvalidTernaryNumberTest) { EXPECT_EQ(0, ConvertTernaryToDecimal("502012")); } + +TEST(TernaryNumber, BigTernaryNumberTest) +{ + EXPECT_EQ(10460353203, ConvertTernaryToDecimal("100000000000000000000")); +} From 2584a42597d88fd18417b0e0e4e218b256d5d9ed Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:34:33 +0300 Subject: [PATCH 14/16] 2: green --- tdd_intro/homework/02_ternary_numbers/test.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 43d3a1cb..88078a85 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -25,10 +25,10 @@ bool IsValidTernaryDigit(int digit) return (digit <= 3 && digit >= 0); } -int ConvertTernaryToDecimal(const std::string& ternaryNumber) +long long ConvertTernaryToDecimal(const std::string& ternaryNumber) { - int sum = 0; - long value = 1; + long long sum = 0; + long long value = 1; int numberLen = ternaryNumber.length(); for(int i = numberLen - 1; i >= 0; --i) @@ -69,5 +69,5 @@ TEST(TernaryNumber, InvalidTernaryNumberTest) TEST(TernaryNumber, BigTernaryNumberTest) { - EXPECT_EQ(10460353203, ConvertTernaryToDecimal("100000000000000000000")); + EXPECT_EQ(10460353203, ConvertTernaryToDecimal("1000000000000000000000")); } From beb630590fdf288b26ebf89ec97aba083df4e6fc Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:34:54 +0300 Subject: [PATCH 15/16] 2: refactored --- tdd_intro/homework/02_ternary_numbers/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 88078a85..3cdcc0ff 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -39,7 +39,7 @@ long long ConvertTernaryToDecimal(const std::string& ternaryNumber) return 0; } - sum += (ternaryNumber[i] - s_ascii_shift) * value; + sum += currentSymbol * value; value *= s_ternary_base; } From 0aa20e1c4cc8be1d75b8984ca316d4943dfbea46 Mon Sep 17 00:00:00 2001 From: Daria Tkachenko Date: Thu, 11 Oct 2018 11:39:02 +0300 Subject: [PATCH 16/16] 2: added acceptance tests --- tdd_intro/homework/02_ternary_numbers/test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 3cdcc0ff..cbb928ca 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -71,3 +71,16 @@ TEST(TernaryNumber, BigTernaryNumberTest) { EXPECT_EQ(10460353203, ConvertTernaryToDecimal("1000000000000000000000")); } + +TEST(TernaryNumber, IsValidTernaryDigitNegativeTest) +{ + EXPECT_FALSE(IsValidTernaryDigit(-45)); +} + +TEST(TernaryNumber, AcceptanceTest) +{ + EXPECT_EQ(0, ConvertTernaryToDecimal("0")); + EXPECT_EQ(12, ConvertTernaryToDecimal("33")); + EXPECT_EQ(0, ConvertTernaryToDecimal("567")); + EXPECT_EQ(0, ConvertTernaryToDecimal("(567)bh")); +}