{-# LANGUAGE NoImplicitPrelude #-} module Test.Algebra.IntegralDomain where import Algebra.IntegralDomain (roundDown, roundUp, divUp, ) import Test.NumericPrelude.Utility (testUnit, ) import Test.QuickCheck (Testable, quickCheck, (==>), ) import qualified Test.HUnit as HUnit import NumericPrelude.Base as P import NumericPrelude.Numeric as NP test :: (Testable t) => (Integer -> t) -> IO () test = quickCheck tests :: HUnit.Test tests = HUnit.TestLabel "integral domain functions" $ HUnit.TestList $ map testUnit $ testList testList :: [(String, IO ())] testList = ("divMod", test $ \n m -> m/=0 ==> let (q,r) = divMod n m in n == q*m+r) : ("divRound", test $ \n m -> m/=0 ==> div n m * m == roundDown n m) : ("divUpRound", test $ \n m -> m/=0 ==> divUp n m * m == roundUp n m) : ("floorLimit", test $ \n m0 -> let m = 1 + abs m0 x = roundDown n m in n-m < x && x <=n) : ("floorCeiling", test $ \n m -> m/=0 ==> - roundDown n m == roundUp (-n) m) : []