X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Ftype.pure.lisp;h=1e0b27a442ce824178fe7365643a32426d65c268;hb=e119a2f79cf36039a39996f5490934b4d927529a;hp=31f8688c16e915a317b61caab34776cb76e0fde2;hpb=1f1ffa37f8eed97c92c55b25f200e27940ef9d9e;p=sbcl.git diff --git a/tests/type.pure.lisp b/tests/type.pure.lisp index 31f8688..1e0b27a 100644 --- a/tests/type.pure.lisp +++ b/tests/type.pure.lisp @@ -364,3 +364,35 @@ ACTUAL ~D DERIVED ~D~%" (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)))) + +;;; The VOP FIXNUMP/UNSIGNED-BYTE-64 was broken on x86-64, failing +;;; the first ASSERT below. The second ASSERT takes care that the fix +;;; doesn't overshoot the mark. +(with-test (:name (:typep :fixnum-if-unsigned-byte)) + (let ((f (compile nil + (lambda (x) + (declare (type (unsigned-byte #.sb-vm:n-word-bits) x)) + (typep x (quote fixnum)))))) + (assert (not (funcall f (1+ most-positive-fixnum)))) + (assert (funcall f most-positive-fixnum)))) + +(with-test (:name (:typep :member-uses-eql)) + (assert (eval '(typep 1/3 '(member 1/3 nil)))) + (assert (eval '(typep 1.0 '(member 1.0 t)))) + (assert (eval '(typep #c(1.1 1.2) '(member #c(1.1 1.2))))) + (assert (eval '(typep #c(1 1) '(member #c(1 1))))) + (let ((bignum1 (+ 12 most-positive-fixnum)) + (bignum2 (- (+ 15 most-positive-fixnum) 3))) + (assert (eval `(typep ,bignum1 '(member ,bignum2))))))