From 79733218e6e232a661e1ac9cf500ddf1c70d7aec Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 14:33:39 +0300 Subject: [PATCH 01/15] return 0 when empty string logic --- src/StringCalculator.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 487916b..7131c6f 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,9 +1,14 @@ public class StringCalculator { + + // Returns the sum of the numbers given in numbersStr public int add(String numbersStr) { - // Returns the sum of the numbers given in numbersStr - // not yet implemented - return 0; + if (numbersStr.length() == 0) { + return 0; + } + + return 1; } + } From 25e8211e92181373c1d27c6d04774b30b8f7d762 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 14:42:40 +0300 Subject: [PATCH 02/15] add tests for empty string returning 0 --- tests/StringCalculatorTest.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 4ec9afe..29ca3ba 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -3,10 +3,25 @@ import org.junit.Test; public class StringCalculatorTest { + + StringCalculator calc = new StringCalculator(); @Test - public void test() { - fail("Not yet implemented"); + public void StringCalculatorTest_EmptyString() { + int result = calc.add(""); + assertEquals("Empty string returns wrong value", 0, result); + } + + @Test + public void StringCalculatorTest_NonEmptyString() { + int result = calc.add("1,2"); + assertTrue("Non Empty string returns wrong value", 0 != result); + } + + @Test + public void StringCalculatorTest_invalid_string() { + int result = calc.add("asdasd"); + assertTrue("Non Empty string returns wrong value", 0 != result); } } From 5f59581d4cd2dc4dd3e4d6ac0d9b6f6249560ebb Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 14:49:52 +0300 Subject: [PATCH 03/15] add converting string to integers and exception throwing --- src/StringCalculator.java | 25 ++++++++++++++++++++++++- tests/StringCalculatorTest.java | 6 +++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 7131c6f..637bbef 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -2,13 +2,36 @@ public class StringCalculator { // Returns the sum of the numbers given in numbersStr - public int add(String numbersStr) { + public int add(String numbersStr) throws StringCalculatorException { if (numbersStr.length() == 0) { return 0; } + int[] numbers = StringArrayToInt(numbersStr.split(",")); + return 1; } + + private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorException { + int[] intNumbers = {}; + int tempInt; + for (int i = 0; i < strNumbers.length; i++) { + tempInt = Integer.parseInt(strNumbers[i]); + if (validateNumber(tempInt)) { + intNumbers[i] = tempInt; + } + else { + throw (new StringCalculatorException()); + } + } + + return intNumbers; + } + + private boolean validateNumber(int number) { + // TODO add logic + return true; + } } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 29ca3ba..e7b4adf 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -7,19 +7,19 @@ public class StringCalculatorTest { StringCalculator calc = new StringCalculator(); @Test - public void StringCalculatorTest_EmptyString() { + public void StringCalculatorTest_EmptyString() throws StringCalculatorException { int result = calc.add(""); assertEquals("Empty string returns wrong value", 0, result); } @Test - public void StringCalculatorTest_NonEmptyString() { + public void StringCalculatorTest_NonEmptyString() throws StringCalculatorException { int result = calc.add("1,2"); assertTrue("Non Empty string returns wrong value", 0 != result); } @Test - public void StringCalculatorTest_invalid_string() { + public void StringCalculatorTest_invalid_string() throws StringCalculatorException { int result = calc.add("asdasd"); assertTrue("Non Empty string returns wrong value", 0 != result); } From 684bef078eaa589ec1d416cb808a646ea6515f73 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 14:57:02 +0300 Subject: [PATCH 04/15] handle conversion exception and change tests accordingly --- src/StringCalculator.java | 13 +++++++++++-- tests/StringCalculatorTest.java | 3 +-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 637bbef..544688e 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -14,16 +14,25 @@ public int add(String numbersStr) throws StringCalculatorException { } private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorException { - int[] intNumbers = {}; + int[] intNumbers = new int[3]; int tempInt; for (int i = 0; i < strNumbers.length; i++) { - tempInt = Integer.parseInt(strNumbers[i]); + + // Try converting part of the string to a integer + try { + tempInt = Integer.parseInt(strNumbers[i]); + } + catch(Exception e) { + throw (new StringCalculatorException()); + } + if (validateNumber(tempInt)) { intNumbers[i] = tempInt; } else { throw (new StringCalculatorException()); } + } return intNumbers; diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index e7b4adf..63eafc1 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -18,10 +18,9 @@ public void StringCalculatorTest_NonEmptyString() throws StringCalculatorExcepti assertTrue("Non Empty string returns wrong value", 0 != result); } - @Test + @Test(expected=StringCalculatorException.class) public void StringCalculatorTest_invalid_string() throws StringCalculatorException { int result = calc.add("asdasd"); - assertTrue("Non Empty string returns wrong value", 0 != result); } } From 62c0abbfe4584b4f5f002323fcc1288a93c162af Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:02:29 +0300 Subject: [PATCH 05/15] add number validation logic --- src/StringCalculator.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 544688e..ec1a8aa 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,14 +1,18 @@ +import java.util.Arrays; public class StringCalculator { + static final int[] validNumbers = {0, 1, 2}; + // Returns the sum of the numbers given in numbersStr public int add(String numbersStr) throws StringCalculatorException { + int [] numbers; if (numbersStr.length() == 0) { return 0; } - int[] numbers = StringArrayToInt(numbersStr.split(",")); + numbers = StringArrayToInt(numbersStr.split(",")); return 1; } @@ -26,7 +30,7 @@ private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorExcep throw (new StringCalculatorException()); } - if (validateNumber(tempInt)) { + if (!validateNumber(tempInt)) { intNumbers[i] = tempInt; } else { @@ -39,8 +43,10 @@ private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorExcep } private boolean validateNumber(int number) { - // TODO add logic - return true; + if (Arrays.asList(validNumbers).contains(number)) { + return true; + } + return false; } } From faef990e94d34e82bdf4991d35dee4521ac9acd7 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:14:48 +0300 Subject: [PATCH 06/15] add test on invalid number, fix validation --- src/StringCalculator.java | 9 ++++++--- tests/StringCalculatorTest.java | 11 ++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index ec1a8aa..ee44f00 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -30,7 +30,7 @@ private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorExcep throw (new StringCalculatorException()); } - if (!validateNumber(tempInt)) { + if (validateNumber(tempInt)) { intNumbers[i] = tempInt; } else { @@ -43,8 +43,11 @@ private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorExcep } private boolean validateNumber(int number) { - if (Arrays.asList(validNumbers).contains(number)) { - return true; + for (int i: validNumbers) { + if (i == number) { + System.out.println("number found"); + return true; + } } return false; } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 63eafc1..0a01b26 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -3,7 +3,7 @@ import org.junit.Test; public class StringCalculatorTest { - + StringCalculator calc = new StringCalculator(); @Test @@ -11,16 +11,21 @@ public void StringCalculatorTest_EmptyString() throws StringCalculatorException int result = calc.add(""); assertEquals("Empty string returns wrong value", 0, result); } - + @Test public void StringCalculatorTest_NonEmptyString() throws StringCalculatorException { int result = calc.add("1,2"); assertTrue("Non Empty string returns wrong value", 0 != result); } - + @Test(expected=StringCalculatorException.class) public void StringCalculatorTest_invalid_string() throws StringCalculatorException { int result = calc.add("asdasd"); } + @Test(expected=StringCalculatorException.class) + public void StringCalculatorTest_invalid_numbers() throws StringCalculatorException { + int result = calc.add("3,2"); + } + } From 3c8b85dee270c309d34d7807e31ad84f9a4290d5 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:15:47 +0300 Subject: [PATCH 07/15] remove debug message --- src/StringCalculator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index ee44f00..4505e86 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -45,7 +45,6 @@ private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorExcep private boolean validateNumber(int number) { for (int i: validNumbers) { if (i == number) { - System.out.println("number found"); return true; } } From 5c6657cf497b33fade5e4f462d6c4b49aeb7a8b9 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:17:35 +0300 Subject: [PATCH 08/15] add calculation logic --- src/StringCalculator.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 4505e86..f2c508b 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -7,14 +7,16 @@ public class StringCalculator { // Returns the sum of the numbers given in numbersStr public int add(String numbersStr) throws StringCalculatorException { int [] numbers; + int result; if (numbersStr.length() == 0) { return 0; } numbers = StringArrayToInt(numbersStr.split(",")); + result = calculateNumbers(numbers); - return 1; + return result; } private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorException { @@ -50,5 +52,13 @@ private boolean validateNumber(int number) { } return false; } + + private int calculateNumbers(int[] numbers) { + int sum = 0; + for (int x: numbers) { + sum += x; + } + return sum; + } } From 85d0bd9e15f007cf57fec482d23399984b9df8d8 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:24:23 +0300 Subject: [PATCH 09/15] add calculation result test --- tests/StringCalculatorTest.java | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 0a01b26..d543dcb 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -27,5 +27,40 @@ public void StringCalculatorTest_invalid_string() throws StringCalculatorExcepti public void StringCalculatorTest_invalid_numbers() throws StringCalculatorException { int result = calc.add("3,2"); } + + @Test + public void StringCalculatorTest_1_2_3() throws StringCalculatorException { + int result = calc.add("1,2"); + assertTrue("1 + 2 returns a wrong answer " + result, result == 3); + } + + @Test + public void StringCalculatorTest_1_2_2_5() throws StringCalculatorException { + int result = calc.add("1,2,2"); + assertTrue("1 + 2 + 2 returns a wrong answer " + result, result == 5); + } + + @Test + public void StringCalculatorTest_1_0_0_1() throws StringCalculatorException { + int result = calc.add("1,0,0"); + assertTrue("1 + 0 + 0 returns a wrong answer " + result, result == 1); + } + + @Test + public void StringCalculatorTest_0_0_0() throws StringCalculatorException { + int result = calc.add("0,0"); + assertTrue("0 + 0 returns a wrong answer " + result, result == 0); + } + + @Test + public void StringCalculatorTest_0() throws StringCalculatorException { + int result = calc.add("0"); + assertTrue("0 returns a wrong answer " + result, result == 0); + } + + @Test(expected=StringCalculatorException.class) + public void StringCalculatorTest_negative() throws StringCalculatorException { + int result = calc.add("-1,0"); + } } From 862839509983042d14b41f66890afb64402b3ac1 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:36:40 +0300 Subject: [PATCH 10/15] make size of int array dynamic to the input --- src/StringCalculator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index f2c508b..5d1436f 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,4 +1,3 @@ -import java.util.Arrays; public class StringCalculator { @@ -20,7 +19,7 @@ public int add(String numbersStr) throws StringCalculatorException { } private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorException { - int[] intNumbers = new int[3]; + int[] intNumbers = new int[strNumbers.length]; int tempInt; for (int i = 0; i < strNumbers.length; i++) { From 349d68d76b8b504bdf5786d56eb535cc4006b722 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:41:55 +0300 Subject: [PATCH 11/15] add \n delimiter --- tests/StringCalculatorTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index d543dcb..d98c992 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -62,5 +62,12 @@ public void StringCalculatorTest_0() throws StringCalculatorException { public void StringCalculatorTest_negative() throws StringCalculatorException { int result = calc.add("-1,0"); } + + @Test + public void StringCalculatorTest_1_1_1_1_1_5() throws StringCalculatorException { + int result = calc.add("1,1,1,1,1"); + assertTrue("1+1+1+1+1 returns a wrong answer " + result, result == 5); + + } } From bb5da87dea154d6eb095e2d4a932f646657ac1f6 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:42:34 +0300 Subject: [PATCH 12/15] add \n delimiter --- src/StringCalculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 5d1436f..17a98cc 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -12,7 +12,7 @@ public int add(String numbersStr) throws StringCalculatorException { return 0; } - numbers = StringArrayToInt(numbersStr.split(",")); + numbers = StringArrayToInt(numbersStr.split(",|\\n")); result = calculateNumbers(numbers); return result; From 5db33336357dec02990a7c3edb25ad92d4c73753 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:45:32 +0300 Subject: [PATCH 13/15] add new line as delimiter test --- tests/StringCalculatorTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index d98c992..2dd5d4c 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -67,7 +67,12 @@ public void StringCalculatorTest_negative() throws StringCalculatorException { public void StringCalculatorTest_1_1_1_1_1_5() throws StringCalculatorException { int result = calc.add("1,1,1,1,1"); assertTrue("1+1+1+1+1 returns a wrong answer " + result, result == 5); - + } + + @Test + public void StringCalculatorTest_1_2_3_new_line() throws StringCalculatorException { + int result = calc.add("1\n2"); + assertTrue("1 + 2 with new line returns a wrong answer " + result, result == 3); } } From 6e2052a8d714ac75e4c10ccbe67445745fe074a0 Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:48:42 +0300 Subject: [PATCH 14/15] add test for invalid input --- tests/StringCalculatorTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 2dd5d4c..46c06c9 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -74,5 +74,9 @@ public void StringCalculatorTest_1_2_3_new_line() throws StringCalculatorExcepti int result = calc.add("1\n2"); assertTrue("1 + 2 with new line returns a wrong answer " + result, result == 3); } + @Test(expected=StringCalculatorException.class) + public void StringCalculatorTest_invalid_input_new_line() throws StringCalculatorException { + int result = calc.add("1,\n"); + } } From 8b5032135d9895b090e6f8f028ae2914bb25d83d Mon Sep 17 00:00:00 2001 From: Olli Hiekkaranta Date: Fri, 16 Sep 2016 15:53:22 +0300 Subject: [PATCH 15/15] refactor validation logic --- src/StringCalculator.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 17a98cc..71e41b2 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -31,25 +31,21 @@ private int[] StringArrayToInt(String[] strNumbers) throws StringCalculatorExcep throw (new StringCalculatorException()); } - if (validateNumber(tempInt)) { - intNumbers[i] = tempInt; - } - else { - throw (new StringCalculatorException()); - } + validateNumber(tempInt); + intNumbers[i] = tempInt; } return intNumbers; } - private boolean validateNumber(int number) { + private void validateNumber(int number) throws StringCalculatorException { for (int i: validNumbers) { if (i == number) { - return true; + return; } } - return false; + throw (new StringCalculatorException()); } private int calculateNumbers(int[] numbers) {