tomland-1.3.0.0: test/Test/Toml/Codec/Generic.hs
module Test.Toml.Codec.Generic
( genericSpec
) where
import Hedgehog (forAll, tripping, (===))
import Test.Hspec (Arg, Expectation, Spec, SpecWith, describe, it, parallel)
import Test.Hspec.Hedgehog (hedgehog)
import Test.Toml.Codec.SmallType (SmallType, genSmallType, smallTypeCodec)
import Toml.Codec.Code (decode, encode)
import Toml.Codec.Generic (genericCodec)
import Toml.Codec.Types (TomlCodec)
genericSpec :: Spec
genericSpec = parallel $ describe "Generic codecs tests" $ do
genericRoundtripSpec
genericDecodeSpec
genericRoundtripSpec :: SpecWith (Arg Expectation)
genericRoundtripSpec = it "genericDecode . genericEncode ≡ id" $ hedgehog $ do
smallType <- forAll genSmallType
tripping smallType (encode smallTypeGenericCodec) (decode smallTypeGenericCodec)
genericDecodeSpec :: SpecWith (Arg Expectation)
genericDecodeSpec = it "genericDecode . genericEncode ≡ decode . encode" $ hedgehog $ do
smallType <- forAll genSmallType
let genericDecode = decode smallTypeGenericCodec . encode smallTypeGenericCodec
let manualDecode = decode smallTypeCodec . encode smallTypeCodec
genericDecode smallType === manualDecode smallType
smallTypeGenericCodec :: TomlCodec SmallType
smallTypeGenericCodec = genericCodec