diff --git a/javafx-template/.gitignore b/javafx-template/.gitignore index 2131639..f06b466 100644 --- a/javafx-template/.gitignore +++ b/javafx-template/.gitignore @@ -1,2 +1,7 @@ # ignore maven build folder target/ + +# pom-derived eclipse jdt files +.project +.classpath +org.eclipse.*.prefs diff --git a/javafx-template/src/main/java/app/Calc.java b/javafx-template/src/main/java/app/Calc.java index 1f0c5c8..231878c 100644 --- a/javafx-template/src/main/java/app/Calc.java +++ b/javafx-template/src/main/java/app/Calc.java @@ -38,7 +38,7 @@ public class Calc { * @throws IllegalArgumentException if n is larger than the operand count */ public double peekOperand(int n) { - if (n > getOperandCount()) { + if (n >= getOperandCount()) { throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount()); } return operandStack.get(getOperandCount() - n - 1); @@ -102,7 +102,7 @@ public class Calc { * @throws IllegalStateException if the operand count is less than two */ public void swap() { - // TODO + } /** diff --git a/javafx-template/src/test/java/app/CalcTest.java b/javafx-template/src/test/java/app/CalcTest.java index 28064cf..150778d 100644 --- a/javafx-template/src/test/java/app/CalcTest.java +++ b/javafx-template/src/test/java/app/CalcTest.java @@ -86,10 +86,11 @@ public class CalcTest { @Test public void testSwap() { Calc calc = new Calc(1.0, 3.14); - calc.swap(); checkCalc(calc, 3.14, 1.0); calc.swap(); checkCalc(calc, 1.0, 3.14); + calc.swap(); + checkCalc(calc, 3.14, 1.0); } @Test diff --git a/modules-template/.gitignore b/modules-template/.gitignore index 2131639..f06b466 100644 --- a/modules-template/.gitignore +++ b/modules-template/.gitignore @@ -1,2 +1,7 @@ # ignore maven build folder target/ + +# pom-derived eclipse jdt files +.project +.classpath +org.eclipse.*.prefs diff --git a/modules-template/core/src/main/java/core/Calc.java b/modules-template/core/src/main/java/core/Calc.java index f50679d..9b0f4c9 100644 --- a/modules-template/core/src/main/java/core/Calc.java +++ b/modules-template/core/src/main/java/core/Calc.java @@ -37,7 +37,7 @@ public class Calc { * @throws IllegalArgumentException if n is larger than the operand count */ public double peekOperand(int n) { - if (n > getOperandCount()) { + if (n >= getOperandCount()) { throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount()); } return operandStack.get(getOperandCount() - n - 1); diff --git a/modules-template/core/src/test/java/core/CalcTest.java b/modules-template/core/src/test/java/core/CalcTest.java index 0207cd5..11df469 100644 --- a/modules-template/core/src/test/java/core/CalcTest.java +++ b/modules-template/core/src/test/java/core/CalcTest.java @@ -86,10 +86,11 @@ public class CalcTest { @Test public void testSwap() { Calc calc = new Calc(1.0, 3.14); - calc.swap(); checkCalc(calc, 3.14, 1.0); calc.swap(); checkCalc(calc, 1.0, 3.14); + calc.swap(); + checkCalc(calc, 3.14, 1.0); } @Test diff --git a/modules-template/src/main/java/core/Calc.java b/modules-template/src/main/java/core/Calc.java deleted file mode 100644 index f50679d..0000000 --- a/modules-template/src/main/java/core/Calc.java +++ /dev/null @@ -1,108 +0,0 @@ -package core; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.BinaryOperator; -import java.util.function.UnaryOperator; - -public class Calc { - - private final List operandStack; - - public Calc(double... operands) { - operandStack = new ArrayList<>(operands.length + 2); - for (var d : operands) { - operandStack.add(d); - } - } - - /** - * @return the number of operands on the stack - */ - public int getOperandCount() { - return operandStack.size(); - } - - /** - * Pushes a new operand onto top of the stack. - * @param d the new operand - */ - public void pushOperand(double d) { - operandStack.add(d); - } - - /** - * @param n the place (from the top) to peek - * @return the n'th operand from the top - * @throws IllegalArgumentException if n is larger than the operand count - */ - public double peekOperand(int n) { - if (n > getOperandCount()) { - throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount()); - } - return operandStack.get(getOperandCount() - n - 1); - } - - /** - * @return the top operand - */ - public double peekOperand() { - return peekOperand(0); - } - - /** - * Removes and returns the top operand. - * @return the top operand - * @throws IllegalStateException if the stack is empty - */ - public double popOperand() { - if (getOperandCount() == 0) { - throw new IllegalStateException("Cannot pop from an empty stack"); - } - return operandStack.remove(operandStack.size() - 1); - } - - /** - * Performs the provided operation in the top operand, and - * replaces it with the result. - * @param op the operation to perform - * @return the result of performing the operation - * @throws IllegalStateException if the operand stack is empty - */ - public double performOperation(UnaryOperator op) throws IllegalStateException { - // TODO - return 0.0; - } - - /** - * Performs the provided operation in the two topmost operands, and - * replaces them with the result. - * @param op the operation to perform - * @return the result of performing the operation - * @throws IllegalStateException if the operand count is less than two - */ - public double performOperation(BinaryOperator op) throws IllegalStateException { - if (getOperandCount() < 2) { - throw new IllegalStateException("Too few operands (" + getOperandCount() + ") on the stack"); - } - var op1 = popOperand(); - var op2 = popOperand(); - var result = op.apply(op1, op2); - pushOperand(result); - return result; - } - - /** - * Swaps the two topmost operands. - */ - public void swap() { - // TODO - } - - /** - * Duplicates the top operand. - */ - public void dup() { - // TODO - } -} \ No newline at end of file diff --git a/modules-template/src/test/java/core/CalcTest.java b/modules-template/src/test/java/core/CalcTest.java deleted file mode 100644 index dc95b0d..0000000 --- a/modules-template/src/test/java/core/CalcTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package core; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class CalcTest { - - private static void checkCalc(Calc calc, double... operands) { - Assertions.assertEquals(operands.length, calc.getOperandCount(), "Wrong operand count"); - for (int i = 0; i < operands.length; i++) { - Assertions.assertEquals(operands[i], calc.peekOperand(i), "Wrong value at #" + i + " of operand stack"); - } - } - - @Test - public void testCalc() { - checkCalc(new Calc()); - checkCalc(new Calc(1.0), 1.0); - checkCalc(new Calc(3.14, 1.0), 1.0, 3.14); - } - - @Test - public void testPushOperand() { - Calc calc = new Calc(); - calc.pushOperand(1.0); - checkCalc(calc, 1.0); - calc.pushOperand(3.14); - checkCalc(calc, 3.14, 1.0); - } - - @Test - public void testPopOperand() { - Calc calc = new Calc(1.0, 3.14); - Assertions.assertEquals(3.14, calc.popOperand()); - checkCalc(calc, 1.0); - Assertions.assertEquals(1.0, calc.popOperand()); - checkCalc(calc); - } -} diff --git a/packages-template/.gitignore b/packages-template/.gitignore index 2131639..f06b466 100644 --- a/packages-template/.gitignore +++ b/packages-template/.gitignore @@ -1,2 +1,7 @@ # ignore maven build folder target/ + +# pom-derived eclipse jdt files +.project +.classpath +org.eclipse.*.prefs diff --git a/packages-template/src/main/java/core/Calc.java b/packages-template/src/main/java/core/Calc.java index f50679d..9b0f4c9 100644 --- a/packages-template/src/main/java/core/Calc.java +++ b/packages-template/src/main/java/core/Calc.java @@ -37,7 +37,7 @@ public class Calc { * @throws IllegalArgumentException if n is larger than the operand count */ public double peekOperand(int n) { - if (n > getOperandCount()) { + if (n >= getOperandCount()) { throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount()); } return operandStack.get(getOperandCount() - n - 1); diff --git a/packages-template/src/test/java/core/CalcTest.java b/packages-template/src/test/java/core/CalcTest.java index 0207cd5..11df469 100644 --- a/packages-template/src/test/java/core/CalcTest.java +++ b/packages-template/src/test/java/core/CalcTest.java @@ -86,10 +86,11 @@ public class CalcTest { @Test public void testSwap() { Calc calc = new Calc(1.0, 3.14); - calc.swap(); checkCalc(calc, 3.14, 1.0); calc.swap(); checkCalc(calc, 1.0, 3.14); + calc.swap(); + checkCalc(calc, 3.14, 1.0); } @Test