summaryrefslogtreecommitdiff
path: root/testsuite/tests/codeGen/should_run/castFloatWord.hs
blob: 9c10aa84fc48534cd67ddcf8ffd971e4e8a3a78f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import Data.Bits
import GHC.Float
import GHC.Word
import Numeric

main :: IO ()
main = do
    putStrLn "Float"
    mapM_ print floats
    putStrLn "\nDouble"
    mapM_ print doubles
    putStrLn "\nWord32"
    mapM_ (printHex32 . castFloatToWord32) floats
    putStrLn "\nWord64"
    mapM_ (printHex64 . castDoubleToWord64) doubles
    putStrLn "Done!"

floats :: [Float]
floats = map castWord32ToFloat $ 0 : map (2^) [ 0 .. 31 ]

doubles :: [Double]
doubles = map castWord64ToDouble $ 0 : map (2^) [ 0 .. 63 ]

printHex32 :: Word32 -> IO ()
printHex32 w = putStrLn $ "0x" ++ showHex (0xffffffff .&. w) ""

printHex64 :: Word64 -> IO ()
printHex64 w = putStrLn $ "0x" ++ showHex w ""