X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fdefstruct.impure.lisp;h=8f2f5b247a3f8b76c46d7e0ba6144c0ad464d7f2;hb=2f3c0044ba37b2b33ab60b283e4612aa1ba643eb;hp=029babdc875ef26a2c7b564616d5f14947740cd8;hpb=a64589ed34ce0298fae164476af7de14c4652909;p=sbcl.git diff --git a/tests/defstruct.impure.lisp b/tests/defstruct.impure.lisp index 029babd..8f2f5b2 100644 --- a/tests/defstruct.impure.lisp +++ b/tests/defstruct.impure.lisp @@ -25,15 +25,17 @@ ;;; An &AUX variable in a boa-constructor without a default value ;;; means "do not initialize slot" and does not cause type error +(declaim (notinline opaque-identity)) +(defun opaque-identity (x) x) + (defstruct (boa-saux (:constructor make-boa-saux (&aux a (b 3) (c)))) (a #\! :type (integer 1 2)) (b #\? :type (integer 3 4)) (c #\# :type (integer 5 6))) (let ((s (make-boa-saux))) - (declare (notinline identity)) (locally (declare (optimize (safety 3)) (inline boa-saux-a)) - (assert (raises-error? (identity (boa-saux-a s)) type-error))) + (assert (raises-error? (opaque-identity (boa-saux-a s)) type-error))) (setf (boa-saux-a s) 1) (setf (boa-saux-c s) 5) (assert (eql (boa-saux-a s) 1)) @@ -42,10 +44,9 @@ ; these two checks should be ; kept separated (let ((s (make-boa-saux))) - (declare (notinline identity)) (locally (declare (optimize (safety 0)) (inline boa-saux-a)) - (assert (eql (identity (boa-saux-a s)) 0))) + (assert (eql (opaque-identity (boa-saux-a s)) 0))) (setf (boa-saux-a s) 1) (setf (boa-saux-c s) 5) (assert (eql (boa-saux-a s) 1)) @@ -53,10 +54,9 @@ (assert (eql (boa-saux-c s) 5))) (let ((s (make-boa-saux))) - (declare (notinline identity)) (locally (declare (optimize (safety 3)) (notinline boa-saux-a)) - (assert (raises-error? (identity (boa-saux-a s)) type-error))) + (assert (raises-error? (opaque-identity (boa-saux-a s)) type-error))) (setf (boa-saux-a s) 1) (setf (boa-saux-c s) 5) (assert (eql (boa-saux-a s) 1)) @@ -521,6 +521,27 @@ (eval (copy-tree form)) (eval (copy-tree form))) +;;; 322: "DEFSTRUCT :TYPE LIST predicate and improper lists" +;;; reported by Bruno Haible sbcl-devel "various SBCL bugs" from CLISP +;;; test suite. +(defstruct (bug-332a (:type list) (:initial-offset 5) :named)) +(defstruct (bug-332b (:type list) (:initial-offset 2) :named (:include bug-332a))) +(assert (not (bug-332b-p (list* nil nil nil nil nil 'foo73 nil 'tail)))) +(assert (not (bug-332b-p 873257))) +(assert (not (bug-332b-p '(1 2 3 4 5 x 1 2 bug-332a)))) +(assert (bug-332b-p '(1 2 3 4 5 x 1 2 bug-332b))) + +;;; Similar test for vectors, just for good measure. +(defstruct (bug-332a-aux (:type vector) + (:initial-offset 5) :named)) +(defstruct (bug-332b-aux (:type vector) + (:initial-offset 2) :named + (:include bug-332a-aux))) +(assert (not (bug-332b-aux-p #(1 2 3 4 5 x 1 premature-end)))) +(assert (not (bug-332b-aux-p 873257))) +(assert (not (bug-332b-aux-p #(1 2 3 4 5 x 1 2 bug-332a-aux)))) +(assert (bug-332b-aux-p #(1 2 3 4 5 x 1 2 bug-332b-aux))) + ;;; success (format t "~&/returning success~%") (quit :unix-status 104)