diff --git a/pom.xml b/pom.xml index f4d0ad5..a1988ad 100644 --- a/pom.xml +++ b/pom.xml @@ -94,5 +94,15 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + + 10 + 10 + + + diff --git a/src/main/java/com/serenitydojo/Exceptions/IllegalMathsOperatorException.java b/src/main/java/com/serenitydojo/Exceptions/IllegalMathsOperatorException.java new file mode 100644 index 0000000..a5f6202 --- /dev/null +++ b/src/main/java/com/serenitydojo/Exceptions/IllegalMathsOperatorException.java @@ -0,0 +1,7 @@ +package com.serenitydojo.Exceptions; + +public class IllegalMathsOperatorException extends RuntimeException { + public IllegalMathsOperatorException(String message) { + super(message); + } +} diff --git a/src/main/java/com/serenitydojo/calculator/Calculator.java b/src/main/java/com/serenitydojo/calculator/Calculator.java index 8e88bf0..78c2f53 100644 --- a/src/main/java/com/serenitydojo/calculator/Calculator.java +++ b/src/main/java/com/serenitydojo/calculator/Calculator.java @@ -1,7 +1,43 @@ package com.serenitydojo.calculator; +import com.serenitydojo.Exceptions.IllegalMathsOperatorException; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class Calculator { public int evaluate(String expression) { - return 0; + List splittedExpression = Arrays.stream(expression.split(" ")).collect(Collectors.toList()); + List operands = List.of("1","2","3","4","5","6","7","8","9","0"); + + int expressionTotal =0; + String operand ="+"; + + if (expression.isEmpty()) { + return 0; + } + for(String character : splittedExpression) { + if (!operands.contains(character)) { + operand = character; + } else { + expressionTotal = calculateOperation(expressionTotal, operand, character); + } + } + return expressionTotal; + } + + private int calculateOperation(int total, String operand, String token) { + switch (operand) { + case "+": + return total + Integer.parseInt(token); + case "-": + return total - Integer.parseInt(token); + case "*": + return total * Integer.parseInt(token); + default: + throw new IllegalMathsOperatorException(operand + "Does not exist"); + } } } + diff --git a/src/test/java/com/serenitydojo/calculator/WhenDoingMaths.java b/src/test/java/com/serenitydojo/calculator/WhenDoingMaths.java index eac4b31..44c4b5e 100644 --- a/src/test/java/com/serenitydojo/calculator/WhenDoingMaths.java +++ b/src/test/java/com/serenitydojo/calculator/WhenDoingMaths.java @@ -1,5 +1,6 @@ package com.serenitydojo.calculator; +import com.serenitydojo.Exceptions.IllegalMathsOperatorException; import org.apache.commons.lang3.StringUtils; import org.junit.Test; @@ -13,38 +14,38 @@ public void shouldReturnZeroForAnEmptyString() { assertThat(calculator.evaluate("")).isEqualTo(0); } -// @Test(expected = IllegalMathsOperatorException.class) -// public void shouldReportNonSupportedOperations() { -// calculator.evaluate("1 ^ 2"); -// } -// -// @Test -// public void shouldReturnTheValueOfASingleNumber() { -// assertThat(calculator.evaluate("1")).isEqualTo(1); -// } -// -// @Test -// public void shouldAddTwoNumbers() { -// assertThat(calculator.evaluate("1 + 1")).isEqualTo(2); -// } -// -// @Test -// public void shouldAddThreeNumbers() { -// assertThat(calculator.evaluate("1 + 2 + 3")).isEqualTo(6); -// } -// -// @Test -// public void shouldAlsoSubtract() { -// assertThat(calculator.evaluate("10 - 6")).isEqualTo(4); -// } -// -// @Test -// public void shouldAddAndSubtract() { -// assertThat(calculator.evaluate("10 + 5 - 6")).isEqualTo(9); -// } -// -// @Test -// public void shouldMultiplyNumbers() { -// assertThat(calculator.evaluate("10 * 5")).isEqualTo(50); -// } + @Test(expected = IllegalMathsOperatorException.class) + public void shouldReportNonSupportedOperations() { + calculator.evaluate("1 ^ 2"); + } + + @Test + public void shouldReturnTheValueOfASingleNumber() { + assertThat(calculator.evaluate("1")).isEqualTo(1); + } + + @Test + public void shouldAddTwoNumbers() throws IllegalMathsOperatorException { + assertThat(calculator.evaluate("1 + 1")).isEqualTo(2); + } + + @Test + public void shouldAddThreeNumbers() { + assertThat(calculator.evaluate("1 + 2 + 3")).isEqualTo(6); + } + + @Test + public void shouldAlsoSubtract() { + assertThat(calculator.evaluate("10 - 6")).isEqualTo(4); + } + + @Test + public void shouldAddAndSubtract() { + assertThat(calculator.evaluate("10 + 5 - 6")).isEqualTo(9); + } + + @Test + public void shouldMultiplyNumbers() { + assertThat(calculator.evaluate("10 * 5")).isEqualTo(50); + } }