Current section
Files
Jump to
Current section
Files
tests/Test/Data/Semiring.phi
module Test.Data.Semiring where
import Test.QuickCheck (TestGroup(..), TestResult, quickCheck)
import Prelude hiding (filter)
import Data.Semiring as SR
abs :: Float -> Float
abs x = if x < 0.0 then 0.0-x else x + 0.0
addTest :: Bool
addTest = (1 + 1 == 2) && (1.5 + 1.5 == 3.0)
mulTest :: Bool
mulTest = (33 * 44 == 1452) && (33.3 * 44.4 - 1478.52 < 0.0001)
addprop :: Int->Int->Int->Bool
addprop x y z = ((x + y) + z) == (x + (y + z))
&& (x + SR.zero == x) && (SR.zero + x == x)
addprop2 :: Float->Float->Float->Bool
addprop2 x y z = (((x + y) + z) - (x + (y + z)) < 0.0001)
&& (x + SR.zero == x) && (SR.zero + x == x)
mulProp :: Int->Int->Int->Bool
mulProp x y z = ((x * y) * z) == (x * (y * z))
&& (x * SR.zero == SR.zero) && (SR.zero * x == SR.zero)
&& (x * SR.one == x) && (SR.one * x == x)
mulProp2 :: Float->Float->Float->Bool
mulProp2 x y z = (abs(((x * y) * z) - (x * (y * z))) < 0.001)
&& (abs(x * SR.zero - SR.zero )< 0.001 && abs(SR.zero * x - SR.zero) < 0.001)
&& (abs(x * SR.one - x) < 0.001) && (abs(SR.one * x - x) < 0.001)
propDistInt :: Int->Int->Int->Bool
propDistInt x y z = (x * (y + z) == x * y + x * z)
propDistFloat :: Float->Float->Float->Bool
propDistFloat x y z = abs (x * (y + z) - (x * y + x * z)) < 0.0001
test :: TestGroup (Integer -> IO TestResult)
test = Exe [
quickCheck "addTest" addTest
,quickCheck "mulTest" mulTest
,quickCheck "addprop" addprop
,quickCheck "addprop2" addprop2
,quickCheck "mulProp" mulProp
--inaccuracy,quickCheck "mulProp2" mulProp2
,quickCheck "propDistInt" propDistInt
--inaccuracy ,quickCheck "propDistFloat" propDistFloat
]