(min, max): Check inexactness of big/real and
authorKevin Ryde <user42@zip.com.au>
Thu, 25 Mar 2004 21:45:11 +0000 (21:45 +0000)
committerKevin Ryde <user42@zip.com.au>
Thu, 25 Mar 2004 21:45:11 +0000 (21:45 +0000)
real/big combinations, collect up tests under arg types for clarity.

test-suite/tests/numbers.test

index 3296861..5b49d03 100644 (file)
   (pass-if-exception "complex/frac" exception:wrong-type-arg
     (max 1+i 123/456))
 
-  (pass-if (= 456.0 (max 123.0 456.0)))
-  (pass-if (= 456.0 (max 456.0 123.0)))
-
   (let ((big*2 (* fixnum-max 2))
         (big*3 (* fixnum-max 3))
         (big*4 (* fixnum-max 4))
         (big*5 (* fixnum-max 5)))
-    
-    (pass-if (= +inf.0 (max big*5  +inf.0)))
-    (pass-if (= +inf.0 (max +inf.0 big*5)))
-    (pass-if (= big*5  (max big*5  -inf.0)))
-    (pass-if (= big*5  (max -inf.0 big*5)))
 
-    (pass-if (nan? (max 123 +nan.0)))
-    (pass-if (nan? (max big*5 +nan.0)))
-    (pass-if (nan? (max 123.0 +nan.0)))
-    (pass-if (nan? (max +nan.0 123)))
-    (pass-if (nan? (max +nan.0 big*5)))
-    (pass-if (nan? (max +nan.0 123.0)))
-    (pass-if (nan? (max +nan.0 +nan.0))))
+    (with-test-prefix "inum / real"
+      (pass-if (nan? (max 123 +nan.0))))
+
+    (with-test-prefix "real / inum"
+      (pass-if (nan? (max +nan.0 123))))
+
+    (with-test-prefix "big / real"
+      (pass-if (nan? (max big*5 +nan.0)))
+      (pass-if (= big*5  (max big*5 -inf.0)))
+      (pass-if (= +inf.0 (max big*5 +inf.0)))
+      (pass-if (= 1.0 (max (- big*5) 1.0)))
+      (pass-if (inexact? (max big*5 1.0)))
+      (pass-if (= (exact->inexact big*5) (max big*5 1.0))))
+
+    (with-test-prefix "real / big"
+      (pass-if (nan? (max +nan.0 big*5)))
+      (pass-if (= +inf.0 (max +inf.0 big*5)))
+      (pass-if (= big*5  (max -inf.0 big*5)))
+      (pass-if (= 1.0 (max 1.0 (- big*5))))
+      (pass-if (inexact? (max 1.0 big*5)))
+      (pass-if (= (exact->inexact big*5) (max 1.0 big*5))))
+
+    (with-test-prefix "real / real"
+      (pass-if (nan? (max 123.0 +nan.0)))
+      (pass-if (nan? (max +nan.0 123.0)))
+      (pass-if (nan? (max +nan.0 +nan.0)))
+      (pass-if (= 456.0 (max 123.0 456.0)))
+      (pass-if (= 456.0 (max 456.0 123.0)))))
 
   ;; in gmp prior to 4.2, mpz_cmp_d ended up treating Inf as 2^1024, make
   ;; sure we've avoided that
              (pass-if (list +inf.0 b)
                (= +inf.0 (max b +inf.0)))
              (pass-if (list b -inf.0)
-               (= b (max b -inf.0)))
+               (= (exact->inexact b) (max b -inf.0)))
              (pass-if (list -inf.0 b)
-               (= b (max b -inf.0))))
+               (= (exact->inexact b) (max b -inf.0))))
            (list (1- (ash 1 1024))
                  (ash 1 1024)
                  (1+ (ash 1 1024))
   (pass-if-exception "complex/frac" exception:wrong-type-arg
     (min 1+i 123/456))
 
-  (pass-if (= 123.0 (min 123.0 456.0)))
-  (pass-if (= 123.0 (min 456.0 123.0)))
-
   (let ((big*2 (* fixnum-max 2))
         (big*3 (* fixnum-max 3))
         (big*4 (* fixnum-max 4))
         (big*5 (* fixnum-max 5)))
-    
+
     (expect-fail (documented? max))
     (pass-if (= 1 (min 7 3 1 5)))
     (pass-if (= 1 (min 1 7 3 5)))
         (= (- fixnum-min 1) (min (- fixnum-min 1) 2 4 3 (* 2 fixnum-max))))
     (pass-if
         (= (- fixnum-min 1) (min 2 4 3 (* 2 fixnum-max) (- fixnum-min 1))))
-    
-    (pass-if (= big*5  (min big*5  +inf.0)))
-    (pass-if (= big*5  (min +inf.0 big*5)))
-    (pass-if (= -inf.0 (min big*5  -inf.0)))
-    (pass-if (= -inf.0 (min -inf.0 big*5)))
-
-    (pass-if (nan? (min 123 +nan.0)))
-    (pass-if (nan? (min big*5 +nan.0)))
-    (pass-if (nan? (min 123.0 +nan.0)))
-    (pass-if (nan? (min +nan.0 123)))
-    (pass-if (nan? (min +nan.0 big*5)))
-    (pass-if (nan? (min +nan.0 123.0)))
-    (pass-if (nan? (min +nan.0 +nan.0))))
-  
+
+    (with-test-prefix "inum / real"
+      (pass-if (nan? (min 123 +nan.0))))
+
+    (with-test-prefix "real / inum"
+      (pass-if (nan? (min +nan.0 123))))
+
+    (with-test-prefix "big / real"
+      (pass-if (nan? (min big*5 +nan.0)))
+      (pass-if (= big*5  (min big*5  +inf.0)))
+      (pass-if (= -inf.0 (min big*5  -inf.0)))
+      (pass-if (= 1.0 (min big*5 1.0)))
+      (pass-if (inexact? (min (- big*5) 1.0)))
+      (pass-if (= (exact->inexact (- big*5)) (min (- big*5) 1.0))))
+
+    (with-test-prefix "real / big"
+      (pass-if (nan? (min +nan.0 big*5)))
+      (pass-if (= big*5  (min +inf.0 big*5)))
+      (pass-if (= -inf.0 (min -inf.0 big*5)))
+      (pass-if (= 1.0 (min 1.0 big*5)))
+      (pass-if (inexact? (min 1.0 (- big*5))))
+      (pass-if (= (exact->inexact (- big*5)) (min 1.0 (- big*5)))))
+
+    (with-test-prefix "real / real"
+      (pass-if (nan? (min 123.0 +nan.0)))
+      (pass-if (nan? (min +nan.0 123.0)))
+      (pass-if (nan? (min +nan.0 +nan.0)))
+      (pass-if (= 123.0 (min 123.0 456.0)))
+      (pass-if (= 123.0 (min 456.0 123.0)))))
+
+
   ;; in gmp prior to 4.2, mpz_cmp_d ended up treating Inf as 2^1024, make
   ;; sure we've avoided that
   (for-each (lambda (b)
              (pass-if (list b +inf.0)
-               (= b (min b +inf.0)))
+               (= (exact->inexact b) (min b +inf.0)))
              (pass-if (list +inf.0 b)
-               (= b (min b +inf.0)))
+               (= (exact->inexact b) (min b +inf.0)))
              (pass-if (list b -inf.0)
                (= -inf.0 (min b -inf.0)))
              (pass-if (list -inf.0 b)