generic-random: Generic random generators

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

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 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, 1.1.0.0, 1.1.0.1, 1.1.0.2, 1.2.0.0, 1.3.0.0, 1.3.0.1, 1.4.0.0, 1.5.0.0, 1.5.0.1
Change log CHANGELOG.md
Dependencies base (>=4.7 && <4.11), QuickCheck [details]
License MIT
Author Li-yao Xia
Maintainer lysxia@gmail.com
Revised Revision 3 made by lyxia at 2017-08-23T09:05:27Z
Category Generics, Testing
Home page http://github.com/lysxia/generic-random
Source repo head: git clone https://github.com/lysxia/generic-random
Uploaded by lyxia at 2017-08-23T08:40:13Z
Distributions Arch:1.5.0.1, Debian:1.3.0.1, LTSHaskell:1.5.0.1, NixOS:1.5.0.1, Stackage:1.5.0.1
Reverse Dependencies 8 direct, 2 indirect [details]
Downloads 27854 total (154 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-08-23 [all 1 reports]

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.