packages feed

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) :
   []