packages feed

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