packages feed

genvalidity-bytestring 0.2.0.2 → 0.3.0.0

raw patch · 3 files changed

+98/−25 lines, 3 filesdep +deepseqdep ~validity-bytestringPVP ok

version bump matches the API change (PVP)

Dependencies added: deepseq

Dependency ranges changed: validity-bytestring

API changes (from Hackage documentation)

+ Data.GenValidity.ByteString: instance Data.GenValidity.GenInvalid Data.ByteString.Lazy.Internal.ByteString
+ Data.GenValidity.ByteString: instance Data.GenValidity.GenUnchecked Data.ByteString.Lazy.Internal.ByteString
+ Data.GenValidity.ByteString: instance Data.GenValidity.GenValid Data.ByteString.Lazy.Internal.ByteString

Files

genvalidity-bytestring.cabal view
@@ -1,11 +1,13 @@--- This file has been generated from package.yaml by hpack version 0.28.2.+cabal-version: >= 1.10++-- This file has been generated from package.yaml by hpack version 0.29.6. -- -- see: https://github.com/sol/hpack ----- hash: bae4cdab53a618ad6823044913df2dcea8f67ce3356ac37fa1814bb673dd289f+-- hash: b00e12f8384f62c8e948f3eb83a4b6a8da6ff010b7a31c7b0a17362fa6e4b6fd  name:           genvalidity-bytestring-version:        0.2.0.2+version:        0.3.0.0 synopsis:       GenValidity support for ByteString description:    Please see README.md category:       Testing@@ -18,13 +20,16 @@ license:        MIT license-file:   LICENSE build-type:     Simple-cabal-version:  >= 1.10  source-repository head   type: git   location: https://github.com/NorfairKing/validity  library+  exposed-modules:+      Data.GenValidity.ByteString+  other-modules:+      Paths_genvalidity_bytestring   hs-source-dirs:       src   build-depends:@@ -33,16 +38,15 @@     , bytestring     , genvalidity >=0.5     , validity >=0.5-    , validity-bytestring >=0.3-  exposed-modules:-      Data.GenValidity.ByteString-  other-modules:-      Paths_genvalidity_bytestring+    , validity-bytestring >=0.4   default-language: Haskell2010  test-suite genvalidity-bytestring-test   type: exitcode-stdio-1.0   main-is: Spec.hs+  other-modules:+      Data.GenValidity.ByteStringSpec+      Paths_genvalidity_bytestring   hs-source-dirs:       test   ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -fno-warn-name-shadowing@@ -50,11 +54,9 @@       QuickCheck     , base     , bytestring+    , deepseq     , genvalidity     , genvalidity-bytestring     , genvalidity-hspec     , hspec-  other-modules:-      Data.GenValidity.ByteStringSpec-      Paths_genvalidity_bytestring   default-language: Haskell2010
src/Data/GenValidity/ByteString.hs view
@@ -5,16 +5,51 @@  import Data.GenValidity import Data.Validity.ByteString ()+import Test.QuickCheck #if !MIN_VERSION_base(4,8,0)+import Control.Applicative ((<*>), pure) import Data.Functor ((<$>)) #endif import qualified Data.ByteString as SB-import Data.ByteString (ByteString)+import qualified Data.ByteString.Internal as SB+import qualified Data.ByteString.Lazy as LB+import qualified Data.ByteString.Lazy.Internal as LB -instance GenUnchecked ByteString where-    genUnchecked = SB.pack <$> genUnchecked-    shrinkUnchecked = fmap SB.pack . shrinkUnchecked . SB.unpack+-- | WARNING: Unchecked ByteStrings are *seriously* broken.+-- The pointer may still point to something which is fine, but+-- the offset and length will most likely be complete nonsense.+-- This will most-likely lead to segfaults.+instance GenUnchecked SB.ByteString where+    genUnchecked = do+        ws <- genUnchecked+        -- TODO what do we do about the foreign pointer?+        let SB.PS p _ _ = SB.pack ws+        SB.PS p <$> genUnchecked <*> genUnchecked+    shrinkUnchecked (SB.PS p o l) =+        [SB.PS p o' l' | (o', l') <- shrinkUnchecked (o, l)] -instance GenValid ByteString+instance GenValid SB.ByteString where+    genValid = SB.pack <$> genValid+    shrinkValid = fmap SB.pack . shrinkValid . SB.unpack -instance GenInvalid ByteString+instance GenInvalid SB.ByteString++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.Empty = []+    shrinkUnchecked (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++instance GenInvalid LB.ByteString
test/Data/GenValidity/ByteStringSpec.hs view
@@ -2,19 +2,55 @@     ( spec     ) where +import Control.DeepSeq+ import Test.Hspec import Test.QuickCheck  import Data.GenValidity import Data.GenValidity.ByteString () -import Data.ByteString (ByteString)+import qualified Data.ByteString as SB (ByteString)+import qualified Data.ByteString.Lazy as LB (ByteString) +checkable :: (Validity t, Show t, NFData t) => Gen t -> SpecWith ()+checkable gen =+    it "generates bytestrings that can be checked for validity" $+    forAll gen $ \v ->+        case prettyValidation v of+            Left e -> deepseq e True+            Right v_ -> deepseq v_ True++showable :: Show t => Gen t -> SpecWith ()+showable gen =+    it "generates bytestrings that can be shown" $+    forAll gen $ \v -> deepseq (show v) True+ spec :: Spec spec = do-    describe "genValid" $-        it "generates valid bytestring" $-        forAll (genValid :: Gen ByteString) isValid-    describe "genUnchecked `suchThat` isValid" $-        it "generates valid bytestring" $-        forAll ((genUnchecked :: Gen ByteString) `suchThat` isValid) isValid+    describe "genUnchecked :: Gen SB.ByteString" $ do+        checkable (genUnchecked :: Gen SB.ByteString)+        -- showable (genUnchecked :: Gen SB.ByteString) DOES NOT HOLD+    describe "genValid :: Gen SB.ByteString" $ do+        checkable (genValid :: Gen SB.ByteString)+        showable (genValid :: Gen SB.ByteString)+        it "generates valid strict bytestring" $+            forAll (genValid :: Gen SB.ByteString) isValid+    describe "genInvalid :: Gen SB.ByteString" $ do+        checkable (genInvalid :: Gen SB.ByteString)+        -- showable (genInvalid :: Gen SB.ByteString) DOES NOT HOLD+        it "generates invalid strict bytestring" $+            forAll (genInvalid :: Gen SB.ByteString) isInvalid+    describe "genUnchecked :: Gen LB.ByteString" $ do+        checkable (genUnchecked :: Gen LB.ByteString)+        -- showable (genUnchecked :: Gen LB.ByteString) DOES NOT HOLD+    describe "genValid :: Gen LB.ByteString" $ do+        checkable (genValid :: Gen LB.ByteString)+        showable (genValid :: Gen LB.ByteString)+        it "generates valid lazy bytestring" $+            forAll (genValid :: Gen LB.ByteString) isValid+    describe "genInvalid :: Gen LB.ByteString" $ do+        checkable (genInvalid :: Gen LB.ByteString)+        -- showable (genInvalid :: Gen LB.ByteString) DOES NOT HOLD+        it "generates invalid lazy bytestring" $+            forAll (genInvalid :: Gen LB.ByteString) isInvalid