shithub: MicroHs

Download patch

ref: 4392e63cb0e3c53e7c250ae44da1353da881cdc5
parent: 7b85121d0017aae0d76eb1ee8bc56d1be515ae01
parent: 2beef750fc1f958b3abb3b61509591b3dfd90455
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Feb 25 14:04:24 EST 2024

Merge branch 'master' into neweval

--- a/tests/FArith.hs
+++ b/tests/FArith.hs
@@ -4,22 +4,17 @@
 readDouble :: String -> Double
 readDouble = read
 
+-- Be careful about what constants we use here, so it works with both 32 and 64 bit floats.
+-- We only use values that can be represented exactly.
+
 list1 :: [Double]
-list1 = [-100.343241, -53.3248973, 0.0, 1.0, 1.23453523, 3243534.34534, 999.999]
+list1 = [-100.25::Double, -53.25::Double, 0.0::Double, 1.0::Double, 1.125::Double, 1.0e4::Double]
 
-list2 :: [Double]
-list2 = [-100.343241, -53.3248973, 0.0, 1.0, 1.23453523, 3243534.34534, 999.999, 1.2e13]
-
-divide :: Double -> Double -> Double
-divide x y = if y == 0.0 then 0.0 else x / y
-
 main :: IO ()
 main = do
-  putStrLn $ show [ op x y | x <- list1, y <- list2, op <- [(+), (-), (*), divide] ]
-  putStrLn $ show [ op x y | x <- list1, y <- list2, op <- [(==), (/=), (<), (<=), (>), (>=)] ]
-  putStrLn $ show [ x / y | x <- [2.234983, 1.232, 23.0::Double], y <- [1.0, 5.0, 10.0, 100.0]]
-  putStrLn $ show [ x / y | x <- [-2.234983, -1.232, -23.0::Double], y <- [1.0, -5.0, 10.0, -100.0]]
-  let str = readDouble "1.576"
-  putStrLn $ show str
+  putStrLn $ show [ op x y | x <- list1, y <- list1, op <- [(+), (-), (*)] ]
+  putStrLn $ show [ op x y | x <- list1, y <- list1, op <- [(==), (/=), (<), (<=), (>), (>=)] ]
+  putStrLn $ show [ x / y  | x <- list1, y <- [1.0::Double, -16.0::Double, 0.0625::Double]]
+  putStrLn $ show $ readDouble "1.625"
   putStrLn $ show $ 1.0 + readDouble "2.5"
