quickcheck-arbitrary-template: Generate QuickCheck Gen for Sum Types

[ bsd3, library, testing ] [ Propose Tags ]

Building Sum Type arbitrary instance is kind of a pain. This tool helps automate the process.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS],,
Change log ChangeLog.md
Dependencies base (>=4 && <5), QuickCheck, safe, template-haskell (>=2.11 && <2.17) [details]
License BSD-3-Clause
Copyright 2016-2019 Plow Technologies
Author Scott Murphy <scottmurphy09@gmail.com>
Maintainer Scott Murphy <scottmurphy09@gmail.com>
Category Testing
Home page https://github.com/plow-technologies/quickcheck-arbitrary-template#readme
Bug tracker https://github.com/plow-technologies/quickcheck-arbitrary-template/issues
Source repo head: git clone https://github.com/plow-technologies/quickcheck-arbitrary-template
Uploaded by mchaver at 2020-11-24T14:20:01Z
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 1511 total (18 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-11-24 [all 1 reports]

Readme for quickcheck-arbitrary-template-

[back to package description]



contains one routine: makeArbitrary

Which builds, a generator that can be used to create an arbitrary instance.

It does not create the instance directly for you.

It supports creating sum types and record types each constructor may have at most 7 arguments.


stack build


An example (from the tests)

{-# LANGUAGE TemplateHaskell #-}
module Test.QuickCheck.TH.GeneratorsSpec (tests) where

import Test.QuickCheck.TH.Generators

import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Test.Tasty.HUnit

import Data.List
import Data.Ord

-- | These example types should build arbitrary instances correctly 

data ExampleSumTypes = ExampleSum0 
                    | ExampleSum1 Int
                    | ExampleSum2 Int Int
                    | ExampleSum3 Int Int Int
                    | ExampleSum4 Int Int Int Int
                    | ExampleSum5  Int Int Int Int Int
                    | ExampleSum6 Int Int Int Int Int Int
                    | ExampleSum7 Int Int Int Int Int Int
 deriving (Show,Ord,Eq)

makeArbitrary ''ExampleSumTypes

instance Arbitrary ExampleSumTypes where
  arbitrary = arbitraryExampleSumTypes

tests :: TestTree
tests = testGroup "Tests" [properties]

properties :: TestTree
properties = testGroup "Properties" [qcProps]

qcProps = testGroup "(checked by QuickCheck)"
  [ QC.testProperty "sort == sort . reverse" (
       \list -> sort (list :: [ExampleSumTypes]) == sort (reverse list)) ]

How to run tests

stack test quickcheck-arbitrary-template