X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.pure.lisp;h=7002c7cb4a8a718d436e4d19e9048ff4ec7ced1d;hb=8be78b41ac1695e1c9b5d7f6c8bd41e3c7e6e6fc;hp=21adaf5066ca99464073dc4e6ab40312b501fc88;hpb=ce6c2726bfb08211d6d281fdf070490110bdc374;p=sbcl.git diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index 21adaf5..7002c7c 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -1,4 +1,5 @@ + ;;;; various compiler tests without side effects ;;;; This software is part of the SBCL system. See the README file for @@ -4897,3 +4898,40 @@ (test every) (test notany) (test notevery)))) + +(with-test (:name :propagate-complex-type-tests) + (flet ((test (type value) + (let ((ftype (sb-kernel:%simple-fun-type + (compile nil `(lambda (x) + (if (typep x ',type) + x + ',value)))))) + (assert (typep ftype `(cons (eql function)))) + (assert (= 3 (length ftype))) + (let* ((return (third ftype)) + (rtype (second return))) + (assert (typep return `(cons (eql values) + (cons t + (cons (eql &optional) + null))))) + (assert (and (subtypep rtype type) + (subtypep type rtype))))))) + (mapc (lambda (params) + (apply #'test params)) + `(((unsigned-byte 17) 0) + ((member 1 3 5 7) 5) + ((or symbol (eql 42)) t))))) + +(with-test (:name :constant-fold-complex-type-tests) + (assert (equal (sb-kernel:%simple-fun-type + (compile nil `(lambda (x) + (if (typep x '(member 1 3)) + (typep x '(member 1 3 15)) + t)))) + `(function (t) (values (member t) &optional)))) + (assert (equal (sb-kernel:%simple-fun-type + (compile nil `(lambda (x) + (declare (type (member 1 3) x)) + (typep x '(member 1 3 15))))) + `(function ((or (integer 1 1) (integer 3 3))) + (values (member t) &optional)))))