assertEquals("Argument 1 supplied should be correct",lisp.NIL,outp3.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.NIL,outp3.get(d_sym));
}
public void testOptionalArgumentsWithSuppliedAndRest() {
final LispValue arg1 = lisp.makeInteger(17);
final LispValue arg2 = lisp.makeString("Ojsan sa");
final LispValue argList1 = lisp.makeList(arg1,arg2);
final LispValue argList2 = lisp.makeList(arg1);
final LispValue argList3 = lisp.NIL;
final Map outp1 = list4.parse(argList1);
final Map outp2 = list4.parse(argList2);
final Map outp3 = list4.parse(argList3);
assertEquals("Argument 1 should be correct",arg1,outp1.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp1.get(c_sym));
assertEquals("Argument 1 supplied should be correct",lisp.T,outp1.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.T,outp1.get(d_sym));
assertEquals("Rest argument should be correct",lisp.NIL,outp1.get(x_sym));
assertEquals("Argument 1 should be correct",arg1,outp2.get(a_sym));
assertEquals("Argument 2 should be correct",list4_c_default,outp2.get(c_sym));
assertEquals("Argument 1 supplied should be correct",lisp.T,outp2.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.NIL,outp2.get(d_sym));
assertEquals("Rest argument should be correct",lisp.NIL,outp2.get(x_sym));
assertEquals("Argument 1 should be correct",list4_a_default,outp3.get(a_sym));
assertEquals("Argument 2 should be correct",list4_c_default,outp3.get(c_sym));
assertEquals("Argument 1 supplied should be correct",lisp.NIL,outp3.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.NIL,outp3.get(d_sym));
assertEquals("Rest argument should be correct",lisp.NIL,outp3.get(x_sym));
final LispValue argList4 = lisp.makeList(arg1,arg2,arg1);
final LispValue argList5 = lisp.makeList(arg1,arg2,arg1,arg2);
final LispValue argList6 = lisp.makeList(arg1,arg2,arg1).append(lisp.makeList(arg2,arg1));
final LispValue expected4 = lisp.makeList(arg1);
final LispValue expected5 = lisp.makeList(arg1,arg2);
final LispValue expected6 = lisp.makeList(arg1,arg2,arg1);
final Map outp4 = list4.parse(argList4);
final Map outp5 = list4.parse(argList5);
final Map outp6 = list4.parse(argList6);
assertEquals("Argument 1 should be correct",arg1,outp4.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp4.get(c_sym));
assertEquals("Argument 1 supplied should be correct",lisp.T,outp4.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.T,outp4.get(d_sym));
assertTrue("Rest argument should be correct",expected4.equal((LispValue)outp4.get(x_sym)) == lisp.T);
assertEquals("Argument 1 should be correct",arg1,outp5.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp5.get(c_sym));
assertEquals("Argument 1 supplied should be correct",lisp.T,outp5.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.T,outp5.get(d_sym));
assertTrue("Rest argument should be correct",expected5.equal((LispValue)outp5.get(x_sym)) == lisp.T);
assertEquals("Argument 1 should be correct",arg1,outp6.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp6.get(c_sym));
assertEquals("Argument 1 supplied should be correct",lisp.T,outp6.get(b_sym));
assertEquals("Argument 2 supplied should be correct",lisp.T,outp6.get(d_sym));
assertTrue("Rest argument should be correct",expected6.equal((LispValue)outp6.get(x_sym)) == lisp.T);
}