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 56 57 58 59 60 61 62
|
module Spec.Semigroup
( testSemigroup
, testCommutativeSemigroup
, testExponentialSemigroup
, testIdempotentSemigroup
, testRectangularBandSemigroup
) where
import Hedgehog.Classes
import Data.Monoid (Sum(..))
import Data.Semigroup (Last(..))
import Hedgehog (Gen)
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
testSemigroup :: [(String, [Laws])]
testSemigroup =
[ ("Last", lawsLast)
, ("Maybe", lawsMaybe)
]
testCommutativeSemigroup :: [(String, [Laws])]
testCommutativeSemigroup =
[ ("Maybe", commutativeLawsMaybe)
]
testExponentialSemigroup :: [(String, [Laws])]
testExponentialSemigroup =
[ ("Last", exponentialLawsLast)
, ("Maybe", exponentialLawsMaybe)
]
testIdempotentSemigroup :: [(String, [Laws])]
testIdempotentSemigroup =
[ ("Last", idempotentLawsLast)
]
testRectangularBandSemigroup :: [(String, [Laws])]
testRectangularBandSemigroup =
[ ("Last", rectangularBandLawsLast)
]
genInteger :: Gen Integer
genInteger = Gen.integral (Range.linear (-3) 20)
lawsLast, exponentialLawsLast, idempotentLawsLast, rectangularBandLawsLast :: [Laws]
lawsLast = [semigroupLaws genLast]
exponentialLawsLast = [exponentialSemigroupLaws genLast]
idempotentLawsLast = [idempotentSemigroupLaws genLast]
rectangularBandLawsLast = [rectangularBandSemigroupLaws genLast]
genLast :: Gen (Last Integer)
genLast = Last <$> genInteger
lawsMaybe, commutativeLawsMaybe, exponentialLawsMaybe :: [Laws]
lawsMaybe = [semigroupLaws genMaybe]
commutativeLawsMaybe = [commutativeSemigroupLaws genMaybe]
exponentialLawsMaybe = [exponentialSemigroupLaws genMaybe]
genMaybe :: Gen (Maybe (Sum Integer))
genMaybe = Gen.maybe (Sum <$> genInteger)
|