{-| Description: Copyright: (c) 2019 Sam May License: GPL-3.0-or-later Maintainer: ag@eitilt.life Stability: experimental Portability: portable -} module Foreign.Libcdio.Sector.Test.Classes ( laws , genSubchannelData , genFlag , genLba , genLsn , genMsf ) where import qualified Hedgehog as H import qualified Hedgehog.Gen as H.G import qualified Hedgehog.Classes as H.C import qualified Hedgehog.Range as H.R import Foreign.Libcdio.Sector import Test.Libcdio.Property.Common laws :: [LawsGroup] laws = [ ("SubchannelData", map (\f -> f genSubchannelData) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws ] ), ("Flag", map (\f -> f genFlag) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws ] ), ("Lba", map (\f -> f genLba) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws , H.C.bitsLaws , storableLaws' ] ), ("Integral Lba", [H.C.integralLaws $ nonZero genLba] ), ("Lsn", map (\f -> f genLsn) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws , H.C.bitsLaws , storableLaws' ] ), ("Integral Lsn", [H.C.integralLaws $ nonZero genLsn] ), ("Msf", map (\f -> f genMsf) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws , storableLaws' ] )] genSubchannelData :: H.Gen SubchannelData genSubchannelData = H.G.enumBounded genFlag :: H.Gen Flag genFlag = enumSparse genLba :: H.Gen Lba genLba = H.G.integral (H.R.linearBounded :: H.R.Range Lba) genLsn :: H.Gen Lsn genLsn = H.G.integral (H.R.linearBounded :: H.R.Range Lsn) genMsf :: H.Gen Msf genMsf = H.G.enumBounded