module Main where import Data.Decimal import Data.Ratio import Test.HUnit import Test.QuickCheck conf :: Args conf = stdArgs {maxSuccess = 1000} main :: IO () main = do putStrLn "QuickCheck Data.Decimal:" putStr " * prop_readShow " quickCheckWith conf $ prop_readShow putStr " * prop_readShowPrecision " quickCheckWith conf $ prop_readShowPrecision putStr " * prop_fromIntegerZero " quickCheckWith conf $ prop_fromIntegerZero putStr " * prop_increaseDecimals " quickCheckWith conf $ prop_increaseDecimals putStr " * prop_decreaseDecimals " quickCheckWith conf $ prop_decreaseDecimals putStr " * prop_inverseAdd " quickCheckWith conf $ prop_inverseAdd putStr " * prop_repeatedAdd " quickCheckWith conf $ prop_repeatedAdd putStr " * prop_divisionParts " quickCheckWith conf $ prop_divisionParts putStr " * prop_divisionUnits " quickCheckWith conf $ prop_divisionUnits putStr " * prop_allocateParts " quickCheckWith conf $ prop_allocateParts putStr " * prop_allocateUnits " quickCheckWith conf $ prop_allocateUnits putStr " * prop_abs " quickCheckWith conf $ prop_abs putStr " * prop_signum " quickCheckWith conf $ prop_signum putStrLn "Point tests:" _ <- runTestTT $ TestList [ TestCase $ assertEqual "pi to 3dp" (Decimal 3 3142 :: Decimal) (realFracToDecimal 3 (pi :: Double)), TestCase $ assertEqual "pi to 2dp" (Decimal 2 314 :: Decimal) (realFracToDecimal 2 (pi :: Double)), TestCase $ assertEqual "100*pi to 2dp" (Decimal 2 31416 :: Decimal) (realFracToDecimal 2 (100 * pi :: Double)), TestCase $ assertEqual "1.0 * pi" (Decimal 1 31 :: Decimal) (Decimal 1 10 *. (pi :: Double)), TestCase $ assertEqual "1.23 * pi" (Decimal 2 386 :: Decimal) (Decimal 2 123 *. (pi :: Double)), TestCase $ assertEqual "Decimal to DecimalRaw Int" (Decimal 2 123 :: DecimalRaw Int) (decimalConvert (Decimal 2 123 :: Decimal)), TestCase $ assertEqual "1.234 to rational" (toRational (Decimal 3 1234 :: Decimal)) (1234 % 1000) ] putStrLn "Tests completed."