diff --git a/bin/StringCalculator.class b/bin/StringCalculator.class index a937b0c..bf98942 100644 Binary files a/bin/StringCalculator.class and b/bin/StringCalculator.class differ diff --git a/bin/StringCalculatorTest.class b/bin/StringCalculatorTest.class index d44b83f..942de30 100644 Binary files a/bin/StringCalculatorTest.class and b/bin/StringCalculatorTest.class differ diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 487916b..4623b01 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,9 +1,34 @@ public class StringCalculator { - public int add(String numbersStr) { - // Returns the sum of the numbers given in numbersStr + public int add(String numbersStr) throws StringCalculatorException { - // not yet implemented - return 0; + if (numbersStr.length() == 0) { + return 0; + } + + int sum = 0; + int index = 0; + + while (index < numbersStr.length()) { + + char character = numbersStr.charAt(index); + + if (character != ',' && character != '\n') { + if (Character.isDigit(character) == false) { + throw new StringCalculatorException(); + } else { + sum+= Character.getNumericValue(character); + } + } else { + if ((index + 1) < numbersStr.length() && + Character.isDigit(numbersStr.charAt(index + 1)) == false) { + throw new StringCalculatorException(); + } + } + + index++; + } + + return sum; } } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 4ec9afe..568adc4 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -5,8 +5,55 @@ public class StringCalculatorTest { @Test - public void test() { - fail("Not yet implemented"); + public void testWith0And2And2NumbersSeparatedWithComma() throws StringCalculatorException { + StringCalculator calculator = new StringCalculator(); + + assertEquals(0, calculator.add("")); + assertEquals(1, calculator.add("1")); + assertEquals(3, calculator.add("1,2")); } + + @Test + public void testWithUnknownAmountOfNumbersSeparatedWithComma() throws StringCalculatorException { + StringCalculator calculator = new StringCalculator(); + + assertEquals(12, calculator.add("4,7,1")); + assertEquals(17, calculator.add("4,7,1,5")); + assertEquals(23, calculator.add("1,2,3,8,9")); + + } + + @Test + public void testWithNewLinesBetweenNumbers() throws StringCalculatorException { + StringCalculator calculator = new StringCalculator(); + + assertEquals(14, calculator.add("3\n5,6")); + assertEquals(21, calculator.add("3,5\n6,7")); + assertEquals(24, calculator.add("3,6,7\n8")); + } + + @Test (expected = StringCalculatorException.class) + public void testWithNegativeNumbers() throws StringCalculatorException { + StringCalculator calculator = new StringCalculator(); + + //Negative numbers + calculator.add("-1,-5"); + } + + @Test (expected = StringCalculatorException.class) + public void testWithInvalidInput1() throws StringCalculatorException { + StringCalculator calculator = new StringCalculator(); + + //Invalid input + calculator.add("1,\n"); + } + + @Test (expected = StringCalculatorException.class) + public void testWithInvalidInput2() throws StringCalculatorException { + StringCalculator calculator = new StringCalculator(); + + //Invalid input + calculator.add(",,,,,1"); + } }