83 lines
2.2 KiB
Java
83 lines
2.2 KiB
Java
package function.builtin.special;
|
|
|
|
import static testutil.TestUtilities.*;
|
|
|
|
import org.junit.Test;
|
|
|
|
import function.ArgumentValidator.*;
|
|
|
|
public class CONDTester {
|
|
|
|
@Test
|
|
public void testCondWithNoArguments() {
|
|
String input = "(cond)";
|
|
|
|
assertSExpressionsMatch(parseString("nil"), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithTrue() {
|
|
String input = "(cond (T))";
|
|
|
|
assertSExpressionsMatch(parseString("T"), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithSingleExpression() {
|
|
String input = "(cond (T \"true\"))";
|
|
|
|
assertSExpressionsMatch(parseString("\"true\""), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithMultipleExpressions() {
|
|
String input = "(cond ((= 1 2) 2) ((= 1 2) 2) ((= 1 1) 3))";
|
|
|
|
assertSExpressionsMatch(parseString("3"), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithMultipleConditionsMatching_ReturnFirstOne() {
|
|
String input = "(cond ((= 1 1) 2) ((= 1 1) 3))";
|
|
|
|
assertSExpressionsMatch(parseString("2"), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithMultipleConditionsMatching_OnlyEvaluatesFirstOne() {
|
|
String input = "(cond ((= 1 1) 2) ((= 1 1) x))";
|
|
|
|
assertSExpressionsMatch(parseString("2"), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithMultipleResultValues_OnlyReturnsLast() {
|
|
String input = "(cond ((= 1 1) 2 3 4))";
|
|
|
|
assertSExpressionsMatch(parseString("4"), evaluateString(input));
|
|
}
|
|
|
|
@Test
|
|
public void testCondWithNoConditionMatching_ReturnsNil() {
|
|
String input = "(cond ((= 1 2) T) ((= 1 3) T))";
|
|
|
|
assertSExpressionsMatch(parseString("nil"), evaluateString(input));
|
|
}
|
|
|
|
@Test(expected = BadArgumentTypeException.class)
|
|
public void testCondWithNilArgument_ThrowsException() {
|
|
evaluateString("(cond ())");
|
|
}
|
|
|
|
@Test(expected = BadArgumentTypeException.class)
|
|
public void testCondWithNonListArgument_ThrowsException() {
|
|
evaluateString("(cond o)");
|
|
}
|
|
|
|
@Test(expected = DottedArgumentListException.class)
|
|
public void testCondWithDottedArgumentList_ThrowsException() {
|
|
evaluateString("(apply 'cond (cons '(nil T) 'b))");
|
|
}
|
|
|
|
}
|