From: Sam S. <sd...@gn...> - 2005-01-13 16:22:19
|
> * Bruno Haible <oe...@py...t> [2005-01-13 14:43:56 +0100]: > > To avoid the same phenomenon this time with the bindings, I'd like you > to have a test suite covering all the 24 combinations of > > - LET, LET*, LAMBDA, MULTIPLE-VALUE-BIND, > - the variable being declared special is bound / is not bound / the variable > is bound without being declared special > - compiled and interpreted > > You need the test suite anyway, in order to check afterwards that all is > fine. And in the beginning it will tell you _what_ is broken. $ ./clisp -K boot -q -norc -C -i tests/tests.lisp -x '(run-test "tests/bind" :eval-method :both)' ;; Loading file tests/tests.lisp ... 0 errors, 0 warnings ;; Loaded file tests/tests.lisp RUN-TEST: started #<INPUT BUFFERED FILE-STREAM CHARACTER #P"tests/bind.tst" @1> (DEFUN PRINT-COND (C) (FRESH-LINE) (PRINC C) (ELASTIC-NEWLINE)) EQL-OK: PRINT-COND (LET ((X 5)) (LET ((X (1+ X))) (DECLARE (SPECIAL X)) X)) EVAL: variable X has no value ERROR!! ERROR should be 6 ! (LET ((X 5)) (LET* ((X (1+ X))) (DECLARE (SPECIAL X)) X)) EVAL: variable X has no value ERROR!! ERROR should be 6 ! (LET ((X 5)) (MULTIPLE-VALUE-BIND (X) (1+ X) (DECLARE (SPECIAL X)) X)) EVAL: variable X has no value ERROR!! ERROR should be 6 ! (LET ((X 5)) ((LAMBDA (X) (DECLARE (SPECIAL X)) X) (1+ X))) EQL-OK: 6 (BLOCK FOO (HANDLER-BIND ((UNBOUND-VARIABLE (LAMBDA (C) (PRINT-COND C) (RETURN-F ROM FOO 'GOOD)))) (LET ((X (1+ X))) (DECLARE (SPECIAL X)) X))) EVAL: variable X has no value NIL: symbol X has no value EQL-OK: GOOD (BLOCK FOO (HANDLER-BIND ((UNBOUND-VARIABLE (LAMBDA (C) (PRINT-COND C) (RETURN-F ROM FOO 'GOOD)))) (LET* ((X (1+ X))) (DECLARE (SPECIAL X)) X))) EVAL: variable X has no value NIL: symbol X has no value EQL-OK: GOOD (BLOCK FOO (HANDLER-BIND ((UNBOUND-VARIABLE (LAMBDA (C) (PRINT-COND C) (RETURN-F ROM FOO 'GOOD)))) (MULTIPLE-VALUE-BIND (X) (1+ X) (DECLARE (SPECIAL X)) X))) EVAL: variable X has no value NIL: symbol X has no value EQL-OK: GOOD (BLOCK FOO (HANDLER-BIND ((UNBOUND-VARIABLE (LAMBDA (C) (PRINT-COND C) (RETURN-F ROM FOO 'GOOD)))) ((LAMBDA (X) (DECLARE (SPECIAL X)) X) (1+ X)))) EVAL: variable X has no value WARNING : X is neither declared nor bound, it will be treated as if it were declared SPECIAL.NIL: symbol X has no value EQL-OK: GOOD (LET ((X 5)) (LET ((X (1+ X))) X)) EQL-OK: 6 (LET ((X 5)) (LET* ((X (1+ X))) X)) EQL-OK: 6 (LET ((X 5)) (MULTIPLE-VALUE-BIND (X) (1+ X) X)) EQL-OK: 6 (LET ((X 5)) ((LAMBDA (X) X) (1+ X))) EQL-OK: 6 RUN-TEST: finished "tests/bind" (3 errors out of 13 tests) 13 ; 3 -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> I'd give my right arm to be ambidextrous. |