module Main where

import Data.Int
import Data.Word

-- Test case for bug #5785. The cause of this was that the LLVM backend
-- converted all Int constants using (fromInteger :: Int) and so on 32bit a
-- Int64 or Word32 would be truncated to 32bit! value before printing out.
main :: IO ()
main = do
    -- first two should print as big numbers (as unsigned)
    print (-1 :: Word8)
    print (-1 :: Word16)
    print (-1 :: Word32)
    print (-1 :: Word64)
    print (-1 :: Int8)
    print (-1 :: Int16)
    print (-1 :: Int32)
    print (-1 :: Int64)

    -- only requires 32 bits (unsigned)
    print (2316287658 :: Word8)
    print (2316287658 :: Word16)
    print (2316287658 :: Word32)
    print (2316287658 :: Word64)
    print (2316287658 :: Int8)
    print (2316287658 :: Int16)
    print (2316287658 :: Int32)
    print (2316287658 :: Int64)

    -- this requires a 64 (unsigned) bit word to store correctly
    print (32342316287658 :: Word8)
    print (32342316287658 :: Word16)
    print (32342316287658 :: Word32)
    print (32342316287658 :: Word64)
    print (32342316287658 :: Int8)
    print (32342316287658 :: Int16)
    print (32342316287658 :: Int32)
    print (32342316287658 :: Int64)

