packages feed

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