packages feed

hscdio-0.1.0.0: test/Foreign/Libcdio/Sector/Test/Classes.hs

{-|
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