[project @ 1999-09-16 19:37:58 by sof]
authorsof <unknown>
Thu, 16 Sep 1999 19:37:58 +0000 (19:37 +0000)
committersof <unknown>
Thu, 16 Sep 1999 19:37:58 +0000 (19:37 +0000)
Added expected stdout to reg. test for Float&Double exceptional IEEE values.
(the numbers were produced on a PII & with the MS C run-time -- don't be
surprised if you see slightly different numbers on your box.)

ghc/tests/codeGen/should_run/Makefile
ghc/tests/codeGen/should_run/cg044.hs
ghc/tests/codeGen/should_run/cg044.stdout [new file with mode: 0644]

index ce84d21..b712aba 100644 (file)
@@ -1,5 +1,5 @@
 #-----------------------------------------------------------------------------
-# $Id: Makefile,v 1.8 1999/01/23 18:10:00 sof Exp $
+# $Id: Makefile,v 1.9 1999/09/16 19:37:58 sof Exp $
 
 TOP = ../..
 include $(TOP)/mk/boilerplate.mk
@@ -19,6 +19,7 @@ cg032_HC_OPTS = -fglasgow-exts
 cg033_HC_OPTS = -fglasgow-exts
 cg035_HC_OPTS = -fglasgow-exts
 cg042_HC_OPTS = -fglasgow-exts
+cg044_HC_OPTS = -fglasgow-exts
 
 cg016_RUNTEST_OPTS = -x 1      # should override the -x 0 above.
 cg021_RUNTEST_OPTS = +RTS -K2m
index c5afa9d..aace857 100644 (file)
@@ -1,6 +1,10 @@
 -- !!! Testing IEEE Float and Double extremity predicates.
 module Main(main) where
 
+import Char
+import ST
+import MutableArray
+
 main :: IO ()
 main = do
  sequence_ (map putStrLn double_tests)
