{-| Description: Copyright: (c) 2019 Sam May License: GPL-3.0-or-later Maintainer: ag@eitilt.life Stability: experimental Portability: portable -} module Foreign.Libcdio.CdTypes.Test.Classes ( laws , genFilesystem , genFilesystemClass , genIsoAnalysis ) where import qualified Hedgehog as H import qualified Hedgehog.Gen as H.G import qualified Hedgehog.Range as H.R import qualified Hedgehog.Classes as H.C import qualified Data.Text as T import qualified Foreign.C.Types as C import Foreign.Libcdio.CdTypes import Test.Libcdio.Property.Common laws :: [LawsGroup] laws = [ ("Filesystem", map (\f -> f genFilesystem) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws ] ), ("FilesystemClass", map (\f -> f genFilesystemClass) [ H.C.eqLaws , ordLaws' , H.C.showLaws , H.C.showReadLaws , H.C.boundedEnumLaws ] ), ("IsoAnalysis", map (\f -> f genIsoAnalysis) [ H.C.eqLaws , H.C.showLaws , H.C.showReadLaws , storableLaws' ] )] genFilesystem :: H.Gen Filesystem genFilesystem = H.G.enumBounded genFilesystemClass :: H.Gen FilesystemClass genFilesystemClass = enumSparse genIsoAnalysis :: H.Gen IsoAnalysis genIsoAnalysis = do j <- H.G.maybe . H.G.word $ H.R.constant 1 3 l <- genSample s <- H.G.integral (H.R.linearBounded :: H.R.Range C.CUInt) v <- H.G.maybe $ H.G.element [ (1, 0) , (1, 1) , (1, 2) , (1, 50) , (2, 0) , (2, 1) , (2, 50) , (2, 60) ] return $ IsoAnalysis { jolietLevel = j , label = T.unpack l , fsSize = fromIntegral s , udfVersion = v }