X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftype.impure.lisp;h=adb9bf67db0bd83bea939e7ec4cd4ebe5c6da719;hb=3aaed55326303bb377c4821c5e83b2e4e9c538fc;hp=503359190980310004a83a31ed9be3fffcb4bf48;hpb=403f7a15776928c7bea7bdbd42ff0f586217fbda;p=sbcl.git diff --git a/tests/type.impure.lisp b/tests/type.impure.lisp index 5033591..adb9bf6 100644 --- a/tests/type.impure.lisp +++ b/tests/type.impure.lisp @@ -80,14 +80,10 @@ ;;; part I: TYPEP (assert (typep #(11) '(simple-array t 1))) (assert (typep #(11) '(simple-array (or integer symbol) 1))) -;;; FIXME: This is broken because of compiler bug 123: the compiler -;;; optimizes the type test to T, so it never gets a chance to raise a -;;; runtime error. (It used to work under the IR1 interpreter just -;;; because the IR1 interpreter doesn't try to optimize TYPEP as hard -;;; as the byte compiler does.) -#+nil (assert (raises-error? (typep #(11) '(simple-array undef-type 1)))) +(assert (raises-error? (typep #(11) '(simple-array undef-type 1)))) (assert (not (typep 11 '(simple-array undef-type 1)))) ;;; part II: SUBTYPEP + (assert (subtypep '(vector some-undef-type) 'vector)) (assert (not (subtypep '(vector some-undef-type) 'integer))) (assert-nil-nil (subtypep 'utype-1 'utype-2)) @@ -182,6 +178,11 @@ ;;; thing to want anyway, let's test for it here: (assert-t-t (subtypep '(or some-undefined-type (member :no-ir2-yet :dead)) '(or some-undefined-type (member :no-ir2-yet :dead)))) +;;; BUG 158 (failure to compile loops with vector references and +;;; increments of greater than 1) was a symptom of type system +;;; uncertainty, to wit: +(assert-t-t (subtypep '(and (mod 536870911) (or (integer 0 0) (integer 2 536870912))) + '(mod 536870911))) ; aka SB-INT:INDEX. ;;;; Douglas Thomas Crosher rewrote the CMU CL type test system to ;;;; allow inline type tests for CONDITIONs and STANDARD-OBJECTs, and @@ -337,6 +338,25 @@ #.*tests-of-inline-type-tests*) (tests-of-inline-type-tests) (format t "~&/done with compiled (TESTS-OF-INLINE-TYPE-TESTS)~%") - + +;;; Redefinition of classes should alter the type hierarchy (BUG 140): +(defclass superclass () ()) +(defclass maybe-subclass () ()) +(assert-nil-t (subtypep 'maybe-subclass 'superclass)) +(defclass maybe-subclass (superclass) ()) +(assert-t-t (subtypep 'maybe-subclass 'superclass)) +(defclass maybe-subclass () ()) +(assert-nil-t (subtypep 'maybe-subclass 'superclass)) + +;;; Prior to sbcl-0.7.6.27, there was some confusion in ARRAY types +;;; specialized on some as-yet-undefined type which would cause this +;;; program to fail (bugs #123 and #165). Verify that it doesn't. +(defun foo (x) + (declare (type (vector bar) x)) + (aref x 1)) +(deftype bar () 'single-float) +(assert (eql (foo (make-array 3 :element-type 'bar :initial-element 0.0f0)) + 0.0f0)) + ;;; success (quit :unix-status 104)