+
+;;; COERCE also sometimes failed to verify that a particular coercion
+;;; was possible (in particular coercing rationals to bounded float
+;;; types.
+(assert (raises-error? (coerce 1 '(float 2.0 3.0)) type-error))
+(assert (raises-error? (coerce 1 '(single-float -1.0 0.0)) type-error))
+(assert (eql (coerce 1 '(single-float -1.0 2.0)) 1.0))
+
+;;; ANSI says MIN and MAX should signal TYPE-ERROR if any argument
+;;; isn't REAL. SBCL 0.7.7 didn't in the 1-arg case. (reported as a
+;;; bug in CMU CL on #lisp IRC by lrasinen 2002-09-01)
+#||
+
+FIXME: These tests would be good to have. But although, in
+sbcl-0.7.7.2x, (NULL (IGNORE-ERRORS (MIN 1 #(1 2 3)))) returns T, the
+ASSERTion fails, probably in something related to bug #194.
+
+(assert (null (ignore-errors (min '(1 2 3)))))
+(assert (= (min -1) -1))
+(assert (null (ignore-errors (min 1 #(1 2 3)))))
+(assert (= (min 10 11) 10))
+(assert (null (ignore-errors (min (find-package "CL") -5.0))))
+(assert (= (min 5.0 -3) -3))
+(assert (null (ignore-errors (max #c(4 3)))))
+(assert (= (max 0) 0))
+(assert (null (ignore-errors (max "MIX" 3))))
+(assert (= (max -1 10.0) 10.0))
+(assert (null (ignore-errors (max 3 #'max))))
+(assert (= (max -3 0) 0))
+||#
+
+;;; (CEILING x 2^k) was optimized incorrectly
+(loop for divisor in '(-4 4)
+ for ceiler = (compile nil `(lambda (x)
+ (declare (fixnum x))
+ (declare (optimize (speed 3)))
+ (ceiling x ,divisor)))
+ do (loop for i from -5 to 5
+ for exact-q = (/ i divisor)
+ do (multiple-value-bind (q r)
+ (funcall ceiler i)
+ (assert (= (+ (* q divisor) r) i))
+ (assert (<= exact-q q))
+ (assert (< q (1+ exact-q))))))