summaryrefslogtreecommitdiff
path: root/testsuite/tests/numeric/should_run/numrun014.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/numeric/should_run/numrun014.hs')
-rw-r--r--testsuite/tests/numeric/should_run/numrun014.hs211
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)
+