module Spec.Semiring ( testSemiring , testRing , testStar ) where import Hedgehog.Classes import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range testSemiring :: [(String, [Laws])] testSemiring = [ ("Bool", lawsBool) , ("Int", lawsInt) , ("Int8", lawsInt8) , ("Int16", lawsInt16) , ("Int32", lawsInt32) , ("Int64", lawsInt64) , ("Word", lawsWord) , ("Word8", lawsWord8) , ("Word16", lawsWord16) , ("Word32", lawsWord32) , ("Word64", lawsWord64) ] testRing :: [(String, [Laws])] testRing = [ ("Int", ringLawsInt) , ("Int8", ringLawsInt8) , ("Int16", ringLawsInt16) , ("Int32", ringLawsInt32) , ("Int64", ringLawsInt64) , ("Word", ringLawsWord) , ("Word8", ringLawsWord8) , ("Word16", ringLawsWord16) , ("Word32", ringLawsWord32) , ("Word64", ringLawsWord64) ] testStar :: [(String, [Laws])] testStar = [ ("Bool", starLawsBool) ] ranged :: (Bounded a, Num a) => (Range.Range a -> b) -> b ranged f = f Range.constantBounded lawsBool, starLawsBool :: [Laws] lawsBool = [semiringLaws Gen.bool] starLawsBool = [starLaws Gen.bool] lawsInt, lawsInt8, lawsInt16, lawsInt32, lawsInt64 :: [Laws] lawsInt = [semiringLaws (ranged Gen.int)] lawsInt8 = [semiringLaws (ranged Gen.int8)] lawsInt16 = [semiringLaws (ranged Gen.int16)] lawsInt32 = [semiringLaws (ranged Gen.int32)] lawsInt64 = [semiringLaws (ranged Gen.int64)] lawsWord, lawsWord8, lawsWord16, lawsWord32, lawsWord64 :: [Laws] lawsWord = [semiringLaws (ranged Gen.word)] lawsWord8 = [semiringLaws (ranged Gen.word8)] lawsWord16 = [semiringLaws (ranged Gen.word16)] lawsWord32 = [semiringLaws (ranged Gen.word32)] lawsWord64 = [semiringLaws (ranged Gen.word64)] ringLawsInt, ringLawsInt8, ringLawsInt16, ringLawsInt32, ringLawsInt64 :: [Laws] ringLawsInt = [ringLaws (ranged Gen.int)] ringLawsInt8 = [ringLaws (ranged Gen.int8)] ringLawsInt16 = [ringLaws (ranged Gen.int16)] ringLawsInt32 = [ringLaws (ranged Gen.int32)] ringLawsInt64 = [ringLaws (ranged Gen.int64)] ringLawsWord, ringLawsWord8, ringLawsWord16, ringLawsWord32, ringLawsWord64 :: [Laws] ringLawsWord = [ringLaws (ranged Gen.word)] ringLawsWord8 = [ringLaws (ranged Gen.word8)] ringLawsWord16 = [ringLaws (ranged Gen.word16)] ringLawsWord32 = [ringLaws (ranged Gen.word32)] ringLawsWord64 = [ringLaws (ranged Gen.word64)]