1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
{-# language TypeApplications #-}
module Spec.Ord (testOrd) where
import Hedgehog.Classes
import Hedgehog (Gen)
import GHC.Natural
import qualified Hedgehog.Range as Range
import qualified Hedgehog.Gen as Gen
testOrd :: [(String, [Laws])]
testOrd =
[ ("Int", listInt)
, ("Int8", listInt8)
, ("Int16", listInt16)
, ("Int32", listInt32)
, ("Int64", listInt64)
, ("Word", listWord)
, ("Word8", listWord8)
, ("Word16", listWord16)
, ("Word32", listWord32)
, ("Word64", listWord64)
, ("Natural", listNatural)
, ("Pair", listPair)
]
ranged :: (Integral a) => (Range.Range a -> b) -> b
ranged f = f (Range.linear 0 100)
listInt, listInt8, listInt16, listInt32, listInt64 :: [Laws]
listInt = [ordLaws (ranged Gen.int)]
listInt8 = [ordLaws (ranged Gen.int8)]
listInt16 = [ordLaws (ranged Gen.int16)]
listInt32 = [ordLaws (ranged Gen.int32)]
listInt64 = [ordLaws (ranged Gen.int64)]
listWord, listWord8, listWord16, listWord32, listWord64 :: [Laws]
listWord = [ordLaws (ranged Gen.word)]
listWord8 = [ordLaws (ranged Gen.word8)]
listWord16 = [ordLaws (ranged Gen.word16)]
listWord32 = [ordLaws (ranged Gen.word32)]
listWord64 = [ordLaws (ranged Gen.word64)]
listNatural :: [Laws]
listNatural = [ordLaws (ranged @Natural Gen.integral)]
listPair :: [Laws]
listPair = [ordLaws (genPair (ranged Gen.int) (ranged Gen.int8))]
data Pair a b = Pair a b
deriving (Eq, Ord, Show)
genPair :: Gen a -> Gen b -> Gen (Pair a b)
genPair genA genB = Pair <$> genA <*> genB
|