X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Ftype.pure.lisp;h=46a4bd643d3f20fa183d86a80a4f50b41450a5c3;hb=1dc3a468ba32755c51747d6e85ed32d989f2dd49;hp=f92c3b7e487bced4e10139f86521766497c939d3;hpb=140751b3289f9eb5837b6ff153b0cb7372c83f64;p=sbcl.git diff --git a/tests/type.pure.lisp b/tests/type.pure.lisp index f92c3b7..46a4bd6 100644 --- a/tests/type.pure.lisp +++ b/tests/type.pure.lisp @@ -237,6 +237,10 @@ ;;; Test derivation of LOG{AND,IOR,XOR} bounds for unsigned arguments. ;;; ;;; Fear the Loop of Doom! +;;; +;;; (In fact, this is such a fearsome loop that executing it with the +;;; evaluator would take ages... Disable it under those circumstances.) +#+#.(cl:if (cl:eq sb-ext:*evaluator-mode* :compile) '(and) '(or)) (let* ((bits 5) (size (ash 1 bits))) (flet ((brute-force (a b c d op minimize) @@ -253,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 @@ -332,13 +337,46 @@ ACTUAL ~D DERIVED ~D~%" (sb-kernel:specifier-type '(simple-array an-unkown-type (8)))))) (assert - (sb-kernel:type/= (sb-kernel:specifier-type 'cons) + (sb-kernel:type/= (sb-kernel:specifier-type 'cons) (sb-kernel:specifier-type '(cons single-float single-float)))) (multiple-value-bind (match win) - (sb-kernel:type= (sb-kernel:specifier-type '(cons integer)) + (sb-kernel:type= (sb-kernel:specifier-type '(cons integer)) (sb-kernel:specifier-type '(cons))) (assert (and (not match) win))) (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)))) + + + +