@@ -1,13 +1,14 @@
11{-# LANGUAGE DerivingStrategies #-}
22{-# LANGUAGE DerivingVia #-}
33{-# LANGUAGE DeriveAnyClass #-}
4+{-# OPTIONS_GHC -fconstraint-solver-iterations=5 #-} -- GHC-9.2.4
45
56-- | Testing that our Arbitrary instances do not get stuck and respect the
67-- `size` parameter while generating.
78
89module RecursiveTest where
910
10−import Control.DeepSeq
11+import Control.DeepSeq (NFData)
1112import GHC.Generics (Generic)
1213import Test.QuickCheck
1314import Test.QuickCheck.Arbitrary.Generic
@@ -15,7 +16,13 @@ import Test.QuickCheck.Arbitrary.Generic
1516data Unit = Unit
1617 deriving (Eq, Show, Generic)
1718 deriving anyclass NFData
19+#if MIN_VERSION_QuickCheck(2, 14, 0)
1820 deriving Arbitrary via (GenericArbitrary Unit)
21+#else
22+instance Arbitrary Unit where
23+ arbitrary = genericArbitrary
24+ shrink = genericShrink
25+#endif
1926
2027prop_unitTotal :: Unit -> Property
2128prop_unitTotal = total
@@ -23,7 +30,13 @@ prop_unitTotal = total
2330data Single = Single Int
2431 deriving (Eq, Show, Generic)
2532 deriving anyclass NFData
33+#if MIN_VERSION_QuickCheck(2, 14, 0)
2634 deriving Arbitrary via (GenericArbitrary Single)
35+#else
36+instance Arbitrary Single where
37+ arbitrary = genericArbitrary
38+ shrink = genericShrink
39+#endif
2740
2841prop_singleTotal :: Single -> Property
2942prop_singleTotal = total
@@ -31,7 +44,13 @@ prop_singleTotal = total
3144data Multiple = M1 | M2 | M3 Int
3245 deriving (Eq, Show, Generic)
3346 deriving anyclass NFData
47+#if MIN_VERSION_QuickCheck(2, 14, 0)
3448 deriving Arbitrary via (GenericArbitrary Multiple)
49+#else
50+instance Arbitrary Multiple where
51+ arbitrary = genericArbitrary
52+ shrink = genericShrink
53+#endif
3554
3655prop_multipleTotal :: Multiple -> Property
3756prop_multipleTotal = total
@@ -42,7 +61,13 @@ data Rec = Rec
4261 , multiple :: Multiple
4362 } deriving (Eq, Show, Generic)
4463 deriving anyclass NFData
45− deriving Arbitrary via (GenericArbitrary Rec)
64+#if MIN_VERSION_QuickCheck(2, 14, 0)
65+ deriving Arbitrary via (GenericArbitrary Rec)
66+#else
67+instance Arbitrary Rec where
68+ arbitrary = genericArbitrary
69+ shrink = genericShrink
70+#endif
4671
4772prop_recTotal :: Rec -> Property
4873prop_recTotal = total
@@ -53,7 +78,13 @@ data Expr
5378 | Mul Expr Expr
5479 deriving (Eq, Show, Generic)
5580 deriving anyclass NFData
81+#if MIN_VERSION_QuickCheck(2, 14, 0)
5682 deriving Arbitrary via (GenericArbitrary Expr)
83+#else
84+instance Arbitrary Expr where
85+ arbitrary = genericArbitrary
86+ shrink = genericShrink
87+#endif
5788
5889prop_exprTotal :: Expr -> Property
5990prop_exprTotal = total
@@ -67,7 +98,13 @@ data Recursive
6798 | R5 Recursive String
6899 deriving (Eq, Show, Generic)
69100 deriving anyclass NFData
101+#if MIN_VERSION_QuickCheck(2, 14, 0)
70102 deriving Arbitrary via (GenericArbitrary Recursive)
103+#else
104+instance Arbitrary Recursive where
105+ arbitrary = genericArbitrary
106+ shrink = genericShrink
107+#endif
71108
72109prop_recursiveTotal :: Recursive -> Property
73110prop_recursiveTotal = total
@@ -77,7 +114,13 @@ data DeepRecursive
77114 | Short
78115 deriving (Eq, Show, Generic)
79116 deriving anyclass NFData
117+#if MIN_VERSION_QuickCheck(2, 14, 0)
80118 deriving Arbitrary via (GenericArbitrary DeepRecursive)
119+#else
120+instance Arbitrary DeepRecursive where
121+ arbitrary = genericArbitrary
122+ shrink = genericShrink
123+#endif
81124
82125prop_deepRecursiveTotal :: DeepRecursive -> Property
83126prop_deepRecursiveTotal = total