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