Prompted by Aaron Sloman's recent message, I downloaded poplog 15.53
and installed it on my x86 linux box. I've been working on a conformance
test suite for ANSI Common Lisp (presently containing over 18,000 tests)
and am always looking for new targets.
The suite didn't even load, since the ANSI function COMPILE-FILE-PATHNAME
is not defined. Conditionalizing that away so that the files are
loaded uncompiled, I managed to get the suite's random tester to load.
This generates, optionally compiles, and evaluates random legal lisp forms,
looking for evaluator and/or compiler errors, then minimizes the bug-inducing
forms. It has very quickly found new bugs on every lisp implementation
(free or commercial) on which it's been run.
Here are some of the failures it came up with on Poplog common lisp:
(ash 1 -1000000000000)
should be: 0
actually: 'Integer shift amount needed'
(unwind-protect 0 (the integer 1))
should be: 0
actually: 'Excess type specifier(s) in THE special form'
(funcall
(compile
nil
'(lambda (a) (declare (notinline > *))
(declare (optimize (compilation-speed 0) (safety 2) (speed 2) (debug 0) (space 3)))
(catch 'ct1 (* a (throw 'ct1 (if (> 0) a 0))))))
5445205692802)
should be: 5445205692802)
actually: T, 0
(loop for x below 2 count (not (not (typep x t))))
should be: 2
actually: 'Ste: stack empty (missing argument? missing result?)'
(let ((a 1)) (if (not (/= a 0)) a 0))
should be: 1
actually: 'Ste: stack empty (missing argument? missing result?)'
It also would go into an infinite loop on some forms (interrupt did not
cause a catchable error, so these forms could not be minimized.)
Paul Dietz
dietz@dls.net
|