packages feed

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