X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Ftype.pure.lisp;h=46a4bd643d3f20fa183d86a80a4f50b41450a5c3;hb=2b90fd1dbad23322258222a2ef4cef7f6a00831d;hp=bac6d51169cce9ba6c4b8d85e4ce6b44c7645f52;hpb=970dd272dc84f7420252eadb4829cc193f795716;p=sbcl.git diff --git a/tests/type.pure.lisp b/tests/type.pure.lisp index bac6d51..46a4bd6 100644 --- a/tests/type.pure.lisp +++ b/tests/type.pure.lisp @@ -257,6 +257,7 @@ (let ((deriver (intern (format nil "~A-DERIVE-UNSIGNED-~:[HIGH~;LOW~]-BOUND" op minimize) (find-package :sb-c)))) + (format t "testing type derivation: ~A~%" deriver) (loop for a from 0 below size do (loop for b from a below size do (loop for c from 0 below size do @@ -346,3 +347,36 @@ ACTUAL ~D DERIVED ~D~%" (assert (typep #p"" 'sb-kernel:instance)) (assert (subtypep '(member #p"") 'sb-kernel:instance)) + +(with-test (:name (:typep :character-set :negation)) + (flet ((generate-chars () + (loop repeat 100 + collect (code-char (random char-code-limit))))) + (dotimes (i 1000) + (let* ((chars (generate-chars)) + (type `(member ,@chars)) + (not-type `(not ,type))) + (dolist (char chars) + (assert (typep char type)) + (assert (not (typep char not-type)))) + (let ((other-chars (generate-chars))) + (dolist (char other-chars) + (unless (member char chars) + (assert (not (typep char type))) + (assert (typep char not-type))))))))) + +(with-test (:name (:check-type :store-value :complex-place)) + (let ((a (cons 0.0 2)) + (handler-invoked nil)) + (handler-bind ((error + (lambda (c) + (declare (ignore c)) + (assert (not handler-invoked)) + (setf handler-invoked t) + (invoke-restart 'store-value 1)))) + (check-type (car a) integer)) + (assert (eql (car a) 1)))) + + + +