numeric-prelude-0.3: test/Test/Algebra/IntegralDomain.hs
{-# 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) :
[]