@@ -1,3 +1,5 @@
1+{-# LANGUAGE TemplateHaskell #-}
2-- Module : Streamly.Test.Data.Serialize
4-- Module : Streamly.Test.Data.Serialize
3-- Copyright : (c) 2022 Composewell technologies
5-- Copyright : (c) 2022 Composewell technologies
@@ -16,26 +18,37 @@ import Streamly.Internal.Data.Unbox (newBytes)
17import Test.Hspec as H
19import Test.Hspec as H
21+import Streamly.Internal.Data.Serialize.TH (deriveSerialize)
22+-- import Streamly.Internal.Data.Serialize (Serialize(..))
19import qualified Streamly.Internal.Data.Serialize as Serialize
24import qualified Streamly.Internal.Data.Serialize as Serialize
26+import Streamly.Test.Data.Serialize.TH (genDatatype)
28+import Test.Hspec.QuickCheck
30+--------------------------------------------------------------------------------
32+--------------------------------------------------------------------------------
34+$(genDatatype "CustomDatatype" 15)
35+$(deriveSerialize ''CustomDatatype)
21--------------------------------------------------------------------------------
37--------------------------------------------------------------------------------
22-- Test helpers
38-- Test helpers
23--------------------------------------------------------------------------------
39--------------------------------------------------------------------------------
25−testSerializeList
41+roundtrip
26 :: forall a. (Eq a, Show a, Serialize.Serialize a)
42 :: forall a. (Eq a, Show a, Serialize.Serialize a)
30−testSerializeList sizeOfA val = do
45+roundtrip val = do
33 case Serialize.size :: Serialize.Size a of
48 case Serialize.size :: Serialize.Size a of
34 Serialize.VarSize f -> f val
49 Serialize.VarSize f -> f val
35 Serialize.ConstSize csz -> csz
50 Serialize.ConstSize csz -> csz
37− sz `shouldBe` sizeOfA
39 arr <- newBytes sz
52 arr <- newBytes sz
41 off1 <- Serialize.serialize 0 arr val
54 off1 <- Serialize.serialize 0 arr val
@@ -43,6 +56,22 @@ testSerializeList sizeOfA val = do
43 val2 `shouldBe` val
56 val2 `shouldBe` val
44 off2 `shouldBe` off1
57 off2 `shouldBe` off1
60+ :: forall a. (Eq a, Show a, Serialize.Serialize a)
64+testSerializeList sizeOfA val = do
67+ case Serialize.size :: Serialize.Size a of
68+ Serialize.VarSize f -> f val
69+ Serialize.ConstSize csz -> csz
71+ sz `shouldBe` sizeOfA
46--------------------------------------------------------------------------------
75--------------------------------------------------------------------------------
48--------------------------------------------------------------------------------
77--------------------------------------------------------------------------------
@@ -57,6 +86,11 @@ testCases = do
57 (8 + 3 * 8 + 6 * 8)
86 (8 + 3 * 8 + 6 * 8)
58 ([[1], [1, 2], [1, 2, 3]] :: [[Int]])
87 ([[1], [1, 2], [1, 2, 3]] :: [[Int]])
89+ prop "CustomDatatype"
90+ $ \(x :: CustomDatatype) -> roundtrip x
91+ prop "[CustomDatatype]"
92+ $ \(x :: [CustomDatatype]) -> roundtrip x
60--------------------------------------------------------------------------------
94--------------------------------------------------------------------------------
61-- Main function
95-- Main function
62--------------------------------------------------------------------------------
96--------------------------------------------------------------------------------