diff options
Diffstat (limited to 'testsuite/tests/numeric/should_run/arith005.hs')
-rw-r--r-- | testsuite/tests/numeric/should_run/arith005.hs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/testsuite/tests/numeric/should_run/arith005.hs b/testsuite/tests/numeric/should_run/arith005.hs new file mode 100644 index 0000000000..179d7b33dc --- /dev/null +++ b/testsuite/tests/numeric/should_run/arith005.hs @@ -0,0 +1,60 @@ +-- !!! test RealFrac ops (ceiling/floor/etc.) on Floats/Doubles +-- +main = + putStr $ + unlines + [ -- just for fun, we show the floats to + -- exercise the code responsible. + 'A' : show (float_list :: [Float]) + , 'B' : show (double_list :: [Double]) + -- {Float,Double} inputs, {Int,Integer} outputs + , 'C' : show ((map ceiling small_float_list) :: [Int]) + , 'D' : show ((map ceiling float_list) :: [Integer]) + , 'E' : show ((map ceiling small_double_list) :: [Int]) + , 'F' : show ((map ceiling double_list) :: [Integer]) + , 'G' : show ((map floor small_float_list) :: [Int]) + , 'H' : show ((map floor float_list) :: [Integer]) + , 'I' : show ((map floor small_double_list) :: [Int]) + , 'J' : show ((map floor double_list) :: [Integer]) + , 'K' : show ((map truncate small_float_list) :: [Int]) + , 'L' : show ((map truncate float_list) :: [Integer]) + , 'M' : show ((map truncate small_double_list) :: [Int]) + , 'N' : show ((map truncate double_list) :: [Integer]) + , 'n' : show ((map round small_float_list) :: [Int]) + , 'O' : show ((map round float_list) :: [Integer]) + , 'P' : show ((map round small_double_list) :: [Int]) + , 'Q' : show ((map round double_list) :: [Integer]) + , 'R' : show ((map properFraction small_float_list) :: [(Int,Float)]) + , 'S' : show ((map properFraction float_list) :: [(Integer,Float)]) + , 'T' : show ((map properFraction small_double_list) :: [(Int,Double)]) + , 'U' : show ((map properFraction double_list) :: [(Integer,Double)]) + ] + where + -- these fit into an Int when truncated. Truncation when the + -- result does not fit into the target is undefined - not explicitly + -- so in Haskell 98, but that's the interpretation we've taken in GHC. + -- See bug #1254 + small_float_list :: [Float] + small_float_list = [ + 0.0, -0.0, 1.1, 2.8, 3.5, 4.5, -1.0000000001, -2.9999995, + -3.50000000001, -4.49999999999, 1000012.0, 123.456, 100.25, + 102.5, 0.0012, -0.00000012, 1.7e4, -1.7e-4, 0.15e-6, pi + ] + + float_list :: [Float] + float_list = small_float_list ++ [ + 1.18088e+11, 1.2111e+14 + ] + + -- these fit into an Int + small_double_list :: [Double] + small_double_list = [ + 0.0, -0.0, 1.1, 2.8, 3.5, 4.5, -1.0000000001, -2.9999995, + -3.50000000001, -4.49999999999, 1000012.0, 123.456, 100.25, + 102.5, 0.0012, -0.00000012, 1.7e4, -1.7e-4, 0.15e-6, pi + ] + + double_list :: [Double] + double_list = small_double_list ++ [ + 1.18088e+11, 1.2111e+14 + ] |