packages feed

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

{-|
Description:    

Copyright:      (c) 2019-2021 Sam May
License:        GPL-3.0-or-later
Maintainer:     ag@eitilt.life

Stability:      experimental
Portability:    portable
-}
module Foreign.Libcdio.Device.Test.Classes
    ( laws
    , genDriveCapabilityRead
    , genDriveCapabilityWrite
    , genDriveCapabilityMisc
    , genHardwareInfo
    , genDriverId
    , genDriverReturnCode
    , genSessionArg
    , genAccessMode
    ) 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 Foreign.Libcdio.Device

import Test.Libcdio.Property.Common


laws :: [LawsGroup]
laws =
    [ ("DriveCapabilityRead", map (\f -> f genDriveCapabilityRead)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        ]
    ), ("DriveCapabilityWrite", map (\f -> f genDriveCapabilityWrite)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        ]
    ), ("DriveCapabilityMisc", map (\f -> f genDriveCapabilityMisc)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        ]
    ), ("HardwareInfo", map (\f -> f genHardwareInfo)
        [ H.C.eqLaws
        , H.C.showLaws
        , H.C.showReadLaws
        , storableLaws'
        ]
    ), ("DriverId", map (\f -> f genDriverId)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        ]
    ), ("DriverReturnCode", map (\f -> f genDriverReturnCode)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        ]
    ), ("SessionArg", map (\f -> f genSessionArg)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        , storableLaws'
        ]
    ), ("AccessMode", map (\f -> f genAccessMode)
        [ H.C.eqLaws
        , ordLaws'
        , H.C.showLaws
        , H.C.showReadLaws
        , H.C.boundedEnumLaws
        , storableLaws'
        ]
    )]


genDriveCapabilityRead :: H.Gen DriveCapabilityRead
genDriveCapabilityRead = enumSparse

genDriveCapabilityWrite :: H.Gen DriveCapabilityWrite
genDriveCapabilityWrite = enumSparse

genDriveCapabilityMisc :: H.Gen DriveCapabilityMisc
genDriveCapabilityMisc = enumSparse

genHardwareInfo :: H.Gen HardwareInfo
genHardwareInfo = do
    --TODO: Test other string lengths
    v <- H.G.string (H.R.singleton $ fromIntegral vendorLength) H.G.ascii
    m <- H.G.string (H.R.singleton $ fromIntegral modelLength) H.G.ascii
    r <- H.G.string (H.R.singleton $ fromIntegral revisionLength) H.G.ascii
    return $ HardwareInfo
        { vendor = v
        , model = m
        , revision = r
        }

genDriverId :: H.Gen DriverId
genDriverId = enumSparse

genDriverReturnCode :: H.Gen DriverReturnCode
genDriverReturnCode = enumSparse

genSessionArg :: H.Gen SessionArg
genSessionArg = H.G.enumBounded

genAccessMode :: H.Gen AccessMode
genAccessMode = H.G.enumBounded