genvalidity 0.5.0.0 → 0.5.0.1
raw patch · 2 files changed
+75/−2 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Data.GenValidity: genSplit5 :: Int -> Gen (Int, Int, Int, Int, Int)
+ Data.GenValidity: instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b, Data.GenValidity.GenInvalid c, Data.GenValidity.GenInvalid d, Data.GenValidity.GenInvalid e) => Data.GenValidity.GenInvalid (a, b, c, d, e)
+ Data.GenValidity: instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b, Data.GenValidity.GenUnchecked c, Data.GenValidity.GenUnchecked d, Data.GenValidity.GenUnchecked e) => Data.GenValidity.GenUnchecked (a, b, c, d, e)
+ Data.GenValidity: instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b, Data.GenValidity.GenValid c, Data.GenValidity.GenValid d, Data.GenValidity.GenValid e) => Data.GenValidity.GenValid (a, b, c, d, e)
Files
- genvalidity.cabal +2/−2
- src/Data/GenValidity.hs +73/−0
genvalidity.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 44ca0d7036af5c0a3fb7191edbe25a916909be1094ab9036589bc8bb76b7609b+-- hash: 6b2dfb29109026a30275df0b6424310c9d43d7f09a648f4c701c0e366fa2de9c name: genvalidity-version: 0.5.0.0+version: 0.5.0.1 synopsis: Testing utilities for the validity library description: Note: There are companion instance packages for this library: .
src/Data/GenValidity.hs view
@@ -279,6 +279,69 @@ return (a, b, c, d) ] +instance (GenUnchecked a, GenUnchecked b, GenUnchecked c, GenUnchecked d, GenUnchecked e) =>+ GenUnchecked (a, b, c, d, e) where+ genUnchecked =+ sized $ \n -> do+ (r, s, t, u, v) <- genSplit5 n+ a <- resize r genUnchecked+ b <- resize s genUnchecked+ c <- resize t genUnchecked+ d <- resize u genUnchecked+ e <- resize v genUnchecked+ return (a, b, c, d, e)++instance (GenValid a, GenValid b, GenValid c, GenValid d, GenValid e) =>+ GenValid (a, b, c, d, e) where+ genValid =+ sized $ \n -> do+ (r, s, t, u, v) <- genSplit5 n+ a <- resize r genValid+ b <- resize s genValid+ c <- resize t genValid+ d <- resize u genValid+ e <- resize v genValid+ return (a, b, c, d, e)++-- | This instance ensures that the generated triple contains at least one invalid element. The other two are unchecked.+instance (GenInvalid a, GenInvalid b, GenInvalid c, GenInvalid d, GenInvalid e) =>+ GenInvalid (a, b, c, d, e) where+ genInvalid =+ sized $ \n -> do+ (r, s, t, u, v) <- genSplit5 n+ oneof+ [ do a <- resize r genInvalid+ b <- resize s genUnchecked+ c <- resize t genUnchecked+ d <- resize u genUnchecked+ e <- resize v genUnchecked+ return (a, b, c, d, e)+ , do a <- resize r genUnchecked+ b <- resize s genInvalid+ c <- resize t genUnchecked+ d <- resize u genUnchecked+ e <- resize v genUnchecked+ return (a, b, c, d, e)+ , do a <- resize r genUnchecked+ b <- resize s genUnchecked+ c <- resize t genInvalid+ d <- resize u genUnchecked+ e <- resize v genUnchecked+ return (a, b, c, d, e)+ , do a <- resize r genUnchecked+ b <- resize s genUnchecked+ c <- resize t genUnchecked+ d <- resize u genInvalid+ e <- resize v genUnchecked+ return (a, b, c, d, e)+ , do a <- resize r genUnchecked+ b <- resize s genUnchecked+ c <- resize t genUnchecked+ d <- resize u genUnchecked+ e <- resize v genInvalid+ return (a, b, c, d, e)+ ]+ instance GenUnchecked a => GenUnchecked (Maybe a) where genUnchecked = oneof [pure Nothing, Just <$> genUnchecked] @@ -498,6 +561,16 @@ (a, b) <- genSplit y (c, d) <- genSplit z return (a, b, c, d)++-- | 'genSplit5 a' generates a quadruple '(b, c, d, e, f)' such that 'b + c + d + e + f' equals 'a'.+genSplit5 :: Int -> Gen (Int, Int, Int, Int, Int)+genSplit5 n+ | n < 0 = pure (0, 0, 0, 0, 0)+ | otherwise = do+ (y, z) <- genSplit n+ (a, b, c) <- genSplit3 y+ (d, e) <- genSplit z+ return (a, b, c, d, e) -- | 'arbPartition n' generates a list 'ls' such that 'sum ls' equals 'n'. arbPartition :: Int -> Gen [Int]