package function.builtin.math; import static testutil.TestUtilities.assertSExpressionsMatch; import static testutil.TestUtilities.evaluateString; import org.junit.Test; import function.ArgumentValidator.BadArgumentTypeException; import function.ArgumentValidator.TooFewArgumentsException; import sexpression.LispNumber; import testutil.SymbolAndFunctionCleaner; 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("(-)"); } }