@@ -15,17 +15,15 @@ module Streamly.Test.Data.Serialize (main) where
1515--------------------------------------------------------------------------------
1616
1717import Streamly.Internal.Data.Unbox (newBytes)
18−
19−import Test.Hspec as H
20−
18+import GHC.Generics (Generic)
19+import Streamly.Test.Data.Serialize.TH (genDatatype)
2120import Streamly.Internal.Data.Serialize.TH (deriveSerialize)
22−-- import Streamly.Internal.Data.Serialize (Serialize(..))
2321
2422import qualified Streamly.Internal.Data.Serialize as Serialize
2523
26−import Streamly.Test.Data.Serialize.TH (genDatatype)
27−
2824import Test.Hspec.QuickCheck
25+import Test.QuickCheck
26+import Test.Hspec as H
2927
3028--------------------------------------------------------------------------------
3129-- Generated types
@@ -34,6 +32,21 @@ import Test.Hspec.QuickCheck
3432$(genDatatype "CustomDatatype" 15)
3533$(deriveSerialize ''CustomDatatype)
3634
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+
3750--------------------------------------------------------------------------------
3851-- Test helpers
3952--------------------------------------------------------------------------------
@@ -91,12 +104,14 @@ testCases = do
91104 prop "[CustomDatatype]"
92105 $ \(x :: [CustomDatatype]) -> roundtrip x
93106
107+ prop "BinTree" $ \(x :: BinTree Int) -> roundtrip x
108+
94109--------------------------------------------------------------------------------
95110-- Main function
96111--------------------------------------------------------------------------------
97112
98113moduleName :: String
99−moduleName = "Data.Unboxed"
114+moduleName = "Data.Serialize"
100115
101116main :: IO ()
102117main = hspec $ H.parallel $ describe moduleName testCases