genvalidity-containers 0.1.0.2 → 0.2.0.0
raw patch · 8 files changed
+140/−36 lines, 8 filesdep +genvalidity-containersdep +genvalidity-hspecdep +hspecdep ~basedep ~genvaliditydep ~validityPVP ok
version bump matches the API change (PVP)
Dependencies added: genvalidity-containers, genvalidity-hspec, hspec
Dependency ranges changed: base, genvalidity, validity, validity-containers
API changes (from Hackage documentation)
- Data.GenValidity.Map: instance (GHC.Classes.Ord k, Data.GenValidity.GenValidity k, Data.GenValidity.GenValidity v) => Data.GenValidity.GenValidity (Data.Map.Base.Map k v)
- Data.GenValidity.Tree: instance Data.GenValidity.GenValidity a => Data.GenValidity.GenValidity (Data.Tree.Tree a)
+ Data.GenValidity.Map: instance (GHC.Classes.Ord k, Data.GenValidity.GenInvalid k, Data.GenValidity.GenInvalid v) => Data.GenValidity.GenInvalid (Data.Map.Base.Map k v)
+ Data.GenValidity.Map: instance (GHC.Classes.Ord k, Data.GenValidity.GenUnchecked k, Data.GenValidity.GenUnchecked v) => Data.GenValidity.GenUnchecked (Data.Map.Base.Map k v)
+ Data.GenValidity.Map: instance (GHC.Classes.Ord k, Data.GenValidity.GenValid k, Data.GenValidity.GenValid v) => Data.GenValidity.GenValid (Data.Map.Base.Map k v)
+ Data.GenValidity.Sequence: instance (GHC.Classes.Ord v, Data.GenValidity.GenInvalid v) => Data.GenValidity.GenInvalid (Data.Sequence.Seq v)
+ Data.GenValidity.Sequence: instance (GHC.Classes.Ord v, Data.GenValidity.GenUnchecked v) => Data.GenValidity.GenUnchecked (Data.Sequence.Seq v)
+ Data.GenValidity.Sequence: instance (GHC.Classes.Ord v, Data.GenValidity.GenValid v) => Data.GenValidity.GenValid (Data.Sequence.Seq v)
+ Data.GenValidity.Set: instance (GHC.Classes.Ord v, Data.GenValidity.GenInvalid v) => Data.GenValidity.GenInvalid (Data.Set.Base.Set v)
+ Data.GenValidity.Set: instance (GHC.Classes.Ord v, Data.GenValidity.GenUnchecked v) => Data.GenValidity.GenUnchecked (Data.Set.Base.Set v)
+ Data.GenValidity.Set: instance (GHC.Classes.Ord v, Data.GenValidity.GenValid v) => Data.GenValidity.GenValid (Data.Set.Base.Set v)
+ Data.GenValidity.Tree: instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenInvalid a) => Data.GenValidity.GenInvalid (Data.Tree.Tree a)
+ Data.GenValidity.Tree: instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GenUnchecked (Data.Tree.Tree a)
+ Data.GenValidity.Tree: instance Data.GenValidity.GenValid a => Data.GenValidity.GenValid (Data.Tree.Tree a)
Files
- genvalidity-containers.cabal +24/−6
- src/Data/GenValidity/Containers.hs +2/−0
- src/Data/GenValidity/Map.hs +23/−8
- src/Data/GenValidity/Sequence.hs +19/−0
- src/Data/GenValidity/Set.hs +19/−0
- src/Data/GenValidity/Tree.hs +29/−22
- test/Spec.hs +1/−0
- test/Test/Validity/ContainersSpec.hs +23/−0
genvalidity-containers.cabal view
@@ -1,5 +1,5 @@ name: genvalidity-containers-version: 0.1.0.2+version: 0.2.0.0 synopsis: GenValidity support for containers description: Please see README.md homepage: https://github.com/NorfairKing/validity#readme@@ -10,7 +10,6 @@ copyright: Copyright: (c) 2016 Tom Sydney Kerckhove category: Testing build-type: Simple--- extra-source-files: cabal-version: >=1.10 library@@ -19,14 +18,33 @@ Data.GenValidity.Containers , Data.GenValidity.Map , Data.GenValidity.Tree+ , Data.GenValidity.Sequence+ , Data.GenValidity.Set build-depends: base < 5- , validity- , validity-containers- , genvalidity- , containers , QuickCheck+ , containers+ , genvalidity >= 0.3 && < 0.4+ , validity >= 0.3 && < 0.4+ , validity-containers >= 0.1 && < 0.2 default-language: Haskell2010++test-suite genvalidity-containers-test+ type: exitcode-stdio-1.0+ main-is: Spec.hs+ other-modules:+ Test.Validity.ContainersSpec+ build-depends:+ base >=4.9 && <=5,+ containers,+ genvalidity,+ genvalidity-containers,+ genvalidity-hspec,+ hspec >= 2.2 && < 2.3+ default-language: Haskell2010+ hs-source-dirs: test/+ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall+ source-repository head type: git
src/Data/GenValidity/Containers.hs view
@@ -3,5 +3,7 @@ ) where import Data.GenValidity.Map as Containers ()+import Data.GenValidity.Sequence as Containers () import Data.GenValidity.Tree as Containers+import Data.GenValidity.Set as Containers ()
src/Data/GenValidity/Map.hs view
@@ -1,15 +1,30 @@ module Data.GenValidity.Map where -import Data.GenValidity-import Data.Validity.Map ()+import Data.GenValidity+import Data.Validity.Map ()+import Test.QuickCheck -import Data.Map (Map)-import qualified Data.Map as M+import Data.Map (Map)+import qualified Data.Map as M -instance (Ord k, GenValidity k, GenValidity v) => GenValidity (Map k v) where+instance (Ord k, GenUnchecked k, GenUnchecked v) =>+ GenUnchecked (Map k v) where genUnchecked = M.fromList <$> genUnchecked - genValid = M.fromList <$> genValid-- genInvalid = M.fromList <$> genInvalid+instance (Ord k, GenValid k, GenValid v) =>+ GenValid (Map k v) where+ genValid = M.fromList <$> genValid +instance (Ord k, GenInvalid k, GenInvalid v) =>+ GenInvalid (Map k v) where+ genInvalid =+ sized $ \n -> do+ (k, v, m) <- genSplit3 n+ let go g1 g2 = do+ key <- resize k g1+ val <- resize v g2+ rest <- resize m genUnchecked+ pure $ M.insert key val rest+ oneof $ [go genInvalid genUnchecked, go genUnchecked genInvalid]+ -- Note: M.fromList <$> genInvalid does not work because of this line in the Data.Map documentation:+ -- ' If the list contains more than one value for the same key, the last value for the key is retained.'
+ src/Data/GenValidity/Sequence.hs view
@@ -0,0 +1,19 @@+module Data.GenValidity.Sequence where++import Data.GenValidity+import Data.Validity.Sequence ()++import Data.Sequence (Seq)+import qualified Data.Sequence as S++instance (Ord v, GenUnchecked v) =>+ GenUnchecked (Seq v) where+ genUnchecked = S.fromList <$> genUnchecked++instance (Ord v, GenValid v) =>+ GenValid (Seq v) where+ genValid = S.fromList <$> genValid++instance (Ord v, GenInvalid v) =>+ GenInvalid (Seq v) where+ genInvalid = S.fromList <$> genInvalid
+ src/Data/GenValidity/Set.hs view
@@ -0,0 +1,19 @@+module Data.GenValidity.Set where++import Data.GenValidity+import Data.Validity.Set ()++import Data.Set (Set)+import qualified Data.Set as S++instance (Ord v, GenUnchecked v) =>+ GenUnchecked (Set v) where+ genUnchecked = S.fromList <$> genUnchecked++instance (Ord v, GenValid v) =>+ GenValid (Set v) where+ genValid = S.fromList <$> genValid++instance (Ord v, GenInvalid v) =>+ GenInvalid (Set v) where+ genInvalid = S.fromList <$> genInvalid
src/Data/GenValidity/Tree.hs view
@@ -1,35 +1,42 @@ module Data.GenValidity.Tree where -import Data.GenValidity-import Data.Validity.Tree ()+import Data.GenValidity+import Data.Validity.Tree () -import Test.QuickCheck+import Test.QuickCheck -import Data.Tree+import Data.Tree -instance GenValidity a => GenValidity (Tree a) where+instance GenUnchecked a =>+ GenUnchecked (Tree a) where genUnchecked = genTreeOf genUnchecked - genValid = genTreeOf genValid+instance GenValid a =>+ GenValid (Tree a) where+ genValid = genTreeOf genValid - -- | There should be at least one invalid element, either it's here or it's- -- further down the tree.- genInvalid = sized $ \n -> do- size <- upTo n- (a, b) <- genSplit size- oneof- [ Node <$> resize a genInvalid <*> resize b genUnchecked- , Node <$> resize a genUnchecked <*> resize b genInvalid- ]+-- | There should be at least one invalid element, either it's here or it's+-- further down the tree.+instance (GenUnchecked a, GenInvalid a) =>+ GenInvalid (Tree a)+ where+ genInvalid =+ sized $ \n -> do+ size <- upTo n+ (a, b) <- genSplit size+ oneof+ [ Node <$> resize a genInvalid <*> resize b genUnchecked+ , Node <$> resize a genUnchecked <*> resize b genInvalid+ ] -- | Generate a tree of values that are generated as specified. -- -- This takes the size parameter much better into account genTreeOf :: Gen a -> Gen (Tree a)-genTreeOf func = sized $ \n -> do- size <- upTo n- (a, b) <- genSplit size- value <- resize a func- forest <- resize b $ genListOf $ genTreeOf func- return $ Node value forest-+genTreeOf func =+ sized $ \n -> do+ size <- upTo n+ (a, b) <- genSplit size+ value <- resize a func+ forest <- resize b $ genListOf $ genTreeOf func+ return $ Node value forest
+ test/Spec.hs view
@@ -0,0 +1,1 @@+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
+ test/Test/Validity/ContainersSpec.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE TypeApplications #-}++module Test.Validity.ContainersSpec where++import Test.Hspec++import Data.GenValidity.Containers ()+import Data.Map (Map)+import Data.Sequence (Seq)+import Data.Set (Set)+import Data.Tree (Tree)+import Test.Validity.GenValidity++spec :: Spec+spec = do+ genValidSpec @(Set Int)+ genValiditySpec @(Set Double)+ genValidSpec @(Map Int Double)+ genValiditySpec @(Map Double Double)+ genValidSpec @(Tree Int)+ genValiditySpec @(Tree Double)+ genValidSpec @(Seq Int)+ genValiditySpec @(Seq Double)