Fikset feil i kode og test
This commit is contained in:
parent
84bd1ee37f
commit
6de15986b3
|
@ -1,2 +1,7 @@
|
||||||
# ignore maven build folder
|
# ignore maven build folder
|
||||||
target/
|
target/
|
||||||
|
|
||||||
|
# pom-derived eclipse jdt files
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
org.eclipse.*.prefs
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class Calc {
|
||||||
* @throws IllegalArgumentException if n is larger than the operand count
|
* @throws IllegalArgumentException if n is larger than the operand count
|
||||||
*/
|
*/
|
||||||
public double peekOperand(int n) {
|
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());
|
throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount());
|
||||||
}
|
}
|
||||||
return operandStack.get(getOperandCount() - n - 1);
|
return operandStack.get(getOperandCount() - n - 1);
|
||||||
|
@ -102,7 +102,7 @@ public class Calc {
|
||||||
* @throws IllegalStateException if the operand count is less than two
|
* @throws IllegalStateException if the operand count is less than two
|
||||||
*/
|
*/
|
||||||
public void swap() {
|
public void swap() {
|
||||||
// TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -86,10 +86,11 @@ public class CalcTest {
|
||||||
@Test
|
@Test
|
||||||
public void testSwap() {
|
public void testSwap() {
|
||||||
Calc calc = new Calc(1.0, 3.14);
|
Calc calc = new Calc(1.0, 3.14);
|
||||||
calc.swap();
|
|
||||||
checkCalc(calc, 3.14, 1.0);
|
checkCalc(calc, 3.14, 1.0);
|
||||||
calc.swap();
|
calc.swap();
|
||||||
checkCalc(calc, 1.0, 3.14);
|
checkCalc(calc, 1.0, 3.14);
|
||||||
|
calc.swap();
|
||||||
|
checkCalc(calc, 3.14, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -1,2 +1,7 @@
|
||||||
# ignore maven build folder
|
# ignore maven build folder
|
||||||
target/
|
target/
|
||||||
|
|
||||||
|
# pom-derived eclipse jdt files
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
org.eclipse.*.prefs
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class Calc {
|
||||||
* @throws IllegalArgumentException if n is larger than the operand count
|
* @throws IllegalArgumentException if n is larger than the operand count
|
||||||
*/
|
*/
|
||||||
public double peekOperand(int n) {
|
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());
|
throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount());
|
||||||
}
|
}
|
||||||
return operandStack.get(getOperandCount() - n - 1);
|
return operandStack.get(getOperandCount() - n - 1);
|
||||||
|
|
|
@ -86,10 +86,11 @@ public class CalcTest {
|
||||||
@Test
|
@Test
|
||||||
public void testSwap() {
|
public void testSwap() {
|
||||||
Calc calc = new Calc(1.0, 3.14);
|
Calc calc = new Calc(1.0, 3.14);
|
||||||
calc.swap();
|
|
||||||
checkCalc(calc, 3.14, 1.0);
|
checkCalc(calc, 3.14, 1.0);
|
||||||
calc.swap();
|
calc.swap();
|
||||||
checkCalc(calc, 1.0, 3.14);
|
checkCalc(calc, 1.0, 3.14);
|
||||||
|
calc.swap();
|
||||||
|
checkCalc(calc, 3.14, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -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<Double> 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<Double> 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<Double> 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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,2 +1,7 @@
|
||||||
# ignore maven build folder
|
# ignore maven build folder
|
||||||
target/
|
target/
|
||||||
|
|
||||||
|
# pom-derived eclipse jdt files
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
org.eclipse.*.prefs
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class Calc {
|
||||||
* @throws IllegalArgumentException if n is larger than the operand count
|
* @throws IllegalArgumentException if n is larger than the operand count
|
||||||
*/
|
*/
|
||||||
public double peekOperand(int n) {
|
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());
|
throw new IllegalArgumentException("Cannot peek at position " + n + " when the operand count is " + getOperandCount());
|
||||||
}
|
}
|
||||||
return operandStack.get(getOperandCount() - n - 1);
|
return operandStack.get(getOperandCount() - n - 1);
|
||||||
|
|
|
@ -86,10 +86,11 @@ public class CalcTest {
|
||||||
@Test
|
@Test
|
||||||
public void testSwap() {
|
public void testSwap() {
|
||||||
Calc calc = new Calc(1.0, 3.14);
|
Calc calc = new Calc(1.0, 3.14);
|
||||||
calc.swap();
|
|
||||||
checkCalc(calc, 3.14, 1.0);
|
checkCalc(calc, 3.14, 1.0);
|
||||||
calc.swap();
|
calc.swap();
|
||||||
checkCalc(calc, 1.0, 3.14);
|
checkCalc(calc, 1.0, 3.14);
|
||||||
|
calc.swap();
|
||||||
|
checkCalc(calc, 3.14, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue