git.iko.soy/typeable/generic-arbitrary
on ddcfecc help sign in
.github/workflows/haskell-ci.ymldeleted−29
since splitsnapshots
unifiedsplit
@@ -1,29 +0,0 @@
1−name: Haskell-CI
2−on: [push, pull_request]
3−jobs:
4− linux:
5− name: GHC-${{ matrix.ghc-version }}
6− runs-on: ubuntu-latest
7− strategy:
8− matrix:
9− ghc-version:
10− - 8.6.5
11− - 8.10.7
12− - 9.0.2
13− - 9.2.4
14− - 9.4.3
15− - 9.8.1
16− steps:
17− - uses: actions/checkout@v3
18− - uses: haskell/actions/setup@v2
19− with:
20− enable-stack: true
21− ghc-version: ${{ matrix.ghc-version }}
22− stack-version: 'latest'
23− - uses: actions/cache@v3
24− with:
25− path: |
26− ~/.stack
27− ./.stack-work
28− key: ${{ matrix.ghc-version }}
29− - run: stack --stack-yaml ghc-${{ matrix.ghc-version }}.yaml --install-ghc test --fast --haddock
.gitignore−1
@@ -4,4 +4,3 @@ dist
4.cabal-sandbox/
4.cabal-sandbox/
5cabal.sandbox.config
5cabal.sandbox.config
6dist-newstyle
6dist-newstyle
7−TAGS
CHANGELOG.md−16
@@ -1,19 +1,3 @@
1−1.0.1.2
2−-------
3−
4−* Fix dependency bounds (including retroactively), and compilation with warnings.
5−
6−1.0.1.1
7−-------
8−
9−* Fix compilation with GHC 9.8.3
10−
11−1.0.1
12−-----
13−
14−* Compillability by GHC-9.2.4
15−* Fix cabal `tested-with` field
16−
171.0.0
11.0.0
18-----
2-----
19
3
README.md+12−114
@@ -1,31 +1,14 @@
1# generic-arbitrary
1# generic-arbitrary
2
2
3−[![Haskell-CI](https://github.com/typeable/generic-arbitrary/actions/workflows/haskell-ci.yml/badge.svg)](https://github.com/typeable/generic-arbitrary/actions/workflows/haskell-ci.yml)
3+[![Build Status](https://travis-ci.org/typeable/generic-arbitrary.svg?branch=master)](https://travis-ci.org/typeable/generic-arbitrary)
4
4
5−# What?
6−
7−Package for deriving `Arbitrary` via `Generic`.
5+Deriving `Arbitrary` via `Generic`.
8
6
9``` haskell
7``` haskell
10import GHC.Generics (Generic)
8import GHC.Generics (Generic)
11import Test.QuickCheck
9import Test.QuickCheck
12import Test.QuickCheck.Arbitrary.Generic
10import Test.QuickCheck.Arbitrary.Generic
13
11
14−data Expr
15− = Lit Int
16− | Add Expr Expr
17− | Mul Expr Expr
18− deriving (Eq, Show, Generic)
19− deriving Arbitrary via (GenericArbitrary Expr)
20−```
21−
22−Older versions of this package had a problem with hanging `arbitrary`
23−method. Since `1.0.0` this problem almost solved.
24−
25−For `QuickCheck` older than `2.14.0` the `GenericArbitrary` is not available, so
26−you will need to write instances more verbosely
27−
28−``` haskell
29data Expr
12data Expr
30 = Lit Int
13 = Lit Int
31 | Add Expr Expr
14 | Add Expr Expr
@@ -37,104 +20,19 @@ instance Arbitrary Expr where
37 shrink = genericShrink
20 shrink = genericShrink
38```
21```
39
22
40−Which is generally the same.
23+if type has an argument then `Arg` is required
41−
42−# Infinite terms problem
43−
44−The `generic-arbitrary` can partially handle the problem with recursive
45−types. Assume the type `R`
46−
47−``` haskell
48−data R = R R
49− deriving Generic
50−```
51−
52−there is no instance
53−
54−``` haskell
55−instance Arbitrary R where
56− arbitrary = genericArbitrary
57− shrink = genericShrink
58−```
59−
60−If you try to compile this you will get a type level error
61−
62−> • R refers to itself in all constructors
63−
64−Which means that there is no finite term for `R` because it is recursive in all
65−it's constructors. But, if you correct the definition of `R` like this.
66−
67−``` haskell
68−data R = R R | F
69− deriving Generic
70−```
71−
72−Then it will compile. And the `arbitrary` generated will not hang forever,
73−because it respects the `size` parameter.
74−
75−## Limitation
76−
77−There is a limitation of recursion detection:
78
24
79``` haskell
25``` haskell
80−data R1 = R1 R2
26+data Expr lit
81− deriving (Eq, Ord, Show, Generic)
27+ = Lit lit
82− deriving anyclass NFData
28+ | Add Expr Expr
83− deriving Arbitrary via (GenericArbitrary R1)
29+ | Mul Expr Expr
84−
85−data R2 = R2 R1
86− deriving (Eq, Ord, Show, Generic)
87− deriving anyclass NFData
88− deriving Arbitrary via (GenericArbitrary R2)
89−```
90−
91−This code will compile and the `arbitrary` generated will always hang. Yes,
92−there is a problem with mutually recursive types.
93−
94−# Type parameters
95−
96−Now let's see an example of datatype with parameters
97−
98−``` haskell
99−data A a = A a
100− deriving (Eq, Ord, Show)
30+ deriving (Eq, Show, Generic)
101− deriving anyclass NFData
102− deriving (Generic)
103−
104−instance (Arbitrary a) => Arbitrary (A a) where
105− arbitrary = genericArbitrary
106− shrink = genericShrink
107−```
108−
109−It should work from first glance, but when compile it will throw an error:
110−
111−```
112−• Could not deduce (Test.QuickCheck.Arbitrary.Generic.GArbitrary
113− (A a)
114− (GHC.Generics.D1
115− ('GHC.Generics.MetaData "A" "ParametersTest" "main" 'False)
116− (GHC.Generics.C1
117− ('GHC.Generics.MetaCons "A" 'GHC.Generics.PrefixI 'False)
118− (GHC.Generics.S1
119− ('GHC.Generics.MetaSel
120− 'Nothing
121− 'GHC.Generics.NoSourceUnpackedness
122− 'GHC.Generics.NoSourceStrictness
123− 'GHC.Generics.DecidedLazy)
124− (GHC.Generics.Rec0 a))))
125− (TypesDiffer (A a) a))
126− arising from a use of ‘genericArbitrary’
127−```
128−
129−Here the `TypesDiffer` is a type familty dealing with recursive types and
130−helping us to eliminate inproper instances. To convince the compiller, that the
131−`a` parameter is not an `A a` we must fix the instance with additional
132−constraint `Arg (A a) a`
133
31
134−``` haskell
32+instance
33+ ( Arbitrary lit
34+ , Arg (Expr lit) lit
135−instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
35+ ) => Arbitrary (Expr lit) where
136 arbitrary = genericArbitrary
36 arbitrary = genericArbitrary
137 shrink = genericShrink
37 shrink = genericShrink
138```
38```
139−
140−Now everything compiles and works as expected.
generic-arbitrary.cabal+13−21
@@ -1,5 +1,5 @@
1name: generic-arbitrary
1name: generic-arbitrary
2−version: 1.0.1.2
2+version: 1.0.0
3synopsis: Generic implementation for QuickCheck's Arbitrary
3synopsis: Generic implementation for QuickCheck's Arbitrary
4description:
4description:
5 Generic implementations of methods of the 'Arbitrary' class from the
5 Generic implementations of methods of the 'Arbitrary' class from the
@@ -15,14 +15,9 @@ homepage: http://github.com/typeable/generic-arbitrary#readme
15category: Generic
15category: Generic
16build-type: Simple
16build-type: Simple
17extra-source-files: CHANGELOG.md
17extra-source-files: CHANGELOG.md
18− , README.md
19−cabal-version: 2.0
18+cabal-version: 1.22
20−tested-with: GHC == 8.6.5
19+tested-with: GHC == 8.10.7
21− , GHC == 8.10.7
22− , GHC == 9.0.2
20+ , GHC == 9.0.2
23− , GHC == 9.2.4
24− , GHC == 9.4.3
25− , GHC == 9.8.1
26
21
27source-repository head
22source-repository head
28 type: git
23 type: git
@@ -31,7 +26,7 @@ source-repository head
31library
26library
32 exposed-modules: Test.QuickCheck.Arbitrary.Generic
27 exposed-modules: Test.QuickCheck.Arbitrary.Generic
33 build-depends: base >=4.8 && <5
28 build-depends: base >=4.8 && <5
34− , QuickCheck >=2.8
29+ , QuickCheck
35 hs-source-dirs: src
30 hs-source-dirs: src
36 default-language: Haskell2010
31 default-language: Haskell2010
37 default-extensions: AllowAmbiguousTypes
32 default-extensions: AllowAmbiguousTypes
@@ -59,19 +54,16 @@ test-suite test
59 hs-source-dirs: test
54 hs-source-dirs: test
60 main-is: Test.hs
55 main-is: Test.hs
61 default-language: Haskell2010
56 default-language: Haskell2010
62− build-depends: base >=4.12 && <5
57+ build-depends: base >= 4.8 && <5
63− , QuickCheck >=2.10
58+ , QuickCheck
64 , deepseq
59 , deepseq
65 , generic-arbitrary
60 , generic-arbitrary
66− , tasty >=1.4.2 || <1.4.0.1
61+ , tasty
67− , tasty-discover >= 2.0.0
62+ , tasty-discover
68− , tasty-hunit >= 0.9.2
63+ , tasty-hunit
69 , tasty-quickcheck
64 , tasty-quickcheck
70− other-modules: Auxiliary
71− , EnumTest
72− , LimitationDemo
65+ other-modules: LimitationDemo
73 , NoTypecheckTest
66 , NoTypecheckTest
74− , ParametersTest
75 , RecursiveTest
67 , RecursiveTest
76 default-extensions: AllowAmbiguousTypes
68 default-extensions: AllowAmbiguousTypes
77 , CPP
69 , CPP
@@ -88,14 +80,14 @@ test-suite test
88 , PolyKinds
80 , PolyKinds
89 , RankNTypes
81 , RankNTypes
90 , ScopedTypeVariables
82 , ScopedTypeVariables
91− , TypeApplications
92 , TypeFamilies
83 , TypeFamilies
93 , TypeOperators
84 , TypeOperators
94 , TypeSynonymInstances
85 , TypeSynonymInstances
95 , UndecidableInstances
86 , UndecidableInstances
96 , ViewPatterns
87 , ViewPatterns
97− build-tool-depends: tasty-discover:tasty-discover
88+ build-tools: tasty-discover
98 ghc-options: -Wall
89 ghc-options: -Wall
99 -threaded
90 -threaded
100 -rtsopts
91 -rtsopts
101 "-with-rtsopts=-N -A64m -qb0 -n4m -T -I1"
92 "-with-rtsopts=-N -A64m -qb0 -n4m -T -I1"
93+ default-extensions: DeriveGeneric
ghc-8.6.5.yamldeleted−1
@@ -1 +0,0 @@
1−resolver: lts-13.21
ghc-8.6.5.yaml.lockdeleted−12
@@ -1,12 +0,0 @@
1−# This file was autogenerated by Stack.
2−# You should not edit this file by hand.
3−# For more information, please see the documentation at:
4−# https://docs.haskellstack.org/en/stable/lock_files
5−
6−packages: []
7−snapshots:
8−- completed:
9− sha256: eff2de19a6d4691ccbf6edc1fba858f1918683047dce0f09adede874bbd2a8f3
10− size: 498180
11− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/21.yaml
12− original: lts-13.21
ghc-9.0.2.yamldeleted−1
@@ -1 +0,0 @@
1−resolver: lts-19.20
ghc-9.0.2.yaml.lockdeleted−12
@@ -1,12 +0,0 @@
1−# This file was autogenerated by Stack.
2−# You should not edit this file by hand.
3−# For more information, please see the documentation at:
4−# https://docs.haskellstack.org/en/stable/lock_files
5−
6−packages: []
7−snapshots:
8−- completed:
9− sha256: be747117bed6d462806c883352c3206325b23480825103f5c87884e97e52819a
10− size: 619173
11− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/20.yaml
12− original: lts-19.20
ghc-9.2.4.yamldeleted−1
@@ -1 +0,0 @@
1−resolver: nightly-2022-08-24
ghc-9.2.4.yaml.lockdeleted−12
@@ -1,12 +0,0 @@
1−# This file was autogenerated by Stack.
2−# You should not edit this file by hand.
3−# For more information, please see the documentation at:
4−# https://docs.haskellstack.org/en/stable/lock_files
5−
6−packages: []
7−snapshots:
8−- completed:
9− sha256: ff431937a638ebfaa5e6fec13c7ae575f01e02744d6ca5e5b1554f78cb5f88ad
10− size: 631953
11− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/8/24.yaml
12− original: nightly-2022-08-24
ghc-9.4.3.yamldeleted−1
@@ -1 +0,0 @@
1−resolver: nightly-2022-12-26
ghc-9.4.3.yaml.lockdeleted−12
@@ -1,12 +0,0 @@
1−# This file was autogenerated by Stack.
2−# You should not edit this file by hand.
3−# For more information, please see the documentation at:
4−# https://docs.haskellstack.org/en/stable/lock_files
5−
6−packages: []
7−snapshots:
8−- completed:
9− sha256: bbe432b2abd6d866aa37f65a8129a5f858b7c6eaae9464f8bc2814ce92ac2d15
10− size: 573163
11− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/12/26.yaml
12− original: nightly-2022-12-26
ghc-9.8.1.yamldeleted−1
@@ -1 +0,0 @@
1−resolver: nightly-2024-01-12
ghc-9.8.1.yaml.lockdeleted−12
@@ -1,12 +0,0 @@
1−# This file was autogenerated by Stack.
2−# You should not edit this file by hand.
3−# For more information, please see the documentation at:
4−# https://docs.haskellstack.org/en/stable/lock_files
5−
6−packages: []
7−snapshots:
8−- completed:
9− sha256: 8f06e87750f95bc8620644ea22344ad023c3c5aa6efa854747aa70093898fd79
10− size: 556465
11− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2024/1/12.yaml
12− original: nightly-2024-01-12
ghc-8.10.7.yaml → lts-18.18.yamlrenamed

The content is the same.

ghc-8.10.7.yaml.lock → lts-18.18.yaml.lockrenamed

The content is the same.

src/Test/QuickCheck/Arbitrary/Generic.hs+8−151
@@ -1,14 +1,6 @@
1−#if __GLASGOW_HASKELL__ >= 806
1+{- |
2−{-# OPTIONS_GHC -Wno-star-is-type #-}
3−#endif
4−#if __GLASGOW_HASKELL__ >= 800
5−{-# OPTIONS_GHC -Wno-unticked-promoted-constructors #-}
6−#endif
7−
8−{-|
9
2
10−This module is a generic implementation of the 'arbitrary' method. Example
3+Generic implementation of the 'arbitrary' method. Example usage:
11−usage:
12
4
13@
5@
14data Foo = Foo
6data Foo = Foo
@@ -33,151 +25,30 @@ data Foo = Foo
33
25
34The generated 'arbitrary' method is equivalent to
26The generated 'arbitrary' method is equivalent to
35
27
36−@
37−Foo '<$>' arbitrary '<*>' arbitrary
28+@Foo <$> arbitrary <*> arbitrary@.
38−@.
39−
40−It can also handle a recursive types problem. Assuming a type
41−
42−@
43−data R = R R
44− deriving Generic
45−@
46−
47−there is no instance
48−
49−@
50−instance Arbitrary R where
51− arbitrary = genericArbitrary
52− shrink = genericShrink
53−@
54−
55−If you try to compile this you will get a type level error
56−
57−> • R refers to itself in all constructors
58−
59−Which means that there is no finite term for @R@ because it is recursive. But,
60−if you correct the definition of @R@ like this.
61−
62−@
63−data R = R R | F
64− deriving Generic
65−@
66−
67−Then it will compile. And the @arbitrary@ generated will not hang forever, because
68−it respects the @size@ parameter.
69−
70−There is a limitation of recursion detection:
71−
72−@
73−data R1 = R1 R2
74− deriving (Eq, Ord, Show, Generic)
75− deriving anyclass NFData
76− deriving Arbitrary via (GenericArbitrary R1)
77−
78−data R2 = R2 R1
79− deriving (Eq, Ord, Show, Generic)
80− deriving anyclass NFData
81− deriving Arbitrary via (GenericArbitrary R2)
82−@
83−
84−This code will compile and the @arbitrary@ generated will always hang. Yes,
85−there is a problem with mutually recursive types.
86−
87−Now lets see an example of datatype with parameters
88−
89−@
90−data A a = A a
91− deriving (Eq, Ord, Show)
92− deriving anyclass NFData
93− deriving (Generic)
94−
95−instance (Arbitrary a) => Arbitrary (A a) where
96− arbitrary = genericArbitrary
97− shrink = genericShrink
98−@
99−
100−It should work from first glance, but when compile it will throw an error:
101−
102−@
103− • Could not deduce (Test.QuickCheck.Arbitrary.Generic.GArbitrary
104− (A a)
105− (GHC.Generics.D1
106− ('GHC.Generics.MetaData "A" "ParametersTest" "main" 'False)
107− (GHC.Generics.C1
108− ('GHC.Generics.MetaCons "A" 'GHC.Generics.PrefixI 'False)
109− (GHC.Generics.S1
110− ('GHC.Generics.MetaSel
111− 'Nothing
112− 'GHC.Generics.NoSourceUnpackedness
113− 'GHC.Generics.NoSourceStrictness
114− 'GHC.Generics.DecidedLazy)
115− (GHC.Generics.Rec0 a))))
116− (TypesDiffer (A a) a))
117− arising from a use of ‘genericArbitrary’
118−@
119−
120−Here the @TypesDiffer@ is a type familty dealing with recursive types and
121−helping us to eliminate inproper instances. To convince the compiller, that the
122−@a@ parameter is not an @A a@ we must fix the instance with additional constraint
123−
124−@
125−instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
126− arbitrary = genericArbitrary
127− shrink = genericShrink
128−@
129−
130−Now everything compiles and works as expected.
131
29
132-}
30-}
133
31
134module Test.QuickCheck.Arbitrary.Generic
32module Test.QuickCheck.Arbitrary.Generic
135− ( -- * Main
33+ ( Arbitrary(..)
136− genericArbitrary
137#if MIN_VERSION_QuickCheck(2, 14, 0)
34#if MIN_VERSION_QuickCheck(2, 14, 0)
138 , GenericArbitrary(..)
35 , GenericArbitrary(..)
139#endif
36#endif
140 , Arg
37 , Arg
141− -- * Internal
38+ , genericArbitrary
142− , GArbitrary
143− , FiniteSum
144− , FiniteSumElem
145− , Finite
146− , AllFieldsFinal
147− , TypesDiffer
148− , ArgumentsCount
149− , SumLen
150− -- * Reexports
151− , Arbitrary(..)
152 , genericShrink
39 , genericShrink
153 ) where
40 ) where
154
41
155import Control.Applicative
42import Control.Applicative
43+import Data.Coerce (coerce)
156import Data.Proxy
44import Data.Proxy
157import Data.Type.Bool
45import Data.Type.Bool
158import GHC.Generics as G
46import GHC.Generics as G
159import GHC.TypeLits
47import GHC.TypeLits
160−import Prelude
161import Test.QuickCheck as QC
48import Test.QuickCheck as QC
162#if MIN_VERSION_QuickCheck(2, 14, 0)
49#if MIN_VERSION_QuickCheck(2, 14, 0)
163−import Data.Coerce (coerce)
164import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
50import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
165
51
166−
167−
168−-- | Newtype for @DerivingVia@
169−--
170−-- Usage:
171−--
172−-- @
173−-- data Foo = Foo
174−-- { _fooX :: X
175−-- , _fooY :: Y
176−-- } deriving (Generic)
177−-- deriving (Arbitrary) via GenericArbitrary Foo
178−-- @
179−--
180−-- @since 1.0.0
181newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
52newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
182 deriving (Show, Eq)
53 deriving (Show, Eq)
183
54
@@ -191,26 +62,12 @@ instance
191 shrink = coerce (genericShrink :: a -> [a])
62 shrink = coerce (genericShrink :: a -> [a])
192#endif
63#endif
193
64
194−-- | Constraint helper for types with parameters
195−--
196−-- Usage:
197−--
198−-- @
199−-- data A a = A a
200−-- deriving (Generic)
201−-- instance (Arg (A a) a, Arbitrary a) => Arbitrary (A a) where
202−-- arbitrary = genericArbitrary
203−-- shrink = genericShrink
204−-- @
205−--
206−-- @since 1.0.0
207−
208−type Arg self field = (TypesDiffer self field ~ 'True)
209−
210type family TypesDiffer a b where
65type family TypesDiffer a b where
211 TypesDiffer a a = 'False
66 TypesDiffer a a = 'False
212 TypesDiffer a b = 'True
67 TypesDiffer a b = 'True
213
68
69+type Arg self field = (TypesDiffer self field ~ 'True)
70+
214type family AllFieldsFinal self (a :: * -> *) :: Bool where
71type family AllFieldsFinal self (a :: * -> *) :: Bool where
215 AllFieldsFinal self U1 = 'True
72 AllFieldsFinal self U1 = 'True
216 AllFieldsFinal self (a :*: b) = AllFieldsFinal self a && AllFieldsFinal self b
73 AllFieldsFinal self (a :*: b) = AllFieldsFinal self a && AllFieldsFinal self b
test/Auxiliary.hsdeleted−10
@@ -1,10 +0,0 @@
1−module Auxiliary where
2−
3−import Control.Exception
4−import Test.QuickCheck
5−
6−failGeneration :: forall a. (Arbitrary a, Show a) => IO ()
7−failGeneration = do
8− try (generate (arbitrary :: Gen a) >>= print) >>= \case
9− Left (_ :: SomeException) -> pure ()
10− Right _ -> error "Error expected"
test/EnumTest.hsdeleted−24
@@ -1,24 +0,0 @@
1−#if __GLASGOW_HASKELL__ >= 806 && __GLASGOW_HASKELL__ <= 900
2−{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-}
3−#elif __GLASGOW_HASKELL__ >= 902
4−{-# OPTIONS_GHC -fconstraint-solver-iterations=6 #-}
5−#endif
6−
7−
8−
9−module EnumTest where
10−
11−import Control.DeepSeq
12−import GHC.Generics
13−import Test.QuickCheck
14−import Test.QuickCheck.Arbitrary.Generic
15−
16−data Country = PL | GB | RU | RO | CZ | HR | SK | DE | NL | ES | BR
17− deriving (Generic, NFData, Show)
18−
19−instance Arbitrary Country where
20− arbitrary = genericArbitrary
21− shrink = genericShrink
22−
23−prop_CountryTest :: Country -> Property
24−prop_CountryTest = total
test/NoTypecheckTest.hs+5−2
@@ -5,7 +5,7 @@
5
5
6module NoTypecheckTest where
6module NoTypecheckTest where
7
7
8−import Auxiliary
8+import Control.Exception
9import GHC.Generics (Generic)
9import GHC.Generics (Generic)
10import Test.QuickCheck
10import Test.QuickCheck
11import Test.QuickCheck.Arbitrary.Generic
11import Test.QuickCheck.Arbitrary.Generic
@@ -20,4 +20,7 @@ instance Arbitrary R where
20 shrink = genericShrink
20 shrink = genericShrink
21
21
22unit_mustFail :: IO ()
22unit_mustFail :: IO ()
23−unit_mustFail = failGeneration @R
23+unit_mustFail = do
24+ try (generate (arbitrary :: Gen R) >>= print) >>= \case
25+ Left (_ :: SomeException) -> pure ()
26+ Right _ -> error "Error expected"
test/ParametersTest.hsdeleted−34
@@ -1,34 +0,0 @@
1−{-# OPTIONS_GHC -fdefer-type-errors #-}
2−{-# OPTIONS_GHC -Wno-deferred-type-errors #-}
3−
4−module ParametersTest where
5−
6−import Auxiliary
7−import Control.DeepSeq
8−import GHC.Generics (Generic)
9−import Test.QuickCheck
10−import Test.QuickCheck.Arbitrary.Generic
11−
12−data A a = A a
13− deriving (Eq, Ord, Show)
14− deriving anyclass NFData
15− deriving (Generic)
16−
17−instance (Arbitrary a) => Arbitrary (A a) where
18− arbitrary = genericArbitrary
19− shrink = genericShrink
20−
21−data B a = B a
22− deriving (Eq, Ord, Show)
23− deriving anyclass NFData
24− deriving (Generic)
25−
26−instance (Arg (B a) a, Arbitrary a) => Arbitrary (B a) where
27− arbitrary = genericArbitrary
28− shrink = genericShrink
29−
30−unit_argumentConstraintFail :: IO ()
31−unit_argumentConstraintFail = failGeneration @(A Int)
32−
33−prop_properArgumentConstraint :: B Int -> Property
34−prop_properArgumentConstraint = total
test/RecursiveTest.hs+1−2
@@ -1,14 +1,13 @@
1{-# LANGUAGE DerivingStrategies #-}
1{-# LANGUAGE DerivingStrategies #-}
2{-# LANGUAGE DerivingVia #-}
2{-# LANGUAGE DerivingVia #-}
3{-# LANGUAGE DeriveAnyClass #-}
3{-# LANGUAGE DeriveAnyClass #-}
4−{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-} -- GHC-9.2.4
5
4
6-- | Testing that our Arbitrary instances do not get stuck and respect the
5-- | Testing that our Arbitrary instances do not get stuck and respect the
7-- `size` parameter while generating.
6-- `size` parameter while generating.
8
7
9module RecursiveTest where
8module RecursiveTest where
10
9
11−import Control.DeepSeq (NFData)
10+import Control.DeepSeq
12import GHC.Generics (Generic)
11import GHC.Generics (Generic)
13import Test.QuickCheck
12import Test.QuickCheck
14import Test.QuickCheck.Arbitrary.Generic
13import Test.QuickCheck.Arbitrary.Generic