on master help sign in
Add a recursive ADT to the Serialize test-suite
4997b47Adithya Kumar
test/Streamly/Test/Data/Serialize.hs+22−7
@@ -15,17 +15,15 @@ module Streamly.Test.Data.Serialize (main) where
15--------------------------------------------------------------------------------
15--------------------------------------------------------------------------------
16
16
17import Streamly.Internal.Data.Unbox (newBytes)
17import Streamly.Internal.Data.Unbox (newBytes)
18−
18+import GHC.Generics (Generic)
19−import Test.Hspec as H
19+import Streamly.Test.Data.Serialize.TH (genDatatype)
20−
21import Streamly.Internal.Data.Serialize.TH (deriveSerialize)
20import Streamly.Internal.Data.Serialize.TH (deriveSerialize)
22−-- import Streamly.Internal.Data.Serialize (Serialize(..))
23
21
24import qualified Streamly.Internal.Data.Serialize as Serialize
22import qualified Streamly.Internal.Data.Serialize as Serialize
25
23
26−import Streamly.Test.Data.Serialize.TH (genDatatype)
27−
28import Test.Hspec.QuickCheck
24import Test.Hspec.QuickCheck
25+import Test.QuickCheck
26+import Test.Hspec as H
29
27
30--------------------------------------------------------------------------------
28--------------------------------------------------------------------------------
31-- Generated types
29-- Generated types
@@ -34,6 +32,21 @@ import Test.Hspec.QuickCheck
34$(genDatatype "CustomDatatype" 15)
32$(genDatatype "CustomDatatype" 15)
35$(deriveSerialize ''CustomDatatype)
33$(deriveSerialize ''CustomDatatype)
36
34
35+--------------------------------------------------------------------------------
36+-- Recursive type
37+--------------------------------------------------------------------------------
38+
39+-- Recursive ADT
40+data BinTree a
41+ = Tree (BinTree a) (BinTree a)
42+ | Leaf a
43+ deriving (Show, Read, Eq, Generic)
44+
45+$(deriveSerialize ''BinTree)
46+
47+instance Arbitrary a => Arbitrary (BinTree a) where
48+ arbitrary = oneof [Leaf <$> arbitrary, Tree <$> arbitrary <*> arbitrary]
49+
37--------------------------------------------------------------------------------
50--------------------------------------------------------------------------------
38-- Test helpers
51-- Test helpers
39--------------------------------------------------------------------------------
52--------------------------------------------------------------------------------
@@ -91,12 +104,14 @@ testCases = do
91 prop "[CustomDatatype]"
104 prop "[CustomDatatype]"
92 $ \(x :: [CustomDatatype]) -> roundtrip x
105 $ \(x :: [CustomDatatype]) -> roundtrip x
93
106
107+ prop "BinTree" $ \(x :: BinTree Int) -> roundtrip x
108+
94--------------------------------------------------------------------------------
109--------------------------------------------------------------------------------
95-- Main function
110-- Main function
96--------------------------------------------------------------------------------
111--------------------------------------------------------------------------------
97
112
98moduleName :: String
113moduleName :: String
99−moduleName = "Data.Unboxed"
114+moduleName = "Data.Serialize"
100
115
101main :: IO ()
116main :: IO ()
102main = hspec $ H.parallel $ describe moduleName testCases
117main = hspec $ H.parallel $ describe moduleName testCases