@@ -1,13 +1,14 @@
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-- | Testing that our Arbitrary instances do not get stuck and respect the
6-- | Testing that our Arbitrary instances do not get stuck and respect the
6-- `size` parameter while generating.
7-- `size` parameter while generating.
8module RecursiveTest where
9module RecursiveTest where
10−import Control.DeepSeq
11+import Control.DeepSeq (NFData)
11import GHC.Generics (Generic)
12import GHC.Generics (Generic)
12import Test.QuickCheck
13import Test.QuickCheck
13import Test.QuickCheck.Arbitrary.Generic
14import Test.QuickCheck.Arbitrary.Generic
@@ -15,7 +16,13 @@ import Test.QuickCheck.Arbitrary.Generic
15data Unit = Unit
16data Unit = Unit
16 deriving (Eq, Show, Generic)
17 deriving (Eq, Show, Generic)
17 deriving anyclass NFData
18 deriving anyclass NFData
19+#if MIN_VERSION_QuickCheck(2, 14, 0)
18 deriving Arbitrary via (GenericArbitrary Unit)
20 deriving Arbitrary via (GenericArbitrary Unit)
22+instance Arbitrary Unit where
23+ arbitrary = genericArbitrary
24+ shrink = genericShrink
20prop_unitTotal :: Unit -> Property
27prop_unitTotal :: Unit -> Property
21prop_unitTotal = total
28prop_unitTotal = total
@@ -23,7 +30,13 @@ prop_unitTotal = total
23data Single = Single Int
30data Single = Single Int
24 deriving (Eq, Show, Generic)
31 deriving (Eq, Show, Generic)
25 deriving anyclass NFData
32 deriving anyclass NFData
33+#if MIN_VERSION_QuickCheck(2, 14, 0)
26 deriving Arbitrary via (GenericArbitrary Single)
34 deriving Arbitrary via (GenericArbitrary Single)
36+instance Arbitrary Single where
37+ arbitrary = genericArbitrary
38+ shrink = genericShrink
28prop_singleTotal :: Single -> Property
41prop_singleTotal :: Single -> Property
29prop_singleTotal = total
42prop_singleTotal = total
@@ -31,7 +44,13 @@ prop_singleTotal = total
31data Multiple = M1 | M2 | M3 Int
44data Multiple = M1 | M2 | M3 Int
32 deriving (Eq, Show, Generic)
45 deriving (Eq, Show, Generic)
33 deriving anyclass NFData
46 deriving anyclass NFData
47+#if MIN_VERSION_QuickCheck(2, 14, 0)
34 deriving Arbitrary via (GenericArbitrary Multiple)
48 deriving Arbitrary via (GenericArbitrary Multiple)
50+instance Arbitrary Multiple where
51+ arbitrary = genericArbitrary
52+ shrink = genericShrink
36prop_multipleTotal :: Multiple -> Property
55prop_multipleTotal :: Multiple -> Property
37prop_multipleTotal = total
56prop_multipleTotal = total
@@ -42,7 +61,13 @@ data Rec = Rec
42 , multiple :: Multiple
61 , multiple :: Multiple
43 } deriving (Eq, Show, Generic)
62 } deriving (Eq, Show, Generic)
44 deriving anyclass NFData
63 deriving anyclass NFData
64+#if MIN_VERSION_QuickCheck(2, 14, 0)
45− deriving Arbitrary via (GenericArbitrary Rec)
65+ deriving Arbitrary via (GenericArbitrary Rec)
67+instance Arbitrary Rec where
68+ arbitrary = genericArbitrary
69+ shrink = genericShrink
47prop_recTotal :: Rec -> Property
72prop_recTotal :: Rec -> Property
48prop_recTotal = total
73prop_recTotal = total
@@ -53,7 +78,13 @@ data Expr
53 | Mul Expr Expr
78 | Mul Expr Expr
54 deriving (Eq, Show, Generic)
79 deriving (Eq, Show, Generic)
55 deriving anyclass NFData
80 deriving anyclass NFData
81+#if MIN_VERSION_QuickCheck(2, 14, 0)
56 deriving Arbitrary via (GenericArbitrary Expr)
82 deriving Arbitrary via (GenericArbitrary Expr)
84+instance Arbitrary Expr where
85+ arbitrary = genericArbitrary
86+ shrink = genericShrink
58prop_exprTotal :: Expr -> Property
89prop_exprTotal :: Expr -> Property
59prop_exprTotal = total
90prop_exprTotal = total
@@ -67,7 +98,13 @@ data Recursive
67 | R5 Recursive String
98 | R5 Recursive String
68 deriving (Eq, Show, Generic)
99 deriving (Eq, Show, Generic)
69 deriving anyclass NFData
100 deriving anyclass NFData
101+#if MIN_VERSION_QuickCheck(2, 14, 0)
70 deriving Arbitrary via (GenericArbitrary Recursive)
102 deriving Arbitrary via (GenericArbitrary Recursive)
104+instance Arbitrary Recursive where
105+ arbitrary = genericArbitrary
106+ shrink = genericShrink
72prop_recursiveTotal :: Recursive -> Property
109prop_recursiveTotal :: Recursive -> Property
73prop_recursiveTotal = total
110prop_recursiveTotal = total
@@ -77,7 +114,13 @@ data DeepRecursive
78 deriving (Eq, Show, Generic)
115 deriving (Eq, Show, Generic)
79 deriving anyclass NFData
116 deriving anyclass NFData
117+#if MIN_VERSION_QuickCheck(2, 14, 0)
80 deriving Arbitrary via (GenericArbitrary DeepRecursive)
118 deriving Arbitrary via (GenericArbitrary DeepRecursive)
120+instance Arbitrary DeepRecursive where
121+ arbitrary = genericArbitrary
122+ shrink = genericShrink
82prop_deepRecursiveTotal :: DeepRecursive -> Property
125prop_deepRecursiveTotal :: DeepRecursive -> Property
83prop_deepRecursiveTotal = total
126prop_deepRecursiveTotal = total