packages feed

Decimal-0.1.0: tests/Main.hs

module Main where

import Data.Decimal
import Data.Ratio
import Test.HUnit
import Test.QuickCheck


conf :: Config
conf = defaultConfig { configMaxTest = 1000, configMaxFail = 10000 }


main :: IO ()
main = do
  putStrLn "QuickCheck Data.Decimal:"
  putStr "     * prop_readShow           "
  check conf $ prop_readShow
  putStr "     * prop_readShowPrecision  "
  check conf $ prop_readShowPrecision
  putStr "     * prop_fromIntegerZero    "
  check conf $ prop_fromIntegerZero
  putStr "     * prop_increaseDecimals   "
  check conf $ prop_increaseDecimals
  putStr "     * prop_decreaseDecimals   "
  check conf $ prop_decreaseDecimals
  putStr "     * prop_inverseAdd         "
  check conf $ prop_inverseAdd
  putStr "     * prop_repeatedAdd        "
  check conf $ prop_repeatedAdd
  putStr "     * prop_divisionParts      "
  check conf $ prop_divisionParts
  putStr "     * prop_divisionUnits      "
  check conf $ prop_divisionUnits
  putStr "     * prop_allocateParts      "
  check conf $ prop_allocateParts
  putStr "     * prop_allocateUnits      "
  check conf $ prop_allocateUnits
  putStr "     * prop_abs                "
  check conf $ prop_abs
  putStr "     * prop_signum             "
  check 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."