packages feed

quickcheck-instances 0.3.19 → 0.3.20

raw patch · 4 files changed

+71/−7 lines, 4 filesdep +splitmixdep ~QuickCheckdep ~basedep ~bytestring

Dependencies added: splitmix

Dependency ranges changed: QuickCheck, base, bytestring

Files

CHANGES view
@@ -1,3 +1,8 @@+0.3.20++* Support QuickCheck-2.13+* Faster ByteString `arbitrary`+ 0.3.19  * Instances for `MaybeT`
+ bench/ByteString.hs view
@@ -0,0 +1,16 @@+module Main where++import qualified Data.ByteString                      as BS+import           System.IO                            (hPutStrLn, stderr)+import qualified Test.QuickCheck                      as QC+import           Test.QuickCheck.Instances.ByteString ()+import qualified Test.QuickCheck.Monadic              as QCM++-- BS.pack 6.53s+-- current: 0.07s+main :: IO ()+main = QC.quickCheckWith args $ QC.property $ \bsList -> QCM.monadicIO $ do+    QCM.run $ hPutStrLn stderr (show $ sum $ map BS.length bsList)+    QCM.assert True+  where+    args = QC.stdArgs { QC.maxSize = 1000 }
quickcheck-instances.cabal view
@@ -1,5 +1,5 @@ Name:                quickcheck-instances-Version:             0.3.19+Version:             0.3.20  Synopsis:            Common quickcheck instances Description:         QuickCheck instances.@@ -34,8 +34,8 @@   GHC==7.10.3,   GHC==8.0.2,   GHC==8.2.2,-  GHC==8.4.3,-  GHC==8.6.1+  GHC==8.4.4,+  GHC==8.6.4  Source-repository head   type:     git@@ -66,8 +66,9 @@                        Test.QuickCheck.Instances.Vector   Hs-Source-Dirs:      src   Build-depends:-    base       >=4.5  && <4.13,-    QuickCheck >=2.10 && <2.13,+    base       >=4.5   && <4.13,+    QuickCheck >=2.13  && <2.14,+    splitmix   >=0.0.2 && <0.1,      array                >=0.4.0.0 && <0.6,     base-compat          >=0.9.3   && <0.11,@@ -115,3 +116,13 @@     containers,     tagged,     uuid-types++benchmark bytestring-gen+  type: exitcode-stdio-1.0+  main-is: ByteString.hs+  hs-source-dirs: bench+  build-depends:+    base,+    QuickCheck,+    quickcheck-instances,+    bytestring
src/Test/QuickCheck/Instances/ByteString.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE FlexibleContexts #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.QuickCheck.Instances.ByteString () where@@ -5,8 +6,13 @@ import Prelude () import Prelude.Compat +import Data.Word (Word8) import Test.QuickCheck+import Test.QuickCheck.Gen+import Test.QuickCheck.Random (QCGen (..)) +import qualified System.Random.SplitMix as SM+ import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Short as SBS@@ -16,7 +22,19 @@ -------------------------------------------------------------------------------  instance Arbitrary BS.ByteString where-    arbitrary = BS.pack <$> arbitrary+    arbitrary = MkGen $ \(QCGen g0) size ->+        if size <= 0+        then BS.empty+        else+            let (i, g1) = SM.nextInt g0+                size' = i `mod` size+            in fst (BS.unfoldrN size' gen g1)+      where+        gen :: SM.SMGen -> Maybe (Word8, SM.SMGen)+        gen !g = Just (fromIntegral w64, g')+          where+            ~(w64, g') = SM.nextWord64 g+     shrink xs = BS.pack <$> shrink (BS.unpack xs)  instance CoArbitrary BS.ByteString where@@ -27,7 +45,21 @@   instance Arbitrary BL.ByteString where-    arbitrary = BL.pack <$> arbitrary+    arbitrary = MkGen $ \(QCGen g0) size ->+        if size <= 0+        then BL.empty+        else+            let (i, g1) = SM.nextInt g0+                size' = i `mod` size+            in BL.unfoldr gen (size', g1)+      where+        gen :: (Int, SM.SMGen) -> Maybe (Word8, (Int, SM.SMGen))+        gen (!i, !g)+            | i <= 0    = Nothing+            | otherwise = Just (fromIntegral w64, (i - 1, g'))+          where+            ~(w64, g') = SM.nextWord64 g+     shrink xs = BL.pack <$> shrink (BL.unpack xs)  instance CoArbitrary BL.ByteString where