packages feed

genvalidity-criterion 1.0.0.0 → 1.1.0.0

raw patch · 4 files changed

+133/−42 lines, 4 filesdep +vectorPVP ok

version bump matches the API change (PVP)

Dependencies added: vector

API changes (from Hackage documentation)

- Data.GenValidity.Criterion: genBenchSizes :: NFData a => String -> Gen a -> Benchmark
+ Data.GenValidity.Criterion: shrinkBench :: (GenValid a, NFData a) => String -> (a -> [a]) -> Benchmark
+ Data.GenValidity.Criterion: shrinkBenchN :: forall a. (GenValid a, NFData a) => Int -> String -> (a -> [a]) -> Benchmark
+ Data.GenValidity.Criterion: shrinkBenchVector :: forall a. NFData a => Vector a -> String -> (a -> [a]) -> Benchmark
+ Data.GenValidity.Criterion: shrinkValidBench :: forall a. (Typeable a, NFData a, GenValid a) => Benchmark

Files

CHANGELOG.md view
@@ -1,5 +1,21 @@ # Changelog +## [1.1.0.0] - 2022-08-30++### Added++* `shrinkValidBench`+* `shrinkBench`+* `shrinkBenchN`+* `shrinkBenchVector`++### Changed++* Renamed `genBenchSizes` to `genBench` and removed the old `genBench`.+* Changed the generator benchmarks to generate 100 values instead of 1.+  This corresponds to how long the generating part of a property test might take+  and corrects for some of the difference in generating different values.+ ## [1.0.0.0] - 2021-11-20  ### Changed
bench/Main.hs view
@@ -16,33 +16,70 @@ main :: IO () main =   Criterion.defaultMain-    [ genValidBench @(),-      genValidBench @Bool,-      genValidBench @Ordering,-      genValidBench @Char,-      genValidBench @Int,-      genValidBench @(Int, Int),-      genValidBench @(Int, Int, Int),-      genValidBench @(Int, Int, Int, Int),-      genValidBench @(Maybe Int),-      genValidBench @(Either Int Int),-      genValidBench @[Int],-      genValidBench @[[Int]],-      genValidBench @(NonEmpty Int),-      genValidBench @(NonEmpty (NonEmpty Int)),-      genValidBench @(Ratio Int),-      genValidBench @Int8,-      genValidBench @Int16,-      genValidBench @Int32,-      genValidBench @Int64,-      genValidBench @Integer,-      genValidBench @Word8,-      genValidBench @Word16,-      genValidBench @Word32,-      genValidBench @Word64,-      genValidBench @Natural,-      genValidBench @Float,-      genValidBench @Double,-      genValidBench @(Fixed E12),-      genValidBench @String+    [ bgroup+        "generators"+        [ genValidBench @(),+          genValidBench @Bool,+          genValidBench @Ordering,+          genValidBench @Char,+          genValidBench @Int,+          genValidBench @(Int, Int),+          genValidBench @(Int, Int, Int),+          genValidBench @(Int, Int, Int, Int),+          genValidBench @(Maybe Int),+          genValidBench @(Either Int Int),+          genValidBench @[Int],+          genValidBench @[[Int]],+          genValidBench @(NonEmpty Int),+          genValidBench @(NonEmpty (NonEmpty Int)),+          genValidBench @(Ratio Int),+          genValidBench @Rational,+          genValidBench @Int8,+          genValidBench @Int16,+          genValidBench @Int32,+          genValidBench @Int64,+          genValidBench @Integer,+          genValidBench @Word8,+          genValidBench @Word16,+          genValidBench @Word32,+          genValidBench @Word64,+          genValidBench @Natural,+          genValidBench @Float,+          genValidBench @Double,+          genValidBench @(Fixed E12),+          genValidBench @String+        ],+      bgroup+        "shrinkers"+        [ shrinkValidBench @(),+          shrinkValidBench @Bool,+          shrinkValidBench @Ordering,+          shrinkValidBench @Char,+          shrinkValidBench @Int,+          shrinkValidBench @(Int, Int),+          shrinkValidBench @(Int, Int, Int),+          shrinkValidBench @(Int, Int, Int, Int),+          shrinkValidBench @(Maybe Int),+          shrinkValidBench @(Either Int Int),+          shrinkValidBench @[Int],+          shrinkValidBench @[[Int]],+          shrinkValidBench @(NonEmpty Int),+          shrinkValidBench @(NonEmpty (NonEmpty Int)),+          shrinkValidBench @(Ratio Int),+          shrinkValidBench @Rational,+          shrinkValidBench @Int8,+          shrinkValidBench @Int16,+          shrinkValidBench @Int32,+          shrinkValidBench @Int64,+          shrinkValidBench @Integer,+          shrinkValidBench @Word8,+          shrinkValidBench @Word16,+          shrinkValidBench @Word32,+          shrinkValidBench @Word64,+          shrinkValidBench @Natural,+          shrinkValidBench @Float,+          shrinkValidBench @Double,+          shrinkValidBench @(Fixed E12),+          shrinkValidBench @String+        ]     ]
genvalidity-criterion.cabal view
@@ -1,18 +1,18 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.34.7. -- -- see: https://github.com/sol/hpack  name:           genvalidity-criterion-version:        1.0.0.0+version:        1.1.0.0 synopsis:       Criterion benchmarks for generators category:       Validity homepage:       https://github.com/NorfairKing/validity#readme bug-reports:    https://github.com/NorfairKing/validity/issues author:         Tom Sydney Kerckhove maintainer:     syd@cs-syd.eu-copyright:      Copyright: (c) 2016-2021 Tom Sydney Kerckhove+copyright:      Copyright: (c) 2016-2022 Tom Sydney Kerckhove license:        MIT license-file:   LICENSE build-type:     Simple@@ -37,6 +37,7 @@     , criterion     , deepseq     , genvalidity >=1.0+    , vector   default-language: Haskell2010  benchmark genvalidity-criterion-bench
src/Data/GenValidity/Criterion.hs view
@@ -5,9 +5,12 @@ -- | Benchmarks for generators module Data.GenValidity.Criterion   ( genValidBench,-    genBenchSizes,     genBench,     genBenchSized,+    shrinkValidBench,+    shrinkBench,+    shrinkBenchN,+    shrinkBenchVector,   ) where @@ -15,6 +18,8 @@ import Criterion import Data.GenValidity import Data.Typeable+import Data.Vector (Vector)+import qualified Data.Vector as V import Test.QuickCheck.Gen import Test.QuickCheck.Random @@ -23,23 +28,55 @@   forall a.   (Typeable a, NFData a, GenValid a) =>   Benchmark-genValidBench = genBenchSizes (unwords ["genValid", nameOf @a]) (genValid @a)+genValidBench = genBench (unwords ["genValid", nameOf @a]) (genValid @a)  -- | Benchmarks a generator with some default sizes-genBenchSizes :: NFData a => String -> Gen a -> Benchmark-genBenchSizes name gen =+genBench :: NFData a => String -> Gen a -> Benchmark+genBench name gen =   bgroup name $     let bi i = genBenchSized ("size " <> show i) i gen      in [bi 15, bi 30] --- | Benchmarks a generator with a given name with the default size: 30-genBench :: NFData a => String -> Gen a -> Benchmark-genBench name = genBenchSized name 30- -- | Benchmarks a generator with a given name and size genBenchSized :: NFData a => String -> Int -> Gen a -> Benchmark-genBenchSized name size (MkGen genFunc) =-  bench name $ nf (\seed -> genFunc seed size) (mkQCGen 42)+genBenchSized name size gen =+  let MkGen genFunc = V.replicateM 100 gen+   in bench name $ nf (\seed -> genFunc seed size) (mkQCGen 42)++-- | Benchmark for the time it takes to shrink to the first ten shrunk versions using 'shrinkValid' and a vector of 100 deterministically generated values.+shrinkValidBench ::+  forall a.+  (Typeable a, NFData a, GenValid a) =>+  Benchmark+shrinkValidBench =+  shrinkBench+    (unwords ["shrinkValid", nameOf @a])+    (shrinkValid @a)++-- | Benchmark for the time it takes to shrink to the first ten shrunk versions using a given shrinking function and a vector of 100 deterministically generated values.+shrinkBench :: (GenValid a, NFData a) => String -> (a -> [a]) -> Benchmark+shrinkBench = shrinkBenchN 100++-- | Benchmark for the time it takes to shrink to the first ten shrunk versions using a given shrinking function and a vector of N deterministically generated values.+shrinkBenchN :: forall a. (GenValid a, NFData a) => Int -> String -> (a -> [a]) -> Benchmark+shrinkBenchN n name shrinker =+  withArgs n $ \args -> shrinkBenchVector args name shrinker++-- | Benchmark for the time it takes to shrink to the first ten shrunk versions using a given shrinking function and a given vector of values+shrinkBenchVector :: forall a. NFData a => Vector a -> String -> (a -> [a]) -> Benchmark+shrinkBenchVector args name shrinker =+  bench+    name+    (nf (V.map (take 10 . shrinker)) (args :: Vector a))++withArgs :: (NFData arg, GenValid arg) => Int -> (Vector arg -> Benchmark) -> Benchmark+withArgs n = env (pure (generateDeterministically $ V.replicateM n genValid))++generateDeterministically :: Gen a -> a+generateDeterministically (MkGen f) = f seed size+  where+    seed = mkQCGen 42+    size = 30  nameOf ::   forall a.