genvalidity-containers 0.4.0.1 → 0.5.0.0
raw patch · 5 files changed
+83/−21 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.GenValidity.Containers: genTreeOf :: Gen a -> Gen (Tree a)
+ Data.GenValidity.Map: genStructurallyInvalidMap :: (Ord k, GenUnchecked k, GenUnchecked v) => Gen (Map k v)
Files
- genvalidity-containers.cabal +5/−4
- src/Data/GenValidity/Map.hs +20/−7
- src/Data/GenValidity/Set.hs +20/−8
- test/Test/Validity/Containers/MapSpec.hs +20/−1
- test/Test/Validity/Containers/SetSpec.hs +18/−1
genvalidity-containers.cabal view
@@ -1,18 +1,19 @@--- This file has been generated from package.yaml by hpack version 0.20.0.+-- This file has been generated from package.yaml by hpack version 0.28.2. -- -- see: https://github.com/sol/hpack ----- hash: 249d5502b09fcdc73906c58d9dd5cd6253b893a42200f4e1a7d2a3e4592be478+-- hash: 4ceb99a83aa476e2b06907a031bf2c38970c3dee854c26896294c39620f4f4cb name: genvalidity-containers-version: 0.4.0.1+version: 0.5.0.0 synopsis: GenValidity support for containers description: Please see README.md category: Testing homepage: https://github.com/NorfairKing/validity#readme bug-reports: https://github.com/NorfairKing/validity/issues author: Tom Sydney Kerckhove-maintainer: syd.kerckhove@gmail.com+maintainer: syd.kerckhove@gmail.com,+ nick.van.den.broeck666@gmail.com copyright: Copyright: (c) 2016-2018 Tom Sydney Kerckhove license: MIT license-file: LICENSE
src/Data/GenValidity/Map.hs view
@@ -4,10 +4,12 @@ module Data.GenValidity.Map ( genStructurallyValidMapOf , genStructurallyValidMapOfInvalidValues+#if MIN_VERSION_containers(0,5,9)+ , genStructurallyInvalidMap+#endif ) where #if !MIN_VERSION_base(4,8,0)-import Control.Applicative (pure)-import Data.Functor ((<$>))+import Control.Applicative (pure, (<$>), (<*>)) #endif import Data.GenValidity import Data.Validity.Map ()@@ -15,8 +17,11 @@ import Data.Map (Map) import qualified Data.Map as M+#if MIN_VERSION_containers(0,5,9) import qualified Data.Map.Internal as Internal+#endif +#if MIN_VERSION_containers(0,5,9) instance (Ord k, GenUnchecked k, GenUnchecked v) => GenUnchecked (Map k v) where genUnchecked = sized $ \n ->@@ -36,15 +41,22 @@ [ Internal.Bin s' k' a' m1' m2' | (s', k', a', m1', m2') <- shrinkUnchecked (s, k, a, m1, m2) ]-+#else+instance (Ord k, GenUnchecked k, GenUnchecked v) => GenUnchecked (Map k v) where+ genUnchecked = M.fromList <$> genUnchecked+ shrinkUnchecked = fmap M.fromList . shrinkUnchecked . M.toList+#endif instance (Ord k, GenValid k, GenValid v) => GenValid (Map k v) where genValid = M.fromList <$> genValid-+#if MIN_VERSION_containers(0,5,9) instance (Ord k, GenInvalid k, GenInvalid v) => GenInvalid (Map k v) where genInvalid = oneof [genStructurallyValidMapOfInvalidValues, genStructurallyInvalidMap]-+#else+instance (Ord k, GenInvalid k, GenInvalid v) => GenInvalid (Map k v) where+ genInvalid = genStructurallyValidMapOfInvalidValues+#endif genStructurallyValidMapOf :: Ord k => Gen (k, v) -> Gen (Map k v) genStructurallyValidMapOf g = sized $ \n ->@@ -72,11 +84,12 @@ (,) <$> genUnchecked <*> genUnchecked pure $ M.insert key val rest oneof [go genInvalid genUnchecked, go genUnchecked genInvalid]-+#if MIN_VERSION_containers(0,5,9) genStructurallyInvalidMap :: (Ord k, GenUnchecked k, GenUnchecked v) => Gen (Map k v) genStructurallyInvalidMap = do v <- genUnchecked if M.valid v- then scale (+ 1) genUnchecked+ then scale (+ 1) genStructurallyInvalidMap else pure v+#endif
src/Data/GenValidity/Set.hs view
@@ -1,13 +1,15 @@-{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -fno-warn-orphans #-} module Data.GenValidity.Set ( genStructurallyValidSetOf , genStructurallyValidSetOfInvalidValues+#if MIN_VERSION_containers(0,5,9) , genStructurallyInvalidSet+#endif ) where #if !MIN_VERSION_base(4,8,0)-import Data.Functor ((<$>))+import Control.Applicative ((<$>), pure) #endif import Data.GenValidity import Data.Validity.Set ()@@ -15,8 +17,10 @@ import Data.Set (Set) import qualified Data.Set as S+#if MIN_VERSION_containers(0,5,9) import qualified Data.Set.Internal as Internal-+#endif+#if MIN_VERSION_containers(0,5,9) instance (Ord v, GenUnchecked v) => GenUnchecked (Set v) where genUnchecked = sized $ \n ->@@ -35,15 +39,22 @@ [ Internal.Bin s' a' s1' s2' | (s', a', s1', s2') <- shrinkUnchecked (s, a, s1, s2) ]-+#else+instance (Ord v, GenUnchecked v) => GenUnchecked (Set v) where+ genUnchecked = S.fromList <$> genUnchecked+ shrinkUnchecked = fmap S.fromList . shrinkUnchecked . S.toList+#endif instance (Ord v, GenValid v) => GenValid (Set v) where genValid = S.fromList <$> genValid-+#if MIN_VERSION_containers(0,5,9) instance (Ord v, GenInvalid v) => GenInvalid (Set v) where genInvalid = oneof [genStructurallyValidSetOfInvalidValues, genStructurallyInvalidSet]-+#else+instance (Ord v, GenInvalid v) => GenInvalid (Set v) where+ genInvalid = genStructurallyValidSetOfInvalidValues+#endif genStructurallyValidSetOf :: Ord v => Gen v -> Gen (Set v) genStructurallyValidSetOf g = sized $ \n ->@@ -64,10 +75,11 @@ val <- resize v genInvalid rest <- resize m $ genStructurallyValidSetOf genUnchecked pure $ S.insert val rest-+#if MIN_VERSION_containers(0,5,9) genStructurallyInvalidSet :: (Ord v, GenUnchecked v) => Gen (Set v) genStructurallyInvalidSet = do v <- genUnchecked if S.valid v- then scale (+ 1) genUnchecked+ then scale (+ 1) genStructurallyInvalidSet else pure v+#endif
test/Test/Validity/Containers/MapSpec.hs view
@@ -1,14 +1,33 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE TypeApplications #-} module Test.Validity.Containers.MapSpec where import Test.Hspec -import Data.GenValidity.Map ()+import Data.GenValidity+import Data.GenValidity.Map import Data.Map (Map) import Test.Validity.GenValidity spec :: Spec spec = do+ describe "genStructurallyValidMapOf" $+ it "produces valid maps" $+ genGeneratesValid+ (genStructurallyValidMapOf @Double @Double genValid)+ (const [])+ describe "genStructurallyValidMapOfInvalidValues" $+ it "produces valid maps" $+ genGeneratesInvalid+ (genStructurallyValidMapOfInvalidValues @Double @Double)+ (const [])+#if MIN_VERSION_containers(0,5,9)+ describe "genStructurallyInvalidMap" $+ it "produces invalid maps" $+ genGeneratesInvalid+ (genStructurallyInvalidMap @Double @Double)+ (const [])+#endif genValidSpec @(Map Int Double) genValiditySpec @(Map Double Double)
test/Test/Validity/Containers/SetSpec.hs view
@@ -1,14 +1,31 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE TypeApplications #-} module Test.Validity.Containers.SetSpec where import Test.Hspec -import Data.GenValidity.Set ()+import Data.GenValidity+import Data.GenValidity.Set import Data.Set (Set) import Test.Validity.GenValidity spec :: Spec spec = do+ describe "genStructurallyValidSetOf" $+ it "produces valid sets" $+ genGeneratesValid+ (genStructurallyValidSetOf @Double genValid)+ (const [])+ describe "genStructurallyValidSetOfInvalidValues" $+ it "produces valid sets" $+ genGeneratesInvalid+ (genStructurallyValidSetOfInvalidValues @Double)+ (const [])+#if MIN_VERSION_containers(0,5,9)+ describe "genStructurallyInvalidSet" $+ it "produces invalid sets" $+ genGeneratesInvalid (genStructurallyInvalidSet @Double) (const [])+#endif genValidSpec @(Set Int) genValiditySpec @(Set Double)