The generic-random package

[ Tags: generics, library, mit, testing ] [ Propose Tags ]

For more information


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.1.0, 0.2.0.0, 0.3.0.0, 0.4.0.0, 0.4.1.0, 0.5.0.0, 1.0.0.0
Change log CHANGELOG.md
Dependencies base (>=4.7 && <4.11), QuickCheck [details]
License MIT
Author Li-yao Xia
Maintainer lysxia@gmail.com
Category Generics, Testing
Home page http://github.com/lysxia/generic-random
Source repository head: git clone https://github.com/lysxia/generic-random
Uploaded Wed Aug 23 08:40:13 UTC 2017 by lyxia
Updated Wed Aug 23 09:05:27 UTC 2017 by lyxia to revision 3
Distributions LTSHaskell:0.5.0.0, NixOS:1.0.0.0, Stackage:1.0.0.0, Tumbleweed:0.4.1.0
Downloads 504 total (31 in the last 30 days)
Rating 2.25 (2 ratings) [clear rating]
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-08-23 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for generic-random-1.0.0.0

[back to package description]

Generic random generators Hackage Build Status

Derive simple random generators for QuickCheck using generics.

Example

    {-# LANGUAGE DeriveGeneric #-}

    import GHC.Generics (Generic)
    import Test.QuickCheck
    import Generic.Random

    data Tree a = Leaf | Node (Tree a) a (Tree a)
      deriving (Show, Generic)

    instance Arbitrary a => Arbitrary (Tree a) where
      arbitrary = genericArbitraryRec uniform `withBaseCase` return Leaf

    -- Equivalent to
    -- > arbitrary =
    -- >   sized $ \n ->
    -- >     if n == 0 then
    -- >       return Leaf
    -- >     else
    -- >       oneof
    -- >         [ return Leaf
    -- >         , resize (n `div` 3) $
    -- >             Node <$> arbitrary <*> arbitrary <*> arbitrary
    -- >         ]

    main = sample (arbitrary :: Gen (Tree ()))

Features

  • User-specified distribution of constructors.
  • A simple (optional) strategy to ensure termination for recursive types: using genericArbitrary', Test.QuickCheck.Gen's size parameter decreases at every recursive call; when it reaches zero, sample directly from a trivially terminating generator.