X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=6e4ee6dd60dab4817809eda6af535255ca5ceb34;hb=64ec717cf13c44fb4571c1fd7fbd508551ecfe01;hp=aa5ee2e978a1d265871f498d38e26145cdf19b91;hpb=45e4225c7ceae7328b6951770f654932438ed266;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index aa5ee2e..6e4ee6d 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -865,6 +865,31 @@ (load source) (full-check) (delete-file fasl))) + +(defun expt-derive-type-bug (a b) + (unless (< a b) + (truncate (expt a b)))) +(assert (equal (multiple-value-list (expt-derive-type-bug 1 1)) + '(1 0))) + +;;; Problems with type checking in functions with EXPLICIT-CHECK +;;; attribute (reported by Peter Graves) +(loop for (fun . args) in '((= a) (/= a) + (< a) (<= a) (> a) (>= a)) + do (assert (raises-error? (apply fun args) type-error))) + +(defclass broken-input-stream (sb-gray:fundamental-input-stream) ()) +(defmethod sb-gray:stream-read-char ((stream broken-input-stream)) + (throw 'break :broken)) +(assert (eql (block return + (handler-case + (catch 'break + (funcall (eval ''peek-char) + 1 (make-instance 'broken-input-stream)) + :test-broken) + (type-error (c) + (return-from return :good)))) + :good)) ;;;; tests not in the problem domain, but of the consistency of the