transcendental-lisp/src/test/kotlin/function/builtin/math/MinusTest.java

52 lines
1.4 KiB
Java

package function.builtin.math;
import function.ArgumentValidator.BadArgumentTypeException;
import function.ArgumentValidator.TooFewArgumentsException;
import org.junit.Test;
import sexpression.LispNumber;
import testutil.SymbolAndFunctionCleaner;
import static testutil.TestUtilities.assertSExpressionsMatch;
import static testutil.TestUtilities.evaluateString;
public class MinusTest extends SymbolAndFunctionCleaner {
@Test
public void minusWithOneNumber() {
String input = "(- 27)";
assertSExpressionsMatch(new LispNumber("-27"), evaluateString(input));
}
@Test
public void minusWithTwoNumbers() {
String input = "(- 5 3)";
assertSExpressionsMatch(new LispNumber("2"), evaluateString(input));
}
@Test
public void minusWithManyNumbers_PositiveResult() {
String input = "(- 200 100 10 5)";
assertSExpressionsMatch(new LispNumber("85"), evaluateString(input));
}
@Test
public void minusWithManyNumbers_NegativeResult() {
String input = "(- 100 200 20 5)";
assertSExpressionsMatch(new LispNumber("-125"), evaluateString(input));
}
@Test(expected = BadArgumentTypeException.class)
public void minusWithNonNumber() {
evaluateString("(- 'a 'b)");
}
@Test(expected = TooFewArgumentsException.class)
public void minusWithTooFewArguments() {
evaluateString("(-)");
}
}