1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204 |
- %%%%%%%%%%%% Standard - LISP Verification file. %%%%%%%%%%%%%%%%%%%%%%%
- %
- % Copyright (C) M. Griss and J. Marti, February 1981
- % Adapted to test PSL by M. L. Griss and E. Benson
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Set ECHO In caller, as desired
- (SETQ !*RAISE NIL) % Checks in ID tests
- (SETQ !*BREAK NIL) % So error messages proceed
- (DE MSG(X) % Prints general message
- (COND (!*ECHO NIL)
- (T (PROGN (PRIN2T X) NIL))))
- (DE EXPECT(X) % Prints message about values
- (COND (!*ECHO NIL)
- (T (PROGN (PRIN2 " ----- Expect the following to Return: ")
- (PRIN2T X) NIL))))
- (EXPECT "T T T T")
- T
- (NULL NIL)
- (COND (T T))
- (COND (NIL NIL) (T T))
- (EXPECT "NIL NIL NIL NIL")
- NIL
- (NULL T)
- (COND (T NIL))
- (COND (NIL T)
- (T NIL))
- (EXPECT "0 0")
- 0 (QUOTE 0)
- (MSG "Test the following minimum set of functions:")
- (MSG "PUTD, PROG, SET, QUOTE, COND, NULL, RETURN, LIST, CAR, CDR,")
- (MSG "EVAL, PRINT, PRIN1, TERPRI, PROGN, GO.")
- (MSG "Check PUTD, GETD, LAMBDA ")
- (PUTD (QUOTE FOO) (QUOTE EXPR) (QUOTE (LAMBDA (X) 3)))
- (EXPECT "(EXPR LAMBDA (X) 3)")
- (GETD (QUOTE FOO))
- (EXPECT "3 3")
- (FOO 1)
- (FOO 2)
- (EXPECT "1 1")
- (SET (QUOTE A) 1)
- A
- (EXPECT "2 2")
- (SET (QUOTE B) 2)
- B
- (MSG "test LIST, CAR, CDR ")
- (EXPECT "(1 2 3 4) 1 and (2 3 4)" )
- (SET (QUOTE A) (LIST 1 2 3 4))
- (CAR A)
- (CDR A)
- (MSG "Test REDEFINITION in PUTD, PROGN, PRIN1, TERPRI")
- (PUTD (QUOTE FOO) (QUOTE EXPR)
- (QUOTE (LAMBDA (X) (PROGN (PRIN1 X) (TERPRI)))))
- (EXPECT "1 2 NIL")
- (FOO 1)
- (FOO 2)
- (EXPECT "Test simple PROG, GO, RETURN: expect 1 2 NIL 1")
- (PROG NIL (PRINT 1) (PRINT 2))
- (PROG (A) (PRINT A) (PRINT 1))
- (MSG "Now test GO, RETURN, PROG binding")
- (SET 'A 'AA) (SET 'B 'BB)
- (PROG (A B) (PRINT "test binding of A, B expect NIL")
- (PRIN1 A) (PRINT B)
- (PRINT "Reset to 1,2")
- (SET 'A 1) (SET 'B 2)
- (PRIN1 A) (PRINT B)
- (PRINT "test forward GO")
- (GO LL)
- (PRINT "forward GO failed")
- LL (PRINT "Forward GO ok")
- (GO L2)
- L1 (PRINT " Should be after BACKWARD go ")
- (PRINT " now return 3")
- (RETURN 3)
- L2 (PRINT "Test backward GO")
- (GO L1) )
- (MSG "Test that A,B correctly rebound, expect AA and BB")
- A B
- (MSG "Redefine FOO as simple FEXPR")
- (PUTD (QUOTE FOO) (QUOTE FEXPR) (QUOTE (LAMBDA (X) (PRINT X))))
- (EXPECT "(FEXPR LAMBDA (X) (PRINT X))")
- (GETD (QUOTE FOO))
- (EXPECT "FOO calls to return (1) (1 2) and (1 2 3)")
- (FOO 1)
- (FOO 1 2)
- (FOO 1 2 3)
- (MSG "Finally, TEST EVAL inside an FEXPR")
- (PUTD (QUOTE FOO) (QUOTE FEXPR)
- (QUOTE (LAMBDA (XX) (PRINT (EVAL (CAR XX))))))
- (EXPECT "1 T")
- (FOO 1)
- (FOO (NULL NIL))
- %---- The main tester -----
- % PUTD is being used here to define a function !$TEST.
- (PUTD (QUOTE !$TEST) (QUOTE FEXPR) (QUOTE
- (LAMBDA (!$X)
- (PROG (A B)
- (SETQ A (CDR !$X))
- % Space for test set
- (TERPRI)
- (PRIN2 "------ Beginning ") (PRIN1 (CAR !$X)) (PRIN2T " tests -----")
-
- LOOP (COND ((NULL (PAIRP A)) (RETURN
- (PROGN
- (PRIN2 "------ Finished ")
- (PRIN1 (CAR !$X))
- (PRIN2T " tests -----")
- 0))))
- (PRIN2 " try: ") (PRINT (CAR A))
- (SETQ B (EVAL (CAR A)))
- (COND ( (NULL (EQ B 'T))
- (PROGN (PRIN2 "****** ") (PRINT A)
- (PRIN2 " -> ") (PRINT B))))
- (SETQ A (CDR A))
- (GO LOOP)
- ))))
- (EXPECT "T and T if $TEST correctly defined")
- (PAIRP (GETD (QUOTE !$TEST)))
- (EQCAR (GETD (QUOTE !$TEST)) (QUOTE FEXPR))
- % Global, vector, function-pointer partial test.
- (!$TEST "GLOBAL,VECTOR" (NULL (GLOBAL (QUOTE (!$VECTOR !$CODE TEMP))))
- (GLOBALP (QUOTE !$VECTOR))
- (GLOBALP (QUOTE !$CODE))
- (SET (QUOTE !$VECTOR) (MKVECT 4))
- (SET (QUOTE !$CODE) (CDR (GETD (QUOTE CDR)))) )
-
-
- (!$TEST LIST (EQUAL (LIST 1 (QUOTE A) "STRING" )
- (QUOTE (1 A "STRING"))))
- % -----3.1 Elementary Predicates-----%
- % This section tests the elementary predicates of section 3.1 of
- % the Standard LISP Report. In general they will test that the
- % predicate returns non-NIL for the correct case, and NIL for all
- % others.
-
- % CODEP should not return T for numbers as function
- % pointers must not be implemented in this way.
- (!$TEST CODEP (CODEP !$CODE) (NULL (CODEP 1))
- (NULL (CODEP T)) (NULL (CODEP NIL))
- (NULL (CODEP (QUOTE IDENTIFIER)))
- (NULL (CODEP "STRING")) (NULL (CODEP (QUOTE (A . B))))
- (NULL (CODEP (QUOTE (A B C))))
- (NULL (CODEP !$VECTOR)) )
-
- % PAIRP must not return T for vectors even if vectors are
- % implemented as lists.
- (!$TEST PAIRP
- (PAIRP (QUOTE (A . B))) (PAIRP (QUOTE (NIL)))
- (PAIRP (QUOTE (A B C))) (NULL (PAIRP 0))
- (NULL (PAIRP (QUOTE IDENTIFIER)))
- (NULL (PAIRP "STRING"))
- (NULL (PAIRP !$VECTOR)) )
-
- (!$TEST FIXP (FIXP 1)
- (NULL (FIXP (QUOTE IDENTIFIER)))
- (NULL (FIXP (QUOTE "STRING")))
- (NULL (FIXP (QUOTE (A . B))))
- (NULL (FIXP (QUOTE (A B C))))
- (NULL (FIXP !$VECTOR))
- (NULL (FIXP !$CODE)) )
-
- % T and NIL must test as identifiers as must specially
- % escaped character identifiers.
- (!$TEST IDP (IDP (QUOTE IDENTIFIER))
- (IDP NIL) (IDP T)
- (IDP (QUOTE !1)) (IDP (QUOTE !A)) (IDP (QUOTE !!))
- (IDP (QUOTE !()) (IDP (QUOTE !))) (IDP (QUOTE !.))
- (IDP (QUOTE !')) (IDP (QUOTE !*)) (IDP (QUOTE !/))
- (IDP (QUOTE !+)) (IDP (QUOTE !-)) (IDP (QUOTE !#))
- (IDP (QUOTE ! )) (IDP (QUOTE !1!2!3)) (IDP (QUOTE !*!*!*))
- (IDP (QUOTE !"ID!"))
- (NULL (IDP 1))
- (NULL (IDP "STRING"))
- (NULL (IDP (QUOTE (A . B))))
- (NULL (IDP (QUOTE (A B C))))
- (NULL (IDP !$VECTOR))
- (NULL (IDP !$CODE)) )
-
- % STRINGP should answer T to strings only and not things
- % that might look like strings if the system implements them as
- % identifiers.
- (!$TEST STRINGP (STRINGP "STRING")
- (NULL (STRINGP (QUOTE (STRING NOTASTRING))))
- (NULL (STRINGP 1))
- (NULL (STRINGP (QUOTE A)))
- (NULL (STRINGP (QUOTE (A . B))))
- (NULL (STRINGP (QUOTE (A B C))))
- (NULL (STRINGP !$VECTOR))
- (NULL (STRINGP !$CODE)) )
-
- % VECTORP should not answer T to pairs if vectors are
- % implemented as pairs.
- (!$TEST VECTORP (VECTORP !$VECTOR)
- (NULL (VECTORP 1))
- (NULL (VECTORP (QUOTE A)))
- (NULL (VECTORP "STRING"))
- (NULL (VECTORP (QUOTE (A . B))))
- (NULL (VECTORP (QUOTE (A B C))))
- (NULL (VECTORP !$CODE)) )
-
- % Vectors are constants in Standard LISP. However T and NIL
- % are special global variables with the values T and NIL.
- (!$TEST CONSTANTP (CONSTANTP 1)
- (CONSTANTP "STRING")
- (CONSTANTP !$VECTOR)
- (CONSTANTP !$CODE)
- (NULL (CONSTANTP NIL))
- (NULL (CONSTANTP T))
- (NULL (CONSTANTP (QUOTE A)))
- (NULL (CONSTANTP (QUOTE (A . B))))
- (NULL (CONSTANTP (QUOTE (A B C)))) )
-
- % An ATOM is anything that is not a pair, thus vectors are
- % atoms.
- (!$TEST ATOM (ATOM T) (ATOM NIL) (ATOM 1) (ATOM 0)
- (ATOM "STRING") (ATOM (QUOTE IDENTIFIER))
- (ATOM !$VECTOR)
- (NULL (ATOM (QUOTE (A . B))))
- (NULL (ATOM (QUOTE (A B C)))) )
-
-
- (!$TEST EQ (EQ NIL NIL) (EQ T T)
- (EQ !$VECTOR !$VECTOR)
- (EQ !$CODE !$CODE)
- (EQ (QUOTE A) (QUOTE A))
- (NULL (EQ NIL T))
- (NULL (EQ NIL !$VECTOR))
- (NULL (EQ (QUOTE (A . B)) (QUOTE (A . B)))) )
-
- % Function pointers are not numbers, therefore the function
- % pointer $CODE is not EQN to the fixed number 0. Numbers must have
- % the same type to be EQN.
- (!$TEST EQN (EQN 1 1) (EQN 0 0)
- (EQN 1.0 1.0) (EQN 0.0 0.0)
- (NULL (EQN 1.0 0.0)) (NULL (EQN 0.0 1.0))
- (NULL (EQN 1 1.0)) (NULL (EQN 0 0.0))
- (NULL (EQN 1 0)) (NULL (EQN 0 1))
- (NULL (EQN 0 !$CODE))
- (NULL (EQN NIL 0))
- (EQN NIL NIL) (EQN T T) (EQN !$VECTOR !$VECTOR)
- (EQN !$CODE !$CODE) (EQN (QUOTE A) (QUOTE A))
- (NULL (EQN (QUOTE (A . B)) (QUOTE (A . B))))
- (NULL (EQN (QUOTE (A B C)) (QUOTE (A B C)))) )
-
- % EQUAL checks for general equality rather than specific, so
- % it must check all elements of general expressions and all elements
- % of vectors for equality. This test assumes that CAR does not have
- % the function pointer value EQUAL to 0. Further tests of EQUAL
- % are in the vector section 3.9.
- (!$TEST EQUAL (EQUAL NIL NIL)
- (EQUAL T T)
- (NULL (EQUAL NIL T))
- (EQUAL !$CODE !$CODE)
- (NULL (EQUAL !$CODE (CDR (GETD (QUOTE CAR)))))
- (EQUAL (QUOTE IDENTIFIER) (QUOTE IDENTIFIER))
- (NULL (EQUAL (QUOTE IDENTIFIER1) (QUOTE IDENTIFIER2)))
- (EQUAL "STRING" "STRING")
- (NULL (EQUAL "STRING1" "STRING2"))
- (EQUAL 0 0)
- (NULL (EQUAL 0 1))
- (EQUAL (QUOTE (A . B)) (QUOTE (A . B)))
- (NULL (EQUAL (QUOTE (A . B)) (QUOTE (A . C))))
- (NULL (EQUAL (QUOTE (A . B)) (QUOTE (C . B))))
- (EQUAL (QUOTE (A B)) (QUOTE (A B)))
- (NULL (EQUAL (QUOTE (A B)) (QUOTE (A C))))
- (NULL (EQUAL (QUOTE (A B)) (QUOTE (C B))))
- (EQUAL !$VECTOR !$VECTOR)
- (NULL (EQUAL 0 NIL))
- (NULL (EQUAL "T" T))
- (NULL (EQUAL "NIL" NIL)) )
-
- % -----3.2 Functions on Dotted-Pairs-----%
- % Test the C....R functions by simply verifying that they select
- % correct part of a structure.
- (!$TEST CAR (EQ (CAR (QUOTE (A . B))) (QUOTE A))
- (EQUAL (CAR (QUOTE ((A) . B))) (QUOTE (A))) )
-
- (!$TEST CDR (EQ (CDR (QUOTE (A . B))) (QUOTE B))
- (EQUAL (CDR (QUOTE (A B))) (QUOTE (B))) )
-
- (!$TEST CAAR (EQ (CAAR (QUOTE ((A)))) (QUOTE A)))
- (!$TEST CADR (EQ (CADR (QUOTE (A B))) (QUOTE B)))
- (!$TEST CDAR (EQ (CDAR (QUOTE ((A . B)))) (QUOTE B)))
- (!$TEST CDDR (EQ (CDDR (QUOTE (A . (B . C)))) (QUOTE C)))
-
- (!$TEST CAAAR (EQ (CAAAR (QUOTE (((A))))) (QUOTE A)))
- (!$TEST CAADR (EQ (CAADR (QUOTE (A (B)))) (QUOTE B)))
- (!$TEST CADAR (EQ (CADAR (QUOTE ((A B)))) (QUOTE B)))
- (!$TEST CADDR (EQ (CADDR (QUOTE (A B C))) (QUOTE C)))
- (!$TEST CDAAR (EQ (CDAAR (QUOTE (((A . B)) C))) (QUOTE B)))
- (!$TEST CDADR (EQ (CDADR (QUOTE (A (B . C)))) (QUOTE C)))
- (!$TEST CDDAR (EQ (CDDAR (QUOTE ((A . (B . C))))) (QUOTE C)))
- (!$TEST CDDDR (EQ (CDDDR (QUOTE (A . (B . (C . D))))) (QUOTE D)))
-
- (!$TEST CAAAAR (EQ (CAAAAR (QUOTE ((((A)))))) (QUOTE A)))
- (!$TEST CAAADR (EQ (CAAADR (QUOTE (A ((B))))) (QUOTE B)))
- (!$TEST CAADAR (EQ (CAADAR (QUOTE ((A (B))))) (QUOTE B)))
- (!$TEST CAADDR (EQ (CAADDR (QUOTE (A . (B (C))))) (QUOTE C)))
- (!$TEST CADAAR (EQ (CADAAR (QUOTE (((A . (B)))))) (QUOTE B)))
- (!$TEST CADADR (EQ (CADADR (QUOTE (A (B . (C))))) (QUOTE C)))
- (!$TEST CADDAR (EQ (CADDAR (QUOTE ((A . (B . (C)))))) (QUOTE C)))
- (!$TEST CADDDR (EQ (CADDDR (QUOTE (A . (B . (C . (D)))))) (QUOTE D)))
- (!$TEST CDAAAR (EQ (CDAAAR (QUOTE ((((A . B)))))) (QUOTE B)))
- (!$TEST CDAADR (EQ (CDAADR (QUOTE (A ((B . C))))) (QUOTE C)))
- (!$TEST CDADAR (EQ (CDADAR (QUOTE ((A (B . C))))) (QUOTE C)))
- (!$TEST CDADDR (EQ (CDADDR (QUOTE (A . (B . ((C . D)))))) (QUOTE D)))
- (!$TEST CDDAAR (EQ (CDDAAR (QUOTE (((A . (B . C)))))) (QUOTE C)))
- (!$TEST CDDADR (EQ (CDDADR (QUOTE (A . ((B . (C . D)))))) (QUOTE D)))
- (!$TEST CDDDAR (EQ (CDDDAR (QUOTE ((A . (B . (C . D)))))) (QUOTE D)))
- (!$TEST CDDDDR (EQ (CDDDDR (QUOTE (A . (B . (C . (D . E)))))) (QUOTE E)))
-
- % CONS should return a unique cell when invoked. Also test that
- % the left and right parts are set correctly.
- (!$TEST CONS (NULL (EQ (CONS (QUOTE A) (QUOTE B)) (QUOTE (A . B))))
- (EQ (CAR (CONS (QUOTE A) (QUOTE B))) (QUOTE A))
- (EQ (CDR (CONS (QUOTE A) (QUOTE B))) (QUOTE B)) )
-
- % Veryify that RPLACA doesn't modify the binding of a list, and
- % that only the CAR part of the cell is affected.
- (!$TEST RPLACA
- (SET (QUOTE TEMP) (QUOTE (A)))
- (EQ (RPLACA TEMP 1) TEMP)
- (EQ (CAR (RPLACA TEMP (QUOTE B))) (QUOTE B))
- (EQ (CDR TEMP) NIL) )
-
- (!$TEST RPLACD
- (SET (QUOTE TEMP) (QUOTE (A . B)))
- (EQ (RPLACD TEMP (QUOTE A)) TEMP)
- (EQ (CDR (RPLACD TEMP (QUOTE C))) (QUOTE C))
- (EQ (CAR TEMP) (QUOTE A)) )
-
- % -----3.3 Identifiers-----%
- % Verify that COMPRESS handles the various types of lexemes
- % correctly.
- (!$TEST COMPRESS
- (NULL (EQ (COMPRESS (QUOTE (A B))) (COMPRESS (QUOTE (A B)))))
- (EQN (COMPRESS (QUOTE (!1 !2))) 12)
- (EQN (COMPRESS (QUOTE (!+ !1 !2))) 12)
- (EQN (COMPRESS (QUOTE (!- !1 !2))) -12)
- (EQUAL (COMPRESS (QUOTE (!" S T R I N G !"))) "STRING")
- (EQ (INTERN (COMPRESS (QUOTE (A B)))) (QUOTE AB))
- (EQ (INTERN (COMPRESS (QUOTE (!! !$ A)))) (QUOTE !$A)) )
-
- % Verify that EXPLODE returns the expected lists and that COMPRESS
- % and explode are inverses of each other.
- (!$TEST EXPLODE
- (EQUAL (EXPLODE 12) (QUOTE (!1 !2)))
- (EQUAL (EXPLODE -12) (QUOTE (!- !1 !2)))
- (EQUAL (EXPLODE "STRING") (QUOTE (!" S T R I N G !")))
- (EQUAL (EXPLODE (QUOTE AB)) (QUOTE (A B)) )
- (EQUAL (EXPLODE (QUOTE !$AB)) (QUOTE (!! !$ A B)))
- (EQUAL (COMPRESS (EXPLODE 12)) 12)
- (EQUAL (COMPRESS (EXPLODE -12)) -12)
- (EQUAL (COMPRESS (EXPLODE "STRING")) "STRING")
- (EQ (INTERN (COMPRESS (EXPLODE (QUOTE AB)))) (QUOTE AB))
- (EQ (INTERN (COMPRESS (EXPLODE (QUOTE !$AB)))) (QUOTE !$AB)) )
-
- % Test that GENSYM returns identifiers and that they are different.
- (!$TEST GENSYM
- (IDP (GENSYM))
- (NULL (EQ (GENSYM) (GENSYM))) )
-
- % Test that INTERN works on strings to produce identifiers the same
- % as those read in. Try ID's with special characters in them (more
- % will be tested with READ).
- (!$TEST INTERN
- (EQ (INTERN "A") (QUOTE A))
- (EQ (INTERN "A12") (QUOTE A12))
- (EQ (INTERN "A*") (QUOTE A!*))
- (NULL (EQ (INTERN "A") (INTERN "B"))) )
-
- % Just test that REMOB returns the ID removed.
- (!$TEST REMOB
- (EQ (REMOB (QUOTE AAAA)) (QUOTE AAAA)) )
-
- % ----- 3.4 Property List Functions-----%
- % Test that FLAG always returns NIL. More testing is done in FLAGP.
- (!$TEST FLAG
- (NULL (FLAG NIL (QUOTE W)))
- (NULL (FLAG (QUOTE (U V T NIL)) (QUOTE X)))
- (NULL (FLAG (QUOTE (U)) NIL)) )
-
- % Test that FLAG worked only on a list. Test all items in a flagged
- % list were flagged and that those that weren't aren't.
- (!$TEST FLAGP
- (NULL (FLAGP NIL (QUOTE W)))
- (FLAGP (QUOTE U) (QUOTE X))
- (FLAGP (QUOTE V) (QUOTE X))
- (FLAGP T (QUOTE X))
- (FLAGP NIL (QUOTE X))
- (FLAGP (QUOTE U) NIL) )
-
- % Test that REMFLAG always returns NIL and that flags removed are
- % gone. Test that unremoved flags are still present.
- (!$TEST REMFLAG
- (NULL (REMFLAG NIL (QUOTE X)))
- (NULL (REMFLAG (QUOTE (U T NIL)) (QUOTE X)))
- (NULL (FLAGP (QUOTE U) (QUOTE X)))
- (FLAGP (QUOTE V) (QUOTE X))
- (NULL (FLAGP T (QUOTE X)))
- (NULL (FLAGP NIL (QUOTE X))) )
-
- (!$TEST PUT
- (EQ (PUT (QUOTE U) (QUOTE IND1) (QUOTE PROP)) (QUOTE PROP))
- (EQN (PUT (QUOTE U) (QUOTE IND2) 0) 0)
- (EQ (PUT (QUOTE U) (QUOTE IND3) !$VECTOR) !$VECTOR)
- (EQ (PUT (QUOTE U) (QUOTE IND4) !$CODE) !$CODE) )
-
- (!$TEST GET
- (EQ (GET (QUOTE U) (QUOTE IND1)) (QUOTE PROP))
- (EQN (GET (QUOTE U) (QUOTE IND2)) 0)
- (EQ (GET (QUOTE U) (QUOTE IND3)) !$VECTOR)
- (EQ (GET (QUOTE U) (QUOTE IND4)) !$CODE) )
-
- (!$TEST REMPROP
- (NULL (REMPROP !$CODE !$CODE))
- (EQ (REMPROP (QUOTE U) (QUOTE IND1)) (QUOTE PROP))
- (NULL (GET (QUOTE U) (QUOTE IND1)))
- (EQN (REMPROP (QUOTE U) (QUOTE IND2)) (QUOTE 0))
- (NULL (GET (QUOTE U) (QUOTE IND2)))
- (EQ (REMPROP (QUOTE U) (QUOTE IND3)) !$VECTOR)
- (NULL (GET (QUOTE U) (QUOTE IND3)))
- (GET (QUOTE U) (QUOTE IND4))
- (EQ (REMPROP (QUOTE U) (QUOTE IND4)) !$CODE)
- (NULL (GET (QUOTE U) (QUOTE IND4))) )
-
-
- % -----3.5 Function Definition-----%
- (!$TEST DE
- (EQ (DE FIE (X) (PLUS2 X 1)) (QUOTE FIE))
- (GETD (QUOTE FIE))
- (EQN (FIE 1) 2)
- )
- % Expect (FIE 1) to return 2%
- (FIE 1)
- % Expect FIE redefined in DF test%
- (!$TEST DF
- (EQ (DF FIE (X) (PROGN (PRINT X) (CAR X))) (QUOTE FIE))
- (GETD (QUOTE FIE))
- (EQN (FIE 1) 1)
- (EQN (FIE 2 3) 2)
- )
- % Expect (FIE 1) to return 1, and print (1)%
- (FIE 1)
- % Expect (FIE 1 2) to return 1, and print (1 2)%
- (FIE 1 2)
- % Expect FIE redefined in DM%
- (!$TEST DM
- (EQ (DM FIE (X)
- (LIST (QUOTE LIST)
- (LIST (QUOTE QUOTE) X)
- (LIST (QUOTE QUOTE) X) ))
- (QUOTE FIE))
- (GETD (QUOTE FIE))
- (EQUAL (FIE 1) (QUOTE ((FIE 1) (FIE 1))))
- )
- % Expect (FIE 1) to return ((FIE 1) (FIE 1))%
- (FIE 1)
- (!$TEST GETD
- (PAIRP (GETD (QUOTE FIE)))
- (NULL (PAIRP (GETD (QUOTE FIEFIEFIE))))
- (EQ (CAR (GETD (QUOTE FIE))) (QUOTE MACRO))
- )
- (!$TEST PUTD
- (GLOBALP (QUOTE FIE))
- )
- % Should check that a FLUID variable not PUTDable;
- (!$TEST REMD
- (PAIRP (REMD (QUOTE FIE)))
- (NULL (GETD (QUOTE FIE)))
- (NULL (REMD (QUOTE FIE)))
- (NULL (REMD (QUOTE FIEFIEFIE)))
- )
- % -----3.6 Variables and Bindings------%
- % Make FLUIDVAR1 and FLUIDVAR2 fluids%
- (FLUID (QUOTE (FLUIDVAR1 FLUIDVAR2)))
- % Check that FLUIDVAR1 and FLUIDVAR2 are fluid,expect T, T%
- (FLUIDP (QUOTE FLUIDVAR1))
- (FLUIDP (QUOTE FLUIDVAR2))
- % Give FLUIDVAR1 and FLUIDVAR2 initial values%
- (SETQ FLUIDVAR1 1)
- (SETQ FLUIDVAR2 2)
- (!$TEST "FLUID and FLUIDP"
- (NULL (FLUID (QUOTE (FLUIDVAR3 FLUIDVAR1 FLUIDVAR2 FLUIDVAR4))))
- (FLUIDP (QUOTE FLUIDVAR3))
- (FLUIDP (QUOTE FLUIDVAR1))
- (FLUIDP (QUOTE FLUIDVAR2))
- (FLUIDP (QUOTE FLUIDVAR4))
- (NULL (GLOBALP (QUOTE FLUIDVAR3)))
- (NULL (GLOBALP (QUOTE FLUIDVAR1)))
- (NULL FLUIDVAR3)
- (EQN FLUIDVAR1 1)
- (NULL (FLUIDP (QUOTE CAR)))
- )
- (GLOBAL (QUOTE (FLUIDGLOBAL1)))
- % Expect ERROR that FLUIDGLOBAL1 already FLUID%
- (FLUID (QUOTE (FLUIDGLOBAL2)))
- % Expect ERROR that cant change FLUID%
- (GLOBAL (QUOTE (FLUIDVAR1 FLUIDVAR2 GLOBALVAR1 GLOBALVAR2)))
- % Does error cause GLOBALVAR1, GLOBALVAR2 to be declared ;
- (!$TEST "GLOBAL and GLOBALP"
- (NULL (GLOBAL (QUOTE (GLOBALVAR1 GLOBALVAR2))))
- (GLOBALP (QUOTE GLOBALVAR1))
- (GLOBALP (QUOTE GLOBALVAR2))
- (NULL (GLOBALP (QUOTE FLUIDVAR1)))
- (FLUIDP (QUOTE FLUIDVAR1))
- (NULL (FLUIDP (QUOTE GLOBALVAR1)))
- (NULL (FLUIDP (QUOTE GLOBALVAR2)))
- (GLOBALP (QUOTE CAR))
- )
- % Set SETVAR1 to have an ID value%
- (SET (QUOTE SETVAR1) (QUOTE SETVAR2))
- % Expect SETVAR3 to be declared FLUID%
- (!$TEST SET
- (NULL (FLUIDP (QUOTE SETVAR3)))
- (EQN 3 (SET (QUOTE SETVAR3) 3))
- (EQN 3 SETVAR3)
- (FLUIDP (QUOTE SETVAR3))
- (EQN (SET SETVAR1 4) 4)
- (NULL (EQN SETVAR1 4))
- (EQ SETVAR1 (QUOTE SETVAR2))
- (EQN SETVAR2 4)
- )
- % Expect ERROR if try to set non ID%
- (SET 1 2)
- (SET (QUOTE SETVAR1) 1)
- (SET SETVAR1 2)
- % Expect ERROR if try to SET T or NIL%
- (SET (QUOTE SAVENIL) NIL)
- (SET (QUOTE SAVET) T)
- (!$TEST "Special SET value"
- (SET (QUOTE NIL) 1)
- (NULL (EQN NIL 1))
- (SET (QUOTE NIL) SAVENIL)
- (SET (QUOTE T) 2)
- (NULL (EQN T 2))
- (SET (QUOTE T) SAVET)
- )
- % Expect SETVAR3 to be declared FLUID%
- (!$TEST SETQ
- (NULL (FLUIDP (QUOTE SETVAR3)))
- (EQN 3 (SETQ SETVAR3 3))
- (EQN 3 SETVAR3)
- (FLUIDP (QUOTE SETVAR3))
- )
- % Expect ERROR if try to SETQ T or NIL%
- (SET (QUOTE SAVENIL) NIL)
- (SET (QUOTE SAVET) T)
- (!$TEST "Special SETQ value"
- (SETQ NIL 1)
- (NULL (EQN NIL 1))
- (SETQ NIL SAVENIL)
- (SETQ T 2)
- (NULL (EQN T 2))
- (SETQ T SAVET)
- )
- (!$TEST UNFLUID
- (GLOBALP (QUOTE GLOBALVAR1))
- (FLUIDP (QUOTE FLUIDVAR1))
- (NULL (UNFLUID (QUOTE (GLOBALVAR1 FLUIDVAR1))))
- (GLOBALP (QUOTE GLOBALVAR1))
- (NULL (FLUIDP (QUOTE FLUIDVAR1)))
- )
- % ----- 3.7 Program Feature Functions -----%
- % These have been tested as part of BASIC tests;
- % Check exact GO and RETURN scoping rules ;
- % ----- 3.8 Error Handling -----%
- (!$TEST EMSG!* (GLOBALP (QUOTE EMSG!*)))
- (!$TEST ERRORSET
- (EQUAL (ERRORSET 1 T T) (QUOTE (1)))
- (NULL (PAIRP (ERRORSET (QUOTE (CAR 1)) T T)))
- )
- % Display ERRORSET range of messages and features%
- % First with primitive (CAR 1) error%
- (SETQ ERRORVAR1 (QUOTE (CAR 1)))
- % Expect MSG and BACKTRACE %
- (ERRORSET ERRORVAR1 T T)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Expect MSG, no backtrace %
- (ERRORSET ERRORVAR1 T NIL)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Expect no MSG, but BACKTRACE %
- (ERRORSET ERRORVAR1 NIL T)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Expect neither MSG nor Backtrace%
- (ERRORSET ERRORVAR1 NIL NIL)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Test with CALL on ERROR, with num=789, (A MESSAGE)%
- (SETQ ERRORVAR2 (QUOTE (ERROR 789 (LIST (QUOTE A) (QUOTE MESSAGE)))))
- % Expect MSG and BACKTRACE %
- (ERRORSET ERRORVAR2 T T)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Expect MSG, no backtrace %
- (ERRORSET ERRORVAR2 T NIL)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Expect no MSG, but BACKTRACE %
- (ERRORSET ERRORVAR2 NIL T)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Expect neither MSG nor Backtrace%
- (ERRORSET ERRORVAR2 NIL NIL)
- (PRINT (LIST (QUOTE EMSG!*) EMSG!*))
- % Test of Rebinding/Unbinding%
- (FLUID (QUOTE (ERRORVAR3 ERRORVAR4)))
- (SETQ ERRORVAR3 3)
- (SETQ ERRORVAR4 4)
- (DE ERRORFN1 (X ERRORVAR3)
- (PROGN (PRINT (LIST (QUOTE ERRORVAR3) ERRORVAR3))
- (SETQ ERRORVAR3 33)
- (PROG (Y ERRORVAR4)
- (PRINT (LIST (QUOTE ERRORVAR3) ERRORVAR3))
- (PRINT (LIST (QUOTE ERRORVAR4) ERRORVAR4))
- (SETQ ERRORVAR3 333)
- (SETQ ERRORVAR4 444)
- (ERROR 555 "Error Inside ERRORFN1")
- (RETURN "Error Failed"))))
- % Expect to see 3333 33 44 printed%
- % Followed by ERROR 555 messgae%
- (ERRORSET (QUOTE (ERRORFN1 3333 4444)) T T)
- % Expect 3 and 4 as Final values of ERRORVAR3 and ERRORVAR4%
- ERRORVAR3
- ERRORVAR4
- (!$TEST ERRORVARS
- (EQN ERRORVAR3 3)
- (EQN ERRORVAR4 4)
- )
- % ----- 3.9 Vectors -----%
- % Create a few variables that may be vectors %
- (SETQ VECTVAR1 NIL)
- (SETQ VECTVAR2 (QUOTE (VECTOR 1 2 3)))
- (SETQ VECTVAR3 (QUOTE [1 2 3 4]))
- % Expect Type mismatch Error for next 2%
- (GETV VECTVAR1 1)
- (GETV VECTVAR2 1)
- % Expect 1 2 for next 2%
- (GETV VECTVAR3 0)
- (GETV VECTVAR3 1)
- % Expect Index error for next 2%
- (GETV VECVAR3 -1)
- (GETV VECTVAR3 4)
-
- (!$TEST MKVECT
- (VECTORP (SETQ VECTVAR3 (MKVECT 5)))
- (EQN 5 (UPBV VECTVAR3))
- (NULL (GETV VECTVAR3 0))
- (NULL (GETV VECTVAR3 5))
- (EQN 10 (PUTV VECTVAR3 0 10))
- (EQN 10 (GETV VECTVAR3 0))
- (EQN 20 (PUTV VECTVAR3 5 20))
- (EQN 20 (GETV VECTVAR3 5))
- )
- % Expect VECTVAR3 to be [ 10 nil nil nil nil 20 ]%
- (PRINT VECTVAR3)
- % Expect MKVECT error for index less than 0%
- (MKVECT -1)
- % Expect length 1 vector%
- (MKVECT 0)
- % Expect type error%
- (MKVECT NIL)
- % Expect 2 TYPE errors%
- (PUTV VECTVAR1 0 1)
- (PUTV VECTVAR1 -1 1)
- (!$TEST UPBV
- (NULL (UPBV VECTVAR1))
- (EQN (UPBV VECTVAR3 5) 5 )
- )
- % ----- 3.10 Booleans and Conditionals -----%
- (!$TEST AND
- (EQ T (AND))
- (EQ T (AND T))
- (EQ T (AND T T))
- (EQN 1 (AND T 1))
- (EQ T (AND 1 T))
- (EQ T (AND T T 1 1 T T))
- (NULL (AND NIL))
- (NULL (AND T NIL))
- (NULL (AND NIL T))
- (NULL (AND T T T T NIL T T))
- )
- % The next should not ERROR, else AND is evaluating all args%
- (AND T T NIL (ERROR 310 "AND Failed") T)
- (!$TEST COND
- (EQN 1 (COND (T 1)))
- (NULL (COND))
- (NULL (COND (NIL 1)))
- (EQN 1 (COND (T 1) (T 2)))
- (EQN 2 (COND (NIL 1) (T 2)))
- (NULL (COND (NIL 1) (NIL 2)))
- )
- % Test COND with GO and RETURN%
- (PROG NIL
- (COND (T (GO L1)))
- (ERROR 310 "COND fell through")
- L1 (PRINT "GO in cond worked")
- (COND (T (RETURN (PRINT "Return 2"))))
- (ERROR 310 "COND did not RETURN")
- )
- % Certain Extensions to COND might fail%
- %/(COND 1 2)
- %/(COND (T))
- %/(COND (T 1 2 3))
- (!$TEST NOT
- (NULL (NOT T))
- (EQ T (NOT NIL))
- )
- (!$TEST OR
- (NULL (OR))
- (EQ T (OR T))
- (EQ T (OR T T))
- (EQN T (OR T 1))
- (EQ 1 (OR 1 T))
- (EQ T (OR T T 1 1 T T))
- (NULL (OR NIL))
- (EQ T (OR T NIL))
- (EQ T (OR NIL T))
- (EQ T (OR T T T T NIL T T))
- )
- % The next should not ERROR, else OR is evaluating all args%
- (OR T NIL NIL (ERROR 310 "OR Failed") T)
- % -----3.11 Arithmetic Functions-----%
- (!$TEST ABS
- (EQN 0 (ABS 0))
- (EQN 1 (ABS 1))
- (EQN 1 (ABS -1))
- (EQN 0.0 (ABS 0.0))
- (EQN 1.0 (ABS 1.0))
- (EQN 1.0 (ABS (MINUS 1.0)))
- )
- (!$TEST ADD1
- (EQN 1 (ADD1 0))
- (EQN 0 (ADD1 -1))
- (EQN 2 (ADD1 1))
- (EQN 1.0 (ADD1 0.0))
- (EQN 2.0 (ADD1 1.0))
- )
- (!$TEST DIFFERENCE
- (EQN 0 (DIFFERENCE 1 1))
- (EQN 0.0 (DIFFERENCE 1.0 1.0))
- (EQN 0.0 (DIFFERENCE 1 1.0))
- (EQN 0.0 (DIFFERENCE 1.0 1))
- (EQN 1 (DIFFERENCE 2 1))
- (EQN -1 (DIFFERENCE 1 2))
- )
- (!$TEST DIVIDE
- (EQUAL (CONS 1 2) (DIVIDE 7 5))
- (EQUAL (CONS -1 -2) (DIVIDE -7 5))
- (EQUAL (CONS -1 2) (DIVIDE 7 -5))
- (EQUAL (CONS 1 -2) (DIVIDE -7 -5))
- )
- (!$TEST EXPT
- (EQN (EXPT 2 0) 1)
- (EQN (EXPT 2 1) 2)
- (EQN (EXPT 2 2) 4)
- (EQN (EXPT 2 3) 8)
- (EQN (EXPT -2 2) 4)
- (EQN (EXPT -2 3) -8)
- )
- (!$TEST FIX
- (NUMBERP (FIX 1.0))
- (FIXP (FIX 1.0))
- (NULL (FLOATP (FIX 1.0)))
- (EQN (FIX 1.0 ) 1)
- (NUMBERP (FIX 1))
- (FIXP (FIX 1))
- )
- (!$TEST FLOAT
- (NUMBERP (FLOAT 1))
- (FLOATP (FLOAT 1))
- (NULL (FIXP (FLOAT 1)))
- (EQN 1.0 (FLOAT 1))
- )
- (!$TEST GREATERP
- (GREATERP 2 1)
- (GREATERP 1 0)
- (GREATERP 0 -1)
- (NULL (GREATERP 2 2))
- (NULL (GREATERP 1 1))
- (NULL (GREATERP 0 0))
- (NULL (GREATERP 0 1))
- (NULL (GREATERP -1 0))
- )
- (!$TEST LESSP
- (NULL (LESSP 2 1))
- (NULL (LESSP 1 0))
- (NULL (LESSP 0 -1))
- (NULL (LESSP 2 2))
- (NULL (LESSP 1 1))
- (NULL (LESSP 0 0))
- (LESSP 0 1)
- (LESSP -1 0)
- )
- (!$TEST MAX
- (EQN (MAX 1 2 3) 3)
- (EQN (MAX 3 2 1) 3)
- (EQN 1 (MAX 1 0))
- (EQN 1 (MAX 1))
- )
- % What is (MAX) ;
- (MAX)
- (!$TEST MAX2
- (EQN (MAX2 1 2) 2)
- (EQN (MAX2 2 1) 2)
- (EQN 1 (MAX2 1 0))
- (EQN 1 (MAX2 0 1))
- (EQN -1 (MAX2 -1 -2))
- )
- (!$TEST MIN
- (EQN (MIN 1 2 3) 1)
- (EQN (MIN 3 2 1) 1)
- (EQN 0 (MIN 1 0))
- (EQN 1 (MIN 1))
- )
- % What is (MIN) ;
- (MIN)
- (!$TEST MIN2
- (EQN (MIN2 1 2) 1)
- (EQN (MIN2 2 1) 1)
- (EQN 0 (MIN2 1 0))
- (EQN 0 (MIN2 0 1))
- (EQN -2 (MIN2 -1 -2))
- )
- (!$TEST MINUS
- (EQN 0 (MINUS 0))
- (EQN -1 (MINUS 1))
- (MINUSP (MINUS 1))
- (MINUSP -1)
- (LESSP -1 0)
- (EQN 1 (MINUS -1))
- )
- (!$TEST PLUS
- (EQN 6 (PLUS 1 2 3))
- (EQN 10 (PLUS 1 2 3 4))
- (EQN 0 (PLUS 1 2 3 -6))
- (EQN 3 (PLUS 1 2))
- (EQN 1 (PLUS 1))
- )
- % What is (PLUS) ;
- (PLUS)
- (!$TEST PLUS2
- (EQN 3 (PLUS2 1 2))
- (EQN 0 (PLUS2 1 -1))
- (EQN 1 (PLUS2 -2 3))
- )
- (!$TEST QUOTIENT
- (EQN 1 (QUOTIENT 3 3))
- (EQN 1 (QUOTIENT 4 3))
- (EQN 1 (QUOTIENT 5 3))
- (EQN 2 (QUOTIENT 6 3))
- (EQN -1 (QUOTIENT -3 3))
- (EQN -1 (QUOTIENT 3 -3))
- (EQN -1 (QUOTIENT 4 -3))
- (EQN -1 (QUOTIENT -4 3))
- )
- % Expect 2 ZERO DIVISOR error messages%
- (QUOTIENT 1 0)
- (QUOTIENT 0 0)
- (!$TEST REMAINDER
- (EQN 0 (REMAINDER 3 3))
- (EQN 1 (REMAINDER 4 3))
- (EQN 2 (REMAINDER 5 3))
- (EQN 0 (REMAINDER 6 3))
- (EQN 0 (REMAINDER -3 3))
- (EQN 0 (REMAINDER 3 -3))
- (EQN -1 (REMAINDER 4 -3))
- (EQN -1 (REMAINDER -4 3))
- )
- % Expect 2 ZERO DIVISOR error messages%
- (REMAINDER 1 0)
- (REMAINDER 0 0)
- (!$TEST SUB1
- (EQN 1 (SUB1 2))
- (EQN 0 (SUB1 1))
- (EQN -1 (SUB1 0))
- )
- (!$TEST TIMES
- (EQN 6 (TIMES 1 2 3))
- (EQN 1 (TIMES 1))
- (EQN 2 (TIMES 1 2))
- )
- % What is (TIMES) ;
- (TIMES)
- (!$TEST TIMES2
- (EQN 0 (TIMES2 1 0))
- (EQN 0 (TIMES2 0 1))
- (EQN 10 (TIMES2 5 2))
- (EQN -10 (TIMES2 5 -2))
- )
- % -----3.12 MAP composite functions ------%
- (SETQ LST (QUOTE (1 2 3)))
- (DE LISTX (X) (LIST X (QUOTE X)))
- (DE PRNTX (X) (PRINT (LISTX X)))
- % MAP: Expect 3 lines of output, equivalent to:%
- % ((1 2 3) X)%
- % ((2 3) X)%
- % ((3) X)%
- (!$TEST MAP (NULL (MAP LST (FUNCTION PRNTX))))
- % MAPC: Expect 3 lines of output, equivalent to:%
- % (1 X)%
- % (2 X)%
- % (3 X)%
- (!$TEST MAPC (NULL (MAPC LST (FUNCTION PRNTX))))
- % MAPCAN: Expect 3 lines of output, equivalent to:%
- % (1 X)%
- % (2 X)%
- % (3 X)%
- (!$TEST MAPCAN
- (EQUAL (MAPCAN LST (FUNCTION PRNTX))
- (QUOTE (1 X 2 X 3 X)))
- )
- % MAPCAR: Expect 3 Lines of output, equivalent to:%
- % (1 X)%
- % (2 X)%
- % (3 X)%
- (!$TEST MAPCAR
- (EQUAL (MAPCAR LST (FUNCTION PRNTX))
- (QUOTE ((1 X) (2 X) (3 X))))
- )
- % MAPCON: Expect 3 lines of output, equivalent to:%
- % ((1 2 3) X)%
- % ((2 3) X)%
- % ((3) X)%
- (!$TEST MAPCON
- (EQUAL (MAPCON LST (FUNCTION PRNTX))
- (QUOTE ((1 2 3) X (2 3) X (3) X)))
- )
- % MAPLIST: Expect 3 lines of output, equivalent to:%
- % ((1 2 3) X)%
- % ((2 3) X)%
- % ((3) X)%
- (!$TEST MAPLIST
- (EQUAL (MAPLIST LST (FUNCTION PRNTX))
- (QUOTE (((1 2 3) X) ((2 3) X) ((3) X))))
- )
- % ----- 3 . 13 Composite Functions -----%
- (SETQ APPVAR1 (QUOTE (1 2 3)))
- (!$TEST APPEND
- (NULL (APPEND NIL NIL))
- (EQUAL APPVAR1 (SETQ APPVAR2 (APPEND APPVAR1 NIL)))
- (NULL (EQ APPVAR1 APPVAR2))
- (EQUAL APPVAR1 (SETQ APPVAR2 (APPEND NIL APPVAR1)))
- (EQ APPVAR1 APPVAR2)
- (EQUAL APPVAR1 (APPEND (QUOTE (1)) (QUOTE (2 3))))
- (EQUAL APPVAR1 (APPEND (QUOTE (1 2)) (QUOTE (3))))
- )
- (SETQ ASSVAR
- (QUOTE ( ((1 . 1) . ONE) ((2 . 2) . TWO) ((3 . 3) . THREE) ) ) )
- (!$TEST ASSOC
- (NULL (ASSOC NIL NIL))
- (NULL (ASSOC 1 NIL))
- (NULL (ASSOC 1 ASSVAR))
- (EQUAL (QUOTE ((1 . 1) . ONE)) (ASSOC (QUOTE (1 . 1)) ASSVAR))
- (EQUAL (QUOTE ((2 . 2) . TWO)) (ASSOC (QUOTE (2 . 2)) ASSVAR))
- )
- % Expect Error MSG on poor ALIST%
- (ASSOC (QUOTE (1)) (QUOTE (1 2 3)))
- (SETQ DLIST (QUOTE ((AA BB) (EE FF))))
- (!$TEST DEFLIST
- (EQUAL (QUOTE (AA EE)) (DEFLIST DLIST (QUOTE DEFLIST)))
- (EQ (QUOTE BB) (GET (QUOTE AA) (QUOTE DEFLIST)))
- (EQ (QUOTE FF) (GET (QUOTE EE) (QUOTE DEFLIST)))
- )
- (!$TEST DELETE
- (EQUAL (QUOTE ((1 . 1) (2 . 2)))
- (DELETE (QUOTE (0 . 0)) (QUOTE ((0 . 0) (1 . 1) (2 . 2)))))
- (EQUAL (QUOTE ((0 . 0) (2 . 2)))
- (DELETE (QUOTE (1 . 1)) (QUOTE ((0 . 0) (1 . 1) (2 . 2)))))
- (EQUAL (QUOTE ((0 . 0) (2 . 2) (1 . 1)))
- (DELETE (QUOTE (1 . 1))
- (QUOTE ((0 . 0) (1 . 1) (2 . 2) (1 . 1)))))
- )
- (SETQ DIGITLST (QUOTE (!0 !1 !2 !3 !4 !5 !6 !7 !8 !9)))
- (DE TESTEACH (LST FN)
- (PROG (X)
- L1 (COND ((NULL (PAIRP LST)) (RETURN T)))
- (SETQ X (APPLY FN (LIST (CAR LST)))) % Not (FN (CAR LST)) ?
- (COND ((NULL X)
- (PRINT (LIST "*** TESTEACH " (CAR LST) " failed"))))
- (SETQ LST (CDR LST))
- (GO L1)))
- (!$TEST DIGIT
- (TESTEACH DIGITLST (FUNCTION DIGIT))
- (NULL (DIGIT 1))
- (NULL (DIGIT (QUOTE A)))
- (NULL (DIGIT "1"))
- )
- (!$TEST LENGTH
- (EQN 0 (LENGTH (QUOTE A)))
- (EQN 0 (LENGTH 1))
- (EQN 1 (LENGTH (QUOTE (A))))
- (EQN 1 (LENGTH (QUOTE (A . B))))
- (EQN 2 (LENGTH (QUOTE (A B))))
- )
- (SETQ UPVAR
- (QUOTE (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)))
- (SETQ DNVAR
- (QUOTE (a b c d e f g h i j k l m n o p q r s t u v w x y z)))
- (!$TEST LITER
- (TESTEACH UPVAR (FUNCTION LITER))
- (TESTEACH DNVAR (FUNCTION LITER))
- (NULL (LITER "A"))
- (NULL (LITER 1))
- (NULL (LITER (QUOTE AA)))
- )
- (SETQ MEMBVAR (QUOTE ((1 . 1) ( 2 . 2) (3 . 3))))
- (!$TEST MEMBER
- (NULL (MEMBER NIL NIL))
- (NULL (MEMBER NIL MEMBVAR))
- (NULL (MEMBER (QUOTE (4 . 4)) MEMBVAR))
- (EQ (CDR MEMBVAR) (MEMBER (QUOTE (2 . 2)) MEMBVAR))
- )
- (!$TEST MEMQ
- (NULL (MEMQ NIL NIL))
- (EQ MEMBVAR (MEMQ (CAR MEMBVAR) MEMBVAR))
- (NULL (MEMQ (QUOTE (1 . 1)) MEMBVAR))
- (EQ (CDR MEMBVAR) (MEMQ (CADR MEMBVAR) MEMBVAR))
- )
- (SETQ NCONCVAR1 (LIST 1 2 3))
- (!$TEST NCONC
- (EQUAL (QUOTE (1 2 3 4 5))
- (SETQ NCONCVAR2 (NCONC NCONCVAR1 (QUOTE ( 4 5)))))
- (EQ NCONCVAR1 NCONCVAR2)
- (EQUAL NCONCVAR1 (QUOTE (1 2 3 4 5)))
- )
- (!$TEST PAIR
- (EQUAL NIL (PAIR NIL NIL))
- (EQUAL (QUOTE ((1 . ONE) (2 . TWO)))
- (PAIR (QUOTE (1 2)) (QUOTE (ONE TWO))))
- )
- % expect 2 PAIR mismatch errors%
- (PAIR (QUOTE (1)) (QUOTE ( ONE TWO)))
- (PAIR (QUOTE (1)) NIL)
- (!$TEST REVERSE
- (NULL (REVERSE NIL))
- (EQUAL (QUOTE (1)) (REVERSE (QUOTE (1))))
- (EQUAL (QUOTE (1 2 3)) (REVERSE (QUOTE (3 2 1))))
- (EQUAL (QUOTE ((1 . 2) (2 . 3) (3 4 5)))
- (REVERSE (QUOTE ((3 4 5) (2 . 3) (1 . 2)))))
- )
- (DE SASSFN NIL
- (PROG2 (PRINT "Sassfn Called") 99))
- (SETQ SASSVAR (QUOTE ((1 . ONE) (2 . TWO))))
- (!$TEST SASSOC
- (EQN 99 (SASSOC NIL NIL (FUNCTION SASSFN)))
- (EQN 99 (SASSOC NIL SASSVAR (FUNCTION SASSFN)))
- (EQUAL (QUOTE (2 . TWO))
- (SASSOC 2 SASSVAR (FUNCTION SASSFN)))
- )
- % Expect ERROR for poor alist:
- (SASSOC (QUOTE A) (QUOTE (B (A . 1))) (FUNCTION SASSFN))
- % Set up SUBLIS values
- (SETQ SUBLVAR1 (QUOTE ((X . 1) ((X . X) . 2))))
- (SETQ SUBLVAR2 (QUOTE (X X (X . 1) (X . X) ((X . X)))))
- (SETQ SUBLVAR3 (QUOTE (1 1 (1 . 1) 2 (2))))
- (!$TEST SUBLIS
- (NULL (SUBLIS NIL NIL))
- (EQN 1 (SUBLIS NIL 1))
- (EQ SUBLVAR2 (SUBLIS NIL SUBLVAR2))
- (EQUAL SUBLVAR2 (SUBLIS NIL SUBLVAR2))
- (EQ SUBLVAR2 (SUBLIS (QUOTE ((Y . 3))) SUBLVAR2))
- % Will fail, but nice opt if no action;
- (EQUAL SUBLVAR2 (SUBLIS (QUOTE ((Y . 3))) SUBLVAR2))
- (EQUAL SUBLVAR3 (SUBLIS SUBLVAR1 SUBLVAR2))
- )
- (!$TEST SUBST
- (NULL (SUBST NIL 1 NIL))
- (EQ (QUOTE A) (SUBST NIL 1 (QUOTE A)))
- (EQN 1 (SUBST 1 2 2))
- (EQUAL (CONS 2 2) (SUBST 2 1 (CONS 1 1)))
- (EQUAL (QUOTE (1 1 (1 . 1) (1 . 1) ((1 . 1))))
- (SUBST 1 (QUOTE X) SUBLVAR2))
- )
- % ----- 3.14 The Interpreter ----%
- % To be done ;
- % ----- 3.15 IO -----%
- % ----- 3.16 The Standard LISP Reader ----%
- % To be done ;
- % ----- 4.0 Globals ----%
- % To be done ;
- % ----- 5.0 Miscellaneous functions -----%
- % to be done ;
|