-  putStrLn $ show $ map readDouble ["1.5e32", "1.25e-33"]
+  putStrLn $ show $ map readDouble ["1.5e4", "1.25e-5"]
--- a/tests/FArith.ref
+++ b/tests/FArith.ref
@@ -1,7 +1,6 @@
-[-200.686482,0.0,10068.76601438408,1.0,-153.6681383,-47.0183437,5350.79302107415,1.881733413108702,-100.343241,-100.343241,-0.0,0.0,-99.34324100000001,-101.343241,-100.343241,-100.343241,-99.10870577,-101.57777623,-123.8772661068804,-81.28017618419848,3243434.002099,-3243634.688581,-325466748.5062289,-3.093638923360364e-05,899.655759,-1100.342241,-100343.140656759,-0.1003433413433413,11999999999899.66,-12000000000100.34,-1204118892000000.0,-8.361936750000001e-12,-153.6681383,47.0183437,5350.79302107415,0.53142490484237,-106.6497946,0.0,2843.544672055548,1.0,-53.3248973,-53.3248973,-0.0,0.0,-52.3248973,-54.3248973,-53.3248973,-53.3248973,-52.09036207,-54.55943253,-65.83146435298188,-43.19430989425875,3243481.0204427,-3243587.6702373,-172961135.8542782,-1.644036770463433e-05,946.6741027,-1053.3238973,-53324.8439751027,-0.05332495062495063,11999999999946.68,-12000000000053.32,-639898767600000.0,-4.443741441666667e-12,-100.343241,100.343241,-0.0,-0.0,-53.3248973,53.3248973,-0.0,-0.0,0.0,0.0,0.0,0.0,1.0,-1.0,0.0,0.0,1.23453523,-1.23453523,0.0,0.0,3243534.34534,-3243534.34534,0.0,0.0,999.999,-999.999,0.0,0.0,12000000000000.0,-12000000000000.0,0.0,0.0,-99.34324100000001,101.343241,-100.343241,-0.009965793311380085,-52.3248973,54.3248973,-53.3248973,-0.01875296626215912,1.0,1.0,0.0,0.0,2.0,0.0,1.0,1.0,2.23453523,-0.2345352300000001,1.23453523,0.8100214361642801,3243535.34534,-3243533.34534,3243534.34534,3.083056609024981e-07,1000.999,-998.999,999.999,0.001000001000001,12000000000001.0,-11999999999999.0,12000000000000.0,8.333333333333334e-14,-99.10870577,101.57777623,-123.8772661068804,-0.01230312293779708,-52.09036207,54.55943253,-65.83146435298188,-0.02315119751763685,1.23453523,1.23453523,0.0,0.0,2.23453523,0.2345352300000001,1.23453523,1.23453523,2.46907046,0.0,1.524077234111153,1.0,3243535.57987523,-3243533.11080477,4004257.419037217,3.806141999925675e-07,1001.23353523,-998.76446477,1234.53399546477,0.001234536464536465,12000000000001.23,-11999999999998.77,14814422760000.0,1.028779358333333e-13,3243434.002099,3243634.688581,-325466748.5062289,-32324.39288402096,3243481.0204427,3243587.6702373,-172961135.8542782,-60825.89014831539,3243534.34534,3243534.34534,0.0,0.0,3243535.34534,3243533.34534,3243534.34534,3243534.34534,3243535.57987523,3243533.11080477,4004257.419037217,2627332.348660475,6487068.69068,0.0,10520515049400.18,1.0,3244534.34434,3242534.34634,3243531101.805655,3243.537588877589,12000003243534.35,-11999996756465.65,3.892241214408e+19,2.702945287783333e-07,899.655759,1100.342241,-100343.140656759,-9.965783345586773,946.6741027,1053.3238973,-53324.8439751027,-18.75294750919286,999.999,999.999,0.0,0.0,1000.999,998.999,999.999,999.999,1001.23353523,998.76446477,1234.53399546477,810.020626142844,3244534.34434,-3242534.34634,3243531101.805655,0.0003083053525968371,1999.998,0.0,999998.000001,1.0,12000000001000.0,-11999999999000.0,1.1999988e+16,8.333325e-11]
-[True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,False,False,True,True,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,True,True,False,False,True,False,False,True,False,True,False,True,True,True,False,False]
-[2.234983,0.4469966,0.2234983,0.02234983,1.232,0.2464,0.1232,0.01232,23.0,4.6,2.3,0.23]
-[-2.234983,0.4469966,-0.2234983,0.02234983,-1.232,0.2464,-0.1232,0.01232,-23.0,4.6,-2.3,0.23]
-1.576
+[-200.5,0.0,10050.0625,-153.5,-47.0,5338.3125,-100.25,-100.25,-0.0,-99.25,-101.25,-100.25,-99.125,-101.375,-112.78125,9899.75,-10100.25,-1002500.0,-153.5,47.0,5338.3125,-106.5,0.0,2835.5625,-53.25,-53.25,-0.0,-52.25,-54.25,-53.25,-52.125,-54.375,-59.90625,9946.75,-10053.25,-532500.0,-100.25,100.25,-0.0,-53.25,53.25,-0.0,0.0,0.0,0.0,1.0,-1.0,0.0,1.125,-1.125,0.0,10000.0,-10000.0,0.0,-99.25,101.25,-100.25,-52.25,54.25,-53.25,1.0,1.0,0.0,2.0,0.0,1.0,2.125,-0.125,1.125,10001.0,-9999.0,10000.0,-99.125,101.375,-112.78125,-52.125,54.375,-59.90625,1.125,1.125,0.0,2.125,0.125,1.125,2.25,0.0,1.265625,10001.125,-9998.875,11250.0,9899.75,10100.25,-1002500.0,9946.75,10053.25,-532500.0,10000.0,10000.0,0.0,10001.0,9999.0,10000.0,10001.125,9998.875,11250.0,20000.0,0.0,100000000.0]
+[True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True]
+[-100.25,6.265625,-1604.0,-53.25,3.328125,-852.0,0.0,-0.0,0.0,1.0,-0.0625,16.0,1.125,-0.0703125,18.0,10000.0,-625.0,160000.0]
+1.625
 3.5
-[1.5e+32,1.25e-33]
+[15000.0,1.25e-05]
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -33,9 +33,7 @@
 	$(TMHS) LocalPoly  && $(EVAL) > LocalPoly.out  && diff LocalPoly.ref LocalPoly.out
 	$(TMHS) Rank2      && $(EVAL) > Rank2.out      && diff Rank2.ref Rank2.out
 	$(TMHS) Catch      && $(EVAL) > Catch.out      && diff Catch.ref Catch.out
-# The FArith tests are currently not portable between 32 and 64 bits,
-# since Double is really Float on 32 bit platforms.
-#	$(TMHS) FArith     && $(EVAL) > FArith.out     && diff FArith.ref FArith.out
+	$(TMHS) FArith     && $(EVAL) > FArith.out     && diff FArith.ref FArith.out
 	$(TMHS) Infix      && $(EVAL) > Infix.out      && diff Infix.ref Infix.out
 	$(TMHS) Class      && $(EVAL) > Class.out      && diff Class.ref Class.out
 	$(TMHS) Eq         && $(EVAL) > Eq.out         && diff Eq.ref Eq.out
--