package function.builtin.math; import static testutil.TestUtilities.assertIsErrorWithMessage; import static testutil.TestUtilities.assertSExpressionsMatch; import static testutil.TestUtilities.evaluateString; import static testutil.TestUtilities.parseString; import org.junit.Test; import function.ArgumentValidator.BadArgumentTypeException; import function.ArgumentValidator.TooFewArgumentsException; import function.builtin.math.DIVIDE.DivideByZeroException; import testutil.SymbolAndFunctionCleaner; public class DIVIDETest extends SymbolAndFunctionCleaner { @Test public void divideWithOne() { String input = "(/ 1)"; assertSExpressionsMatch(parseString("1"), evaluateString(input)); } @Test public void divideWithTwo() { String input = "(/ 2)"; assertSExpressionsMatch(parseString("0"), evaluateString(input)); } @Test public void divideTwoNumbers() { String input = "(/ 24 3)"; assertSExpressionsMatch(parseString("8"), evaluateString(input)); } @Test public void divideSeveralNumbers() { String input = "(/ 256 2 2 8)"; assertSExpressionsMatch(parseString("8"), evaluateString(input)); } @Test public void divideTwoNumbersWithRemainder() { String input = "(/ 9 2)"; assertSExpressionsMatch(parseString("4"), evaluateString(input)); } @Test public void divideSeveralNumbersWithRemainder() { String input = "(/ 19 2 5)"; assertSExpressionsMatch(parseString("1"), evaluateString(input)); } @Test(expected = BadArgumentTypeException.class) public void divideWithNonNumber() { evaluateString("(/ 'x)"); } @Test(expected = TooFewArgumentsException.class) public void divideWithTooFewArguments() { evaluateString("(/)"); } @Test(expected = DivideByZeroException.class) public void divideByZero() { evaluateString("(/ 2 0)"); } @Test public void divideByZeroException_HasCorrectAttributes() { assertIsErrorWithMessage(new DivideByZeroException()); } }