genvalidity-hspec-cereal 0.2.0.4 → 1.0.0.0
raw patch · 6 files changed
+93/−79 lines, 6 filesdep ~genvaliditydep ~genvalidity-propertysetup-changedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: genvalidity, genvalidity-property
API changes (from Hackage documentation)
- Test.Validity.Cereal: serializeSpecOnValid :: forall a. (Show a, Eq a, Typeable a, GenValid a, Serialize a) => Spec
- Test.Validity.Cereal: serializeSpec :: forall a. (Show a, Eq a, Typeable a, GenUnchecked a, Serialize a) => Spec
+ Test.Validity.Cereal: serializeSpec :: forall a. (Show a, Eq a, Typeable a, GenValid a, Serialize a) => Spec
Files
- CHANGELOG.md +23/−0
- LICENSE +1/−1
- Setup.hs +0/−3
- genvalidity-hspec-cereal.cabal +9/−8
- src/Test/Validity/Cereal.hs +54/−60
- test/Test/Validity/CerealSpec.hs +6/−7
+ CHANGELOG.md view
@@ -0,0 +1,23 @@+# Changelog++## [1.0.0.0] - 2021-11-20++* Compatibility with `genvalidity >= 1.0.0.0`+* Renamed every combinator that ends in `OnValid` (or similar) to not have that suffix anymore.++### Removed++* Every combinator that relates to unchecked or invalid values.++## [0.3.0.4] - 2020-02-10++### Changed++* Removed the doctests+* Improved the cabal file++## [0.2.0.3] - 2018-10-07++### Changed++* Compatibility with validity >=0.9, genvalidity >=0.7 and genvalidity-property >=0.3
LICENSE view
@@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016-2020 Tom Sydney Kerckhove+Copyright (c) 2016-2021 Tom Sydney Kerckhove Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal
− Setup.hs
@@ -1,3 +0,0 @@-import Distribution.Simple--main = defaultMain
genvalidity-hspec-cereal.cabal view
@@ -1,23 +1,24 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.33.0.+-- This file has been generated from package.yaml by hpack version 0.34.4. -- -- see: https://github.com/sol/hpack------ hash: b9b98f1c3119e96c7122101d2a7f662a49b2c0cbfb7019b7cff86555785ea557 name: genvalidity-hspec-cereal-version: 0.2.0.4+version: 1.0.0.0 synopsis: Standard spec's for cereal-related instances category: Testing homepage: http://cs-syd.eu bug-reports: https://github.com/NorfairKing/validity/issues author: Tom Sydney Kerckhove maintainer: syd@cs-syd.eu-copyright: Copyright: (c) 2016-2020 Tom Sydney Kerckhove+copyright: Copyright: (c) 2016-2021 Tom Sydney Kerckhove license: MIT license-file: LICENSE build-type: Simple+extra-source-files:+ LICENSE+ CHANGELOG.md source-repository head type: git@@ -36,7 +37,7 @@ , base >=4.9 && <=5 , cereal , deepseq- , genvalidity >=0.5+ , genvalidity >=1.0 , genvalidity-hspec >=0.6 , hspec default-language: Haskell2010@@ -54,9 +55,9 @@ QuickCheck , base >=4.9 && <=5 , cereal- , genvalidity >=0.7+ , genvalidity , genvalidity-hspec-cereal- , genvalidity-property >=0.3+ , genvalidity-property , hspec , validity >=0.9 default-language: Haskell2010
src/Test/Validity/Cereal.hs view
@@ -1,25 +1,24 @@+{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-}-{-# LANGUAGE AllowAmbiguousTypes #-} -- | Standard test `Spec`s and raw `Property`s for `Serialize` instances. -- -- You will need @TypeApplications@ to use these. module Test.Validity.Cereal- ( serializeSpecOnValid- , serializeSpec- , serializeSpecOnArbitrary- , serializeSpecOnGen- , neverFailsToEncodeOnGen- , encodeAndDecodeAreInversesOnGen- ) where--import Data.GenValidity+ ( serializeSpec,+ serializeSpecOnArbitrary,+ serializeSpecOnGen,+ neverFailsToEncodeOnGen,+ encodeAndDecodeAreInversesOnGen,+ )+where import Control.DeepSeq (deepseq) import Control.Exception (evaluate)-import qualified Data.Serialize as Serialize+import Data.GenValidity import Data.Serialize (Serialize)+import qualified Data.Serialize as Serialize import Data.Typeable import Test.Hspec import Test.QuickCheck@@ -29,21 +28,12 @@ -- -- Example usage: ----- > serializeSpecOnValid @Double-serializeSpecOnValid ::- forall a. (Show a, Eq a, Typeable a, GenValid a, Serialize a)- => Spec-serializeSpecOnValid = serializeSpecOnGen (genValid @a) "valid" shrinkValid---- | Standard test spec for properties of 'Serialize'-related functions for unchecked values------ Example usage:--- -- > serializeSpec @Int serializeSpec ::- forall a. (Show a, Eq a, Typeable a, GenUnchecked a, Serialize a)- => Spec-serializeSpec = serializeSpecOnGen (genUnchecked @a) "unchecked" shrinkUnchecked+ forall a.+ (Show a, Eq a, Typeable a, GenValid a, Serialize a) =>+ Spec+serializeSpec = serializeSpecOnGen (genValid @a) "valid" shrinkValid -- | Standard test spec for properties of 'Serialize'-related functions for arbitrary values --@@ -51,8 +41,9 @@ -- -- > serializeSpecOnArbitrary @Int serializeSpecOnArbitrary ::- forall a. (Show a, Eq a, Typeable a, Arbitrary a, Serialize a)- => Spec+ forall a.+ (Show a, Eq a, Typeable a, Arbitrary a, Serialize a) =>+ Spec serializeSpecOnArbitrary = serializeSpecOnGen (arbitrary @a) "arbitrary" shrink -- | Standard test spec for properties of 'Serialize'-related functions for a given generator (and a name for that generator).@@ -61,56 +52,59 @@ -- -- > serializeSpecOnGen (genListOf $ pure 'a') "sequence of 'a's" serializeSpecOnGen ::- forall a. (Show a, Eq a, Typeable a, Serialize a)- => Gen a- -> String- -> (a -> [a])- -> Spec+ forall a.+ (Show a, Eq a, Typeable a, Serialize a) =>+ Gen a ->+ String ->+ (a -> [a]) ->+ Spec serializeSpecOnGen gen genname s =- parallel $ do- let name = nameOf @a- describe ("Serialize " ++ name ++ " (" ++ genname ++ ")") $ do- describe ("encode :: " ++ name ++ " -> Data.ByteString.ByteString") $- it- (unwords- [ "never fails to encode a"- , "\"" ++ genname- , name ++ "\""- ]) $- neverFailsToEncodeOnGen gen s- describe ("decode :: " ++ name ++ " -> Data.ByteString.ByteString") $- it- (unwords- [ "ensures that encode and decode are inverses for"- , "\"" ++ genname- , name ++ "\"" ++ "'s"- ]) $- encodeAndDecodeAreInversesOnGen gen s+ parallel $ do+ let name = nameOf @a+ describe ("Serialize " ++ name ++ " (" ++ genname ++ ")") $ do+ describe ("encode :: " ++ name ++ " -> Data.ByteString.ByteString") $+ it+ ( unwords+ [ "never fails to encode a",+ "\"" ++ genname,+ name ++ "\""+ ]+ )+ $ neverFailsToEncodeOnGen gen s+ describe ("decode :: " ++ name ++ " -> Data.ByteString.ByteString") $+ it+ ( unwords+ [ "ensures that encode and decode are inverses for",+ "\"" ++ genname,+ name ++ "\"" ++ "'s"+ ]+ )+ $ encodeAndDecodeAreInversesOnGen gen s -- | -- -- prop> neverFailsToEncodeOnGen @Bool arbitrary shrink--- prop> neverFailsToEncodeOnGen @Bool genUnchecked shrinkUnchecked -- prop> neverFailsToEncodeOnGen @Bool genValid shrinkValid+-- prop> neverFailsToEncodeOnGen @Bool genValid shrinkValid -- prop> neverFailsToEncodeOnGen @Int arbitrary shrink--- prop> neverFailsToEncodeOnGen @Int genUnchecked shrinkUnchecked -- prop> neverFailsToEncodeOnGen @Int genValid shrinkValid+-- prop> neverFailsToEncodeOnGen @Int genValid shrinkValid neverFailsToEncodeOnGen ::- (Show a, Serialize a) => Gen a -> (a -> [a]) -> Property+ (Show a, Serialize a) => Gen a -> (a -> [a]) -> Property neverFailsToEncodeOnGen gen s =- forAllShrink gen s $ \(a :: a) ->- evaluate (deepseq (Serialize.encode a) ()) `shouldReturn` ()+ forAllShrink gen s $ \(a :: a) ->+ evaluate (deepseq (Serialize.encode a) ()) `shouldReturn` () -- | -- -- prop> encodeAndDecodeAreInversesOnGen @Bool arbitrary shrink--- prop> encodeAndDecodeAreInversesOnGen @Bool genUnchecked shrinkUnchecked -- prop> encodeAndDecodeAreInversesOnGen @Bool genValid shrinkValid+-- prop> encodeAndDecodeAreInversesOnGen @Bool genValid shrinkValid -- prop> encodeAndDecodeAreInversesOnGen @Int arbitrary shrink--- prop> encodeAndDecodeAreInversesOnGen @Int genUnchecked shrinkUnchecked -- prop> encodeAndDecodeAreInversesOnGen @Int genValid shrinkValid+-- prop> encodeAndDecodeAreInversesOnGen @Int genValid shrinkValid encodeAndDecodeAreInversesOnGen ::- (Show a, Eq a, Serialize a) => Gen a -> (a -> [a]) -> Property+ (Show a, Eq a, Serialize a) => Gen a -> (a -> [a]) -> Property encodeAndDecodeAreInversesOnGen gen s =- forAllShrink gen s $ \(a :: a) ->- Serialize.decode (Serialize.encode a) `shouldBe` Right a+ forAllShrink gen s $ \(a :: a) ->+ Serialize.decode (Serialize.encode a) `shouldBe` Right a
test/Test/Validity/CerealSpec.hs view
@@ -2,15 +2,14 @@ module Test.Validity.CerealSpec where -import Test.Hspec- import Data.GenValidity+import Test.Hspec import Test.Validity.Cereal spec :: Spec spec = do- serializeSpecOnGen (genListOf $ pure 'a') "sequence of 'a's" (const [])- -- serializeSpec @Double DOES NOT HOLD- serializeSpecOnValid @Rational- serializeSpec @Int- serializeSpecOnArbitrary @Int+ serializeSpecOnGen (genListOf $ pure 'a') "sequence of 'a's" (const [])+ -- serializeSpec @Double DOES NOT HOLD+ serializeSpec @Rational+ serializeSpec @Int+ serializeSpecOnArbitrary @Int