@@ -1,56 +1,45 @@
1−{-# LANGUAGE DerivingStrategies #-}
2−{-# LANGUAGE DerivingVia #-}
3−{-# LANGUAGE DeriveAnyClass #-}
4−{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-} -- GHC-9.2.4
5−
61-- | Testing that our Arbitrary instances do not get stuck and respect the
72-- `size` parameter while generating.
83
94module RecursiveTest where
105
11−import Control.DeepSeq (NFData)
6+import Control.DeepSeq
127import GHC.Generics (Generic)
138import Test.QuickCheck
149import Test.QuickCheck.Arbitrary.Generic
1510
1611data Unit = Unit
1712 deriving (Eq, Show, Generic)
18− deriving anyclass NFData
19−#if MIN_VERSION_QuickCheck(2, 14, 0)
20− deriving Arbitrary via (GenericArbitrary Unit)
21−#else
13+
14+instance NFData Unit
15+
2216instance Arbitrary Unit where
2317 arbitrary = genericArbitrary
2418 shrink = genericShrink
25−#endif
2619
2720prop_unitTotal :: Unit -> Property
2821prop_unitTotal = total
2922
3023data Single = Single Int
3124 deriving (Eq, Show, Generic)
32− deriving anyclass NFData
33−#if MIN_VERSION_QuickCheck(2, 14, 0)
34− deriving Arbitrary via (GenericArbitrary Single)
35−#else
25+
26+instance NFData Single
27+
3628instance Arbitrary Single where
3729 arbitrary = genericArbitrary
3830 shrink = genericShrink
39−#endif
4031
4132prop_singleTotal :: Single -> Property
4233prop_singleTotal = total
4334
4435data Multiple = M1 | M2 | M3 Int
4536 deriving (Eq, Show, Generic)
46− deriving anyclass NFData
47−#if MIN_VERSION_QuickCheck(2, 14, 0)
48− deriving Arbitrary via (GenericArbitrary Multiple)
49−#else
37+
38+instance NFData Multiple
39+
5040instance Arbitrary Multiple where
5141 arbitrary = genericArbitrary
5242 shrink = genericShrink
53−#endif
5443
5544prop_multipleTotal :: Multiple -> Property
5645prop_multipleTotal = total
@@ -60,14 +49,12 @@ data Rec = Rec
6049 , single :: Single
6150 , multiple :: Multiple
6251 } deriving (Eq, Show, Generic)
63− deriving anyclass NFData
64−#if MIN_VERSION_QuickCheck(2, 14, 0)
65− deriving Arbitrary via (GenericArbitrary Rec)
66−#else
52+
53+instance NFData Rec
54+
6755instance Arbitrary Rec where
6856 arbitrary = genericArbitrary
6957 shrink = genericShrink
70−#endif
7158
7259prop_recTotal :: Rec -> Property
7360prop_recTotal = total
@@ -77,14 +64,13 @@ data Expr
7764 | Add Expr Expr
7865 | Mul Expr Expr
7966 deriving (Eq, Show, Generic)
80− deriving anyclass NFData
81−#if MIN_VERSION_QuickCheck(2, 14, 0)
82− deriving Arbitrary via (GenericArbitrary Expr)
83−#else
67+
68+-- | Instance with may fall into infinite loop
8469instance Arbitrary Expr where
8570 arbitrary = genericArbitrary
8671 shrink = genericShrink
87−#endif
72+
73+instance NFData Expr
8874
8975prop_exprTotal :: Expr -> Property
9076prop_exprTotal = total
@@ -97,14 +83,12 @@ data Recursive
9783 | R4 Recursive
9884 | R5 Recursive String
9985 deriving (Eq, Show, Generic)
100− deriving anyclass NFData
101−#if MIN_VERSION_QuickCheck(2, 14, 0)
102− deriving Arbitrary via (GenericArbitrary Recursive)
103−#else
86+
87+instance NFData Recursive
88+
10489instance Arbitrary Recursive where
10590 arbitrary = genericArbitrary
10691 shrink = genericShrink
107−#endif
10892
10993prop_recursiveTotal :: Recursive -> Property
11094prop_recursiveTotal = total
@@ -113,23 +97,21 @@ data DeepRecursive
11397 = Deep DeepRecursive DeepRecursive DeepRecursive DeepRecursive DeepRecursive
11498 | Short
11599 deriving (Eq, Show, Generic)
116− deriving anyclass NFData
117−#if MIN_VERSION_QuickCheck(2, 14, 0)
118− deriving Arbitrary via (GenericArbitrary DeepRecursive)
119−#else
100+
101+instance NFData DeepRecursive
102+
120103instance Arbitrary DeepRecursive where
121104 arbitrary = genericArbitrary
122105 shrink = genericShrink
123−#endif
124106
125107prop_deepRecursiveTotal :: DeepRecursive -> Property
126108prop_deepRecursiveTotal = total
127109
128110data P p = NoP | P p
129111 deriving (Eq, Show, Generic)
130− deriving anyclass NFData
131112
132−-- Note that deriving via doesn't work for case with arguments
113+instance (NFData p) => NFData (P p)
114+
133115instance (Arg (P p) p, Arbitrary p) => Arbitrary (P p) where
134116 arbitrary = genericArbitrary
135117 shrink = genericShrink