// (17 'z :c "ojsan sa")
// (17 'z :c "ojsan sa" :d 42)
// (17 'z :d 42 :c "ojsan sa")
// (17 'z :d 42 :c "ojsan sa" :testing t)
final LispValue arg1 = lisp.makeInteger(17);
final LispValue arg2 = lisp.EVAL.intern("z");
final LispValue arg3 = lisp.makeString("ojsan sa");
final LispValue arg4 = lisp.makeInteger(42);
final LispValue testing_key = lisp.EVAL.intern(":TESTING");
final LispValue argList1 = lisp.makeList(arg1);
final LispValue argList2 = lisp.makeList(arg1,arg2);
final LispValue argList3 = lisp.makeList(arg1,arg2,c_key,arg3);
final LispValue argList4 = lisp.makeList(arg1,arg2,c_key,arg3).append(lisp.makeList(d_key,arg4));
final LispValue argList5 = lisp.makeList(arg1,arg2,d_key,arg4).append(lisp.makeList(c_key,arg3));
final LispValue argList6 = lisp.makeList(arg1,arg2,d_key,arg4).append(lisp.makeList(c_key,arg3,testing_key,lisp.T));
final Map outp1 = list7.parse(argList1);
final Map outp2 = list7.parse(argList2);
final Map outp3 = list7.parse(argList3);
final Map outp4 = list7.parse(argList4);
final Map outp5 = list7.parse(argList5);
final Map outp6 = list7.parse(argList6);
final LispValue expected3 = lisp.makeList(c_key,arg3);
final LispValue expected4 = lisp.makeList(c_key,arg3,d_key,arg4);
final LispValue expected5 = lisp.makeList(d_key,arg4,c_key,arg3);
final LispValue expected6 = lisp.makeList(d_key,arg4,c_key,arg3).append(lisp.makeList(testing_key,lisp.T));
assertEquals("Argument 1 should be correct",arg1,outp1.get(a_sym));
assertEquals("Argument 2 should be correct",list7_b_default,outp1.get(b_sym));
assertEquals("Argument x should be correct",lisp.NIL,outp1.get(x_sym));
assertEquals("Argument c should be correct",lisp.NIL,outp1.get(c_sym));
assertEquals("Argument d should be correct",arg1,outp1.get(d_sym));
assertEquals("Argument 1 should be correct",arg1,outp2.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp2.get(b_sym));
assertEquals("Argument x should be correct",lisp.NIL,outp2.get(x_sym));
assertEquals("Argument c should be correct",lisp.NIL,outp2.get(c_sym));
assertEquals("Argument d should be correct",arg1,outp2.get(d_sym));
assertEquals("Argument 1 should be correct",arg1,outp3.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp3.get(b_sym));
assertTrue("Argument x should be correct",expected3.equal((LispValue)outp3.get(x_sym)) == lisp.T);
assertEquals("Argument c should be correct",arg3,outp3.get(c_sym));
assertEquals("Argument d should be correct",arg1,outp3.get(d_sym));
assertEquals("Argument 1 should be correct",arg1,outp4.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp4.get(b_sym));
assertTrue("Argument x should be correct",expected4.equal((LispValue)outp4.get(x_sym)) == lisp.T);
assertEquals("Argument c should be correct",arg3,outp4.get(c_sym));
assertEquals("Argument d should be correct",arg4,outp4.get(d_sym));
assertEquals("Argument 1 should be correct",arg1,outp5.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp5.get(b_sym));
assertTrue("Argument x should be correct",expected5.equal((LispValue)outp5.get(x_sym)) == lisp.T);
assertEquals("Argument c should be correct",arg3,outp5.get(c_sym));
assertEquals("Argument d should be correct",arg4,outp5.get(d_sym));
assertEquals("Argument 1 should be correct",arg1,outp6.get(a_sym));
assertEquals("Argument 2 should be correct",arg2,outp6.get(b_sym));
assertTrue("Argument x should be correct",expected6.equal((LispValue)outp6.get(x_sym)) == lisp.T);
assertEquals("Argument c should be correct",arg3,outp6.get(c_sym));
assertEquals("Argument d should be correct",arg4,outp6.get(d_sym));
}