module Test.Data.Digit where

import Data.Digit
import Test.QuickCheck
import Test.Framework
import Test.Framework.Providers.QuickCheck2 (testProperty)

instance Arbitrary Digit where
  arbitrary = elements [d0 .. d9]

main ::
  IO ()
main =
  defaultMain digitTests

digitTests ::
  [Test]
digitTests =
  [
    testGroup "Digit"
      [
        testProperty "fold for Digit"         prop_fold
      , testProperty "fold for Digit with if" prop_if
      , testProperty "even/odd Digit"         prop_even_odd
      ]
  ]

prop_fold ::
  Digit
  -> Bool
prop_fold d =
  foldDigit d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d == d

prop_if ::
  Int
  -> Int
  -> Digit
  -> Bool
prop_if x y d =
  foldDigit if0 if1 if2 if3 if4 if5 if6 if7 if8 if9 d x y d == x

prop_even_odd ::
  Int
  -> Int
  -> Digit
  -> Bool
prop_even_odd x y d =
  ifEven x y d == ifOdd y x d