@@ -22,7 +22,7 @@ module Streamly.Test.Data.Serialize (main) where
2222--------------------------------------------------------------------------------
2323
2424import System.Random (randomRIO)
25−import Streamly.Internal.Data.Unbox (newBytes)
25+import Streamly.Internal.Data.Unbox (MutableByteArray, newBytes)
2626import GHC.Generics (Generic)
2727import Streamly.Test.Data.Serialize.TH (genDatatype)
2828import qualified Streamly.Internal.Data.Serialize.TH as Serialize
@@ -114,12 +114,11 @@ instance Arbitrary a => Arbitrary (BinTree a) where
114114-- Test helpers
115115--------------------------------------------------------------------------------
116116
117−roundtrip
118− :: forall a. (Eq a, Show a, Serialize.Serialize a)
117+poke ::
118+ forall a. Serialize.Serialize a
119119 => a
120− -> IO ()
121−roundtrip val = do
122−
120+ -> IO (MutableByteArray, Int, Int)
121+poke val = do
123122 let sz = Serialize.size 0 val
124123
125124 let excessSize = 100
@@ -132,16 +131,34 @@ roundtrip val = do
132131 arr <- newBytes arrSize
133132
134133 off1 <- Serialize.serialize serStartOff arr val
134+ off1 `shouldBe` serEndOff
135+ pure (arr, serStartOff, serEndOff)
136+
137+peekAndVerify ::
138+ forall a. (Eq a, Show a, Serialize.Serialize a)
139+ => (MutableByteArray, Int, Int)
140+ -> a
141+ -> IO ()
142+peekAndVerify (arr, serStartOff, serEndOff) val = do
135143 (off2, val2) <- Serialize.deserialize serStartOff arr serEndOff
136144 val2 `shouldBe` val
137− off2 `shouldBe` off1
138145 off2 `shouldBe` serEndOff
139− val `shouldBe` Serialize.decode (Serialize.encode val)
140146 let slice = Array.Array arr serStartOff serEndOff
141147 val `shouldBe` Serialize.decode slice
142148 clonedSlice <- Array.clone slice
143149 val `shouldBe` Serialize.decode clonedSlice
144150
151+roundtrip
152+ :: forall a. (Eq a, Show a, Serialize.Serialize a)
153+ => a
154+ -> IO ()
155+roundtrip val = do
156+
157+ val `shouldBe` Serialize.decode (Serialize.encode val)
158+
159+ res <- poke val
160+ peekAndVerify res val
161+
145162testSerializeList
146163 :: forall a. (Eq a, Show a, Serialize.Serialize a)
147164 => Int