@@ -1,3 +1,5 @@
1+{-# LANGUAGE TemplateHaskell #-}
2+
13-- |
24-- Module : Streamly.Test.Data.Serialize
35-- Copyright : (c) 2022 Composewell technologies
@@ -16,26 +18,37 @@ import Streamly.Internal.Data.Unbox (newBytes)
1618
1719import Test.Hspec as H
1820
21+import Streamly.Internal.Data.Serialize.TH (deriveSerialize)
22+-- import Streamly.Internal.Data.Serialize (Serialize(..))
23+
1924import qualified Streamly.Internal.Data.Serialize as Serialize
2025
26+import Streamly.Test.Data.Serialize.TH (genDatatype)
27+
28+import Test.Hspec.QuickCheck
29+
30+--------------------------------------------------------------------------------
31+-- Generated types
32+--------------------------------------------------------------------------------
33+
34+$(genDatatype "CustomDatatype" 15)
35+$(deriveSerialize ''CustomDatatype)
36+
2137--------------------------------------------------------------------------------
2238-- Test helpers
2339--------------------------------------------------------------------------------
2440
25−testSerializeList
41+roundtrip
2642 :: forall a. (Eq a, Show a, Serialize.Serialize a)
27− => Int
28− -> a
43+ => a
2944 -> IO ()
30−testSerializeList sizeOfA val = do
45+roundtrip val = do
3146
3247 let sz =
3348 case Serialize.size :: Serialize.Size a of
3449 Serialize.VarSize f -> f val
3550 Serialize.ConstSize csz -> csz
3651
37− sz `shouldBe` sizeOfA
38−
3952 arr <- newBytes sz
4053
4154 off1 <- Serialize.serialize 0 arr val
@@ -43,6 +56,22 @@ testSerializeList sizeOfA val = do
4356 val2 `shouldBe` val
4457 off2 `shouldBe` off1
4558
59+testSerializeList
60+ :: forall a. (Eq a, Show a, Serialize.Serialize a)
61+ => Int
62+ -> a
63+ -> IO ()
64+testSerializeList sizeOfA val = do
65+
66+ let sz =
67+ case Serialize.size :: Serialize.Size a of
68+ Serialize.VarSize f -> f val
69+ Serialize.ConstSize csz -> csz
70+
71+ sz `shouldBe` sizeOfA
72+
73+ roundtrip val
74+
4675--------------------------------------------------------------------------------
4776-- Tests
4877--------------------------------------------------------------------------------
@@ -57,6 +86,11 @@ testCases = do
5786 (8 + 3 * 8 + 6 * 8)
5887 ([[1], [1, 2], [1, 2, 3]] :: [[Int]])
5988
89+ prop "CustomDatatype"
90+ $ \(x :: CustomDatatype) -> roundtrip x
91+ prop "[CustomDatatype]"
92+ $ \(x :: [CustomDatatype]) -> roundtrip x
93+
6094--------------------------------------------------------------------------------
6195-- Main function
6296--------------------------------------------------------------------------------