diff options
Diffstat (limited to 'testsuite/tests/numeric/should_run/numrun014.hs')
-rw-r--r-- | testsuite/tests/numeric/should_run/numrun014.hs | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/testsuite/tests/numeric/should_run/numrun014.hs b/testsuite/tests/numeric/should_run/numrun014.hs new file mode 100644 index 0000000000..207e7663c0 --- /dev/null +++ b/testsuite/tests/numeric/should_run/numrun014.hs @@ -0,0 +1,211 @@ + +-- Test that we don't have rules (or othre optimisations) doing the +-- wrong thing for constant folding with Doubles. + +module Main (main) where + +zero :: Double +zero = 0 + +one :: Double +one = 1 + +nan :: Double +nan = 0 / 0 + +inf :: Double +inf = 1 / 0 + +neginf :: Double +neginf = -1 / 0 + +fzero :: Float +fzero = 0 + +fone :: Float +fone = 1 + +fnan :: Float +fnan = 0 / 0 + +finf :: Float +finf = 1 / 0 + +fneginf :: Float +fneginf = -1 / 0 + +main :: IO () +main = do putStrLn "=== Subtraction ===" + print (zero - zero) + print (zero - nan) + print (zero - inf) + print (zero - neginf) + print (nan - zero) + print (nan - nan) + print (nan - inf) + print (nan - neginf) + print (inf - zero) + print (inf - nan) + print (inf - inf) + print (inf - neginf) + print (neginf - zero) + print (neginf - nan) + print (neginf - inf) + print (neginf - neginf) + putStrLn "=== Addition ===" + print (zero + zero) + print (zero + nan) + print (zero + inf) + print (zero + neginf) + print (nan + zero) + print (nan + nan) + print (nan + inf) + print (nan + neginf) + print (inf + zero) + print (inf + nan) + print (inf + inf) + print (inf + neginf) + print (neginf + zero) + print (neginf + nan) + print (neginf + inf) + print (neginf + neginf) + putStrLn "=== Mutiplication ===" + print (zero * zero) + print (zero * one) + print (zero * nan) + print (zero * inf) + print (zero * neginf) + print (one * zero) + print (one * one) + print (one * nan) + print (one * inf) + print (one * neginf) + print (nan * zero) + print (nan * one) + print (nan * nan) + print (nan * inf) + print (nan * neginf) + print (inf * zero) + print (inf * one) + print (inf * nan) + print (inf * inf) + print (inf * neginf) + print (neginf * zero) + print (neginf * one) + print (neginf * nan) + print (neginf * inf) + print (neginf * neginf) + putStrLn "=== Division ===" + print (zero / zero) + print (zero / one) + print (zero / nan) + print (zero / inf) + print (zero / neginf) + print (one / zero) + print (one / one) + print (one / nan) + print (one / inf) + print (one / neginf) + print (nan / zero) + print (nan / one) + print (nan / nan) + print (nan / inf) + print (nan / neginf) + print (inf / zero) + print (inf / one) + print (inf / nan) + print (inf / inf) + print (inf / neginf) + print (neginf / zero) + print (neginf / one) + print (neginf / nan) + print (neginf / inf) + print (neginf / neginf) + + putStrLn "=== Subtraction ===" + print (fzero - fzero) + print (fzero - fnan) + print (fzero - finf) + print (fzero - fneginf) + print (fnan - fzero) + print (fnan - fnan) + print (fnan - finf) + print (fnan - fneginf) + print (finf - fzero) + print (finf - fnan) + print (finf - finf) + print (finf - fneginf) + print (fneginf - fzero) + print (fneginf - fnan) + print (fneginf - finf) + print (fneginf - fneginf) + putStrLn "=== Addition ===" + print (fzero + fzero) + print (fzero + fnan) + print (fzero + finf) + print (fzero + fneginf) + print (fnan + fzero) + print (fnan + fnan) + print (fnan + finf) + print (fnan + fneginf) + print (finf + fzero) + print (finf + fnan) + print (finf + finf) + print (finf + fneginf) + print (fneginf + fzero) + print (fneginf + fnan) + print (fneginf + finf) + print (fneginf + fneginf) + putStrLn "=== Mutiplication ===" + print (fzero * fzero) + print (fzero * fone) + print (fzero * fnan) + print (fzero * finf) + print (fzero * fneginf) + print (fone * fzero) + print (fone * fone) + print (fone * fnan) + print (fone * finf) + print (fone * fneginf) + print (fnan * fzero) + print (fnan * fone) + print (fnan * fnan) + print (fnan * finf) + print (fnan * fneginf) + print (finf * fzero) + print (finf * fone) + print (finf * fnan) + print (finf * finf) + print (finf * fneginf) + print (fneginf * fzero) + print (fneginf * fone) + print (fneginf * fnan) + print (fneginf * finf) + print (fneginf * fneginf) + putStrLn "=== Division ===" + print (fzero / fzero) + print (fzero / fone) + print (fzero / fnan) + print (fzero / finf) + print (fzero / fneginf) + print (fone / fzero) + print (fone / fone) + print (fone / fnan) + print (fone / finf) + print (fone / fneginf) + print (fnan / fzero) + print (fnan / fone) + print (fnan / fnan) + print (fnan / finf) + print (fnan / fneginf) + print (finf / fzero) + print (finf / fone) + print (finf / fnan) + print (finf / finf) + print (finf / fneginf) + print (fneginf / fzero) + print (fneginf / fone) + print (fneginf / fnan) + print (fneginf / finf) + print (fneginf / fneginf) + |