genvalidity-bytestring 0.4.0.0 → 0.5.0.0
raw patch · 3 files changed
+86/−42 lines, 3 filesdep ~genvalidityPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: genvalidity
API changes (from Hackage documentation)
- Data.GenValidity.ByteString: instance Data.GenValidity.GenUnchecked Data.ByteString.Internal.ByteString
- Data.GenValidity.ByteString: instance Data.GenValidity.GenUnchecked Data.ByteString.Lazy.Internal.ByteString
+ Data.GenValidity.ByteString: genTrulyUncheckedLazyByteString :: Gen ByteString
+ Data.GenValidity.ByteString: instance (TypeError ...) => Data.GenValidity.GenUnchecked Data.ByteString.Internal.ByteString
+ Data.GenValidity.ByteString: instance (TypeError ...) => Data.GenValidity.GenUnchecked Data.ByteString.Lazy.Internal.ByteString
+ Data.GenValidity.ByteString: instance Data.GenValidity.GenUnchecked Data.ByteString.Short.Internal.ShortByteString
+ Data.GenValidity.ByteString: instance Data.GenValidity.GenValid Data.ByteString.Short.Internal.ShortByteString
+ Data.GenValidity.ByteString: shrinkTrulyUncheckedLazyByteString :: ByteString -> [ByteString]
Files
- genvalidity-bytestring.cabal +4/−4
- src/Data/GenValidity/ByteString.hs +56/−38
- test/Data/GenValidity/ByteStringSpec.hs +26/−0
genvalidity-bytestring.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: a576909f691b01e569d7164556dc20d0f9e6ca5cac0b6db9bab76489fe3ef281+-- hash: c9985f1a13b131ff21c83bf08ae8c91ca6d91ad12183953fa103ea08618530ae name: genvalidity-bytestring-version: 0.4.0.0+version: 0.5.0.0 synopsis: GenValidity support for ByteString description: Please see README.md category: Testing@@ -16,7 +16,7 @@ author: Tom Sydney Kerckhove maintainer: syd.kerckhove@gmail.com, nick.van.den.broeck666@gmail.com-copyright: Copyright: (c) 2016-2018 Tom Sydney Kerckhove+copyright: Copyright: (c) 2016-2019 Tom Sydney Kerckhove license: MIT license-file: LICENSE build-type: Simple@@ -36,7 +36,7 @@ QuickCheck , base >=4.7 && <5 , bytestring- , genvalidity >=0.5+ , genvalidity >=0.8 , validity >=0.5 , validity-bytestring >=0.4 default-language: Haskell2010
src/Data/GenValidity/ByteString.hs view
@@ -1,6 +1,10 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE CPP #-}-+#if MIN_VERSION_base(4,9,0)+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE UndecidableInstances #-}+#endif module Data.GenValidity.ByteString where import Data.GenValidity@@ -14,25 +18,10 @@ import qualified Data.ByteString.Internal as SB import qualified Data.ByteString.Lazy as LB import qualified Data.ByteString.Lazy.Internal as LB--instance GenUnchecked SB.ByteString where- genUnchecked =- error $- unlines- [ "Data.GenValidity.ByteString.genUnchecked :: Strict.ByteString"- , "You probably do not want to use this."- , "You probably want to use 'genValid' instead."- , "See https://github.com/NorfairKing/validity/blob/master/docs/BYTESTRING.md"- ]- shrinkUnchecked =- error $- unlines- [ "Data.GenValidity.ByteString.shrinkUnchecked :: Strict.ByteString -> [Strict.ByteString]"- , "You probably do not want to use this."- , "You probably want to use 'shrinkValid' instead."- , "See https://github.com/NorfairKing/validity/blob/master/docs/BYTESTRING.md"- ]-+import qualified Data.ByteString.Short as Short+#if MIN_VERSION_base(4,9,0)+import GHC.TypeLits+#endif -- | -- -- > genValid = SB.pack <$> genValid@@ -40,7 +29,13 @@ instance GenValid SB.ByteString where genValid = SB.pack <$> genValid shrinkValid = fmap SB.pack . shrinkValid . SB.unpack-+#if MIN_VERSION_base(4,9,0)+-- If you see this error and want to learn more, have a look at docs/BYTESTRING.md+instance GHC.TypeLits.TypeError ('GHC.TypeLits.Text "The GenUnchecked Data.ByteString.ByteString is disabled:" 'GHC.TypeLits.:$$: 'GHC.TypeLits.Text "Do not instantiate GenUnchecked, instantiate GenValid instead") =>+ GenUnchecked SB.ByteString where+ genUnchecked = error "unreachable"+ shrinkUnchecked = error "unreachable"+#endif -- | WARNING: Unchecked ByteStrings are __seriously__ broken. -- -- The pointer may still point to something which is fine, but@@ -63,23 +58,46 @@ shrinkTrulyUncheckedStrictByteString (SB.PS p o l) = [SB.PS p o' l' | (o', l') <- shrinkUnchecked (o, l)] -instance GenUnchecked LB.ByteString where- genUnchecked =- sized $ \n ->- case n of- 0 -> pure LB.Empty- _ -> do- (a, b) <- genSplit n- sb <- resize a genUnchecked- lb <- resize b genUnchecked- pure $ LB.Chunk sb lb- shrinkUnchecked lb_ =- case lb_ of- LB.Empty -> []- (LB.Chunk sb lb) ->- LB.Empty :- [LB.Chunk sb' lb' | (sb', lb') <- shrinkUnchecked (sb, lb)]- instance GenValid LB.ByteString where genValid = LB.pack <$> genValid shrinkValid = fmap LB.pack . shrinkValid . LB.unpack+#if MIN_VERSION_base(4,9,0)+-- If you see this error and want to learn more, have a look at docs/BYTESTRING.md+instance GHC.TypeLits.TypeError ('GHC.TypeLits.Text "The GenUnchecked Data.ByteString.Lazy.ByteString is disabled:" 'GHC.TypeLits.:$$: 'GHC.TypeLits.Text "Do not instantiate GenUnchecked, instantiate GenValid instead") =>+ GenUnchecked LB.ByteString where+ genUnchecked = error "unreachable"+ shrinkUnchecked = error "unreachable"+#endif+-- | WARNING: Unchecked ByteStrings are __seriously__ broken.+--+-- See 'genTrulyUncheckedStrictByteString'+genTrulyUncheckedLazyByteString :: Gen LB.ByteString+genTrulyUncheckedLazyByteString =+ sized $ \n ->+ case n of+ 0 -> pure LB.Empty+ _ -> do+ (a, b) <- genSplit n+ sb <- resize a genTrulyUncheckedStrictByteString+ lb <- resize b genTrulyUncheckedLazyByteString+ pure $ LB.Chunk sb lb++shrinkTrulyUncheckedLazyByteString :: LB.ByteString -> [LB.ByteString]+shrinkTrulyUncheckedLazyByteString lb_ =+ case lb_ of+ LB.Empty -> []+ (LB.Chunk sb lb) ->+ LB.Empty :+ [ LB.Chunk sb' lb'+ | (sb', lb') <-+ shrinkTuple+ shrinkTrulyUncheckedStrictByteString+ shrinkTrulyUncheckedLazyByteString+ (sb, lb)+ ]++instance GenUnchecked Short.ShortByteString where+ genUnchecked = Short.pack <$> genValid+ shrinkUnchecked = fmap Short.pack . shrinkUnchecked . Short.unpack++instance GenValid Short.ShortByteString
test/Data/GenValidity/ByteStringSpec.hs view
@@ -12,6 +12,7 @@ import qualified Data.ByteString as SB (ByteString) import qualified Data.ByteString.Lazy as LB (ByteString)+import qualified Data.ByteString.Short as Short (ShortByteString) checkable :: (Validity t, Show t, NFData t) => Gen t -> SpecWith () checkable gen =@@ -38,3 +39,28 @@ showable (genValid :: Gen LB.ByteString) it "generates valid lazy bytestring" $ forAll (genValid :: Gen LB.ByteString) isValid+ describe "genUnchecked :: Gen Short.ShortByteString" $ do+ checkable (genUnchecked :: Gen Short.ShortByteString)+ showable (genUnchecked :: Gen Short.ShortByteString)+ describe "genValid :: Gen Short.ShortByteString" $ do+ checkable (genValid :: Gen Short.ShortByteString)+ showable (genValid :: Gen Short.ShortByteString)+ it "generates valid lazy bytestring" $+ forAll (genValid :: Gen Short.ShortByteString) isValid++-- Uncomment to test that the instances are poisoned+--+-- instance GenUnchecked SB.ByteString where+-- genUnchecked = undefined+-- shrinkUnchecked = undefined+--+-- instance GenUnchecked LB.ByteString where+-- genUnchecked = undefined+-- shrinkUnchecked = undefined+--+-- Uncomment to see the error message that you would get+--+-- data FooBar = FooBar SB.ByteString String+-- deriving (Show, Eq, Generic)+-- instance Validity FooBar+-- instance GenUnchecked FooBar