@@ -24,6 +28,7 @@ double_numbers :: [Double]
 double_numbers =
       [ 0
       , encodeFloat 0 0     -- 0 using encodeFloat method
+      , mkDouble (map chr [0,0,0,0,0,0, 0xf0, 0x7f])  -- +inf
       , encodeFloat 1 2047  -- +Inf 
       , encodeFloat 1 2048
       , encodeFloat 1  2047              -- signalling NaN
@@ -156,7 +161,15 @@ doubleOrFloat ls
  where
    atType = undefined `asTypeOf` (head ls)
 
-
+-- make a double from a list of 8 bytes
+-- (caller deals with byte ordering.)
+mkDouble :: [Char] -> Double
+mkDouble ls = 
+ runST ( do
+   arr <- newCharArray (0,7)
+   sequence (zipWith (writeCharArray arr) [(0::Int)..] (take 8 ls))
+   readDoubleArray arr 0
+ )
 
 showAndPerform :: (Show a, Show b)
               => (a -> b)
diff --git a/ghc/tests/codeGen/should_run/cg044.stdout b/ghc/tests/codeGen/should_run/cg044.stdout
new file mode 100644 (file)
index 0000000..0eb505e
--- /dev/null
@@ -0,0 +1,264 @@
+
+*********************************
+Denormalised numbers: Double
+
+isDenormalised 0.0 = False
+isDenormalised 0.0 = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised NaN = False
+isDenormalised 1.821736912876398e-300 = False
+isDenormalised 1.8217369128763983e300 = False
+isDenormalised 5.0e-324 = True
+isDenormalised 2.2250738585072014e-308 = False
+isDenormalised 0.11 = False
+isDenormalised 0.1 = False
+isDenormalised -3.4 = False
+isDenormalised 2.2250738585072014e-308 = False
+isDenormalised 1.7976931348623157e308 = False
+
+
+*********************************
+Positive Infinity: Double
+
+isInfinite 0.0 = False
+isInfinite 0.0 = False
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite NaN = False
+isInfinite 1.821736912876398e-300 = False
+isInfinite 1.8217369128763983e300 = False
+isInfinite 5.0e-324 = False
+isInfinite 2.2250738585072014e-308 = False
+isInfinite 0.11 = False
+isInfinite 0.1 = False
+isInfinite -3.4 = False
+isInfinite 2.2250738585072014e-308 = False
+isInfinite 1.7976931348623157e308 = False
+
+
+*********************************
+Negative Infinity: Double
+
+isNegInfinite 0.0 = False
+isNegInfinite 0.0 = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite NaN = False
+isNegInfinite 1.821736912876398e-300 = False
+isNegInfinite 1.8217369128763983e300 = False
+isNegInfinite 5.0e-324 = False
+isNegInfinite 2.2250738585072014e-308 = False
+isNegInfinite 0.11 = False
+isNegInfinite 0.1 = False
+isNegInfinite -3.4 = False
+isNegInfinite 2.2250738585072014e-308 = False
+isNegInfinite 1.7976931348623157e308 = False
+
+
+*********************************
+NaN: Double
+
+isNaN 0.0 = False
+isNaN 0.0 = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN NaN = True
+isNaN 1.821736912876398e-300 = False
+isNaN 1.8217369128763983e300 = False
+isNaN 5.0e-324 = False
+isNaN 2.2250738585072014e-308 = False
+isNaN 0.11 = False
+isNaN 0.1 = False
+isNaN -3.4 = False
+isNaN 2.2250738585072014e-308 = False
+isNaN 1.7976931348623157e308 = False
+
+
+*********************************
+Negative zero: Double
+
+isNegativeZero 0.0 = False
+isNegativeZero 0.0 = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero NaN = False
+isNegativeZero 1.821736912876398e-300 = False
+isNegativeZero 1.8217369128763983e300 = False
+isNegativeZero 5.0e-324 = False
+isNegativeZero 2.2250738585072014e-308 = False
+isNegativeZero 0.11 = False
+isNegativeZero 0.1 = False
+isNegativeZero -3.4 = False
+isNegativeZero 2.2250738585072014e-308 = False
+isNegativeZero 1.7976931348623157e308 = False
+
+
+*********************************
+Positive zero: Double
+
+isPosZero 0.0 = True
+isPosZero 0.0 = True
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero NaN = False
+isPosZero 1.821736912876398e-300 = False
+isPosZero 1.8217369128763983e300 = False
+isPosZero 5.0e-324 = False
+isPosZero 2.2250738585072014e-308 = False
+isPosZero 0.11 = False
+isPosZero 0.1 = False
+isPosZero -3.4 = False
+isPosZero 2.2250738585072014e-308 = False
+isPosZero 1.7976931348623157e308 = False
+
+
+*********************************
+Denormalised numbers: Float
+
+isDenormalised 0.0 = False
+isDenormalised 0.0 = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised Infinity = False
+isDenormalised NaN = False
+isDenormalised 0.0 = False
+isDenormalised Infinity = False
+isDenormalised 1.0e-45 = True
+isDenormalised 1.1754944e-38 = False
+isDenormalised 2.9802326e-8 = False
+isDenormalised 0.11 = False
+isDenormalised 0.1 = False
+isDenormalised -3.4 = False
+isDenormalised 1.1754944e-38 = False
+isDenormalised 3.4028235e38 = False
+
+
+*********************************
+Positive Infinity: Float
+
+isInfinite 0.0 = False
+isInfinite 0.0 = False
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite Infinity = True
+isInfinite NaN = False
+isInfinite 0.0 = False
+isInfinite Infinity = True
+isInfinite 1.0e-45 = False
+isInfinite 1.1754944e-38 = False
+isInfinite 2.9802326e-8 = False
+isInfinite 0.11 = False
+isInfinite 0.1 = False
+isInfinite -3.4 = False
+isInfinite 1.1754944e-38 = False
+isInfinite 3.4028235e38 = False
+
+
+*********************************
+Negative Infinity: Float
+
+isNegInfinite 0.0 = False
+isNegInfinite 0.0 = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite Infinity = False
+isNegInfinite NaN = False
+isNegInfinite 0.0 = False
+isNegInfinite Infinity = False
+isNegInfinite 1.0e-45 = False
+isNegInfinite 1.1754944e-38 = False
+isNegInfinite 2.9802326e-8 = False
+isNegInfinite 0.11 = False
+isNegInfinite 0.1 = False
+isNegInfinite -3.4 = False
+isNegInfinite 1.1754944e-38 = False
+isNegInfinite 3.4028235e38 = False
+
+
+*********************************
+NaN: Float
+
+isNaN 0.0 = False
+isNaN 0.0 = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN Infinity = False
+isNaN NaN = True
+isNaN 0.0 = False
+isNaN Infinity = False
+isNaN 1.0e-45 = False
+isNaN 1.1754944e-38 = False
+isNaN 2.9802326e-8 = False
+isNaN 0.11 = False
+isNaN 0.1 = False
+isNaN -3.4 = False
+isNaN 1.1754944e-38 = False
+isNaN 3.4028235e38 = False
+
+
+*********************************
+Negative zero: Float
+
+isNegativeZero 0.0 = False
+isNegativeZero 0.0 = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero Infinity = False
+isNegativeZero NaN = False
+isNegativeZero 0.0 = False
+isNegativeZero Infinity = False
+isNegativeZero 1.0e-45 = False
+isNegativeZero 1.1754944e-38 = False
+isNegativeZero 2.9802326e-8 = False
+isNegativeZero 0.11 = False
+isNegativeZero 0.1 = False
+isNegativeZero -3.4 = False
+isNegativeZero 1.1754944e-38 = False
+isNegativeZero 3.4028235e38 = False
+
+
+*********************************
+Positive zero: Float
+
+isPosZero 0.0 = True
+isPosZero 0.0 = True
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero Infinity = False
+isPosZero NaN = False
+isPosZero 0.0 = True
+isPosZero Infinity = False
+isPosZero 1.0e-45 = False
+isPosZero 1.1754944e-38 = False
+isPosZero 2.9802326e-8 = False
+isPosZero 0.11 = False
+isPosZero 0.1 = False
+isPosZero -3.4 = False
+isPosZero 1.1754944e-38 = False
+isPosZero 3.4028235e38 = False
+