From 4de89103b49ac4c6106002453ef11e787cb6881b Mon Sep 17 00:00:00 2001 From: sof Date: Thu, 16 Sep 1999 19:37:58 +0000 Subject: [PATCH] [project @ 1999-09-16 19:37:58 by sof] 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 | 3 +- ghc/tests/codeGen/should_run/cg044.hs | 15 +- ghc/tests/codeGen/should_run/cg044.stdout | 264 +++++++++++++++++++++++++++++ 3 files changed, 280 insertions(+), 2 deletions(-) create mode 100644 ghc/tests/codeGen/should_run/cg044.stdout diff --git a/ghc/tests/codeGen/should_run/Makefile b/ghc/tests/codeGen/should_run/Makefile index ce84d21..b712aba 100644 --- a/ghc/tests/codeGen/should_run/Makefile +++ b/ghc/tests/codeGen/should_run/Makefile @@ -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 diff --git a/ghc/tests/codeGen/should_run/cg044.hs b/ghc/tests/codeGen/should_run/cg044.hs index c5afa9d..aace857 100644 --- a/ghc/tests/codeGen/should_run/cg044.hs +++ b/ghc/tests/codeGen/should_run/cg044.hs @@ -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 index 0000000..0eb505e --- /dev/null +++ b/ghc/tests/codeGen/should_run/cg044.stdout @@ -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 + -- 1.7.10.4