An open API service indexing awesome lists of open source software.

https://github.com/plow-technologies/quickcheck-arbitrary-template

Arbitrary QuickCheck instance generation using template haskell
https://github.com/plow-technologies/quickcheck-arbitrary-template

Last synced: 3 months ago
JSON representation

Arbitrary QuickCheck instance generation using template haskell

Awesome Lists containing this project

README

          

# quickcheck-arbitrary-template

Test.QuickCheck.TH.GeneratorsSpec

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.

## Installation

``` stack build ```

## Usage

An example (from the tests)

``` haskell
{-# 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
```