@@ -20,9 +20,6 @@ module Streamly.Test.Data.Unbox (main) where
21--------------------------------------------------------------------------------
21--------------------------------------------------------------------------------
24−import Control.Monad (void)
26import Data.Complex (Complex ((:+)))
23import Data.Complex (Complex ((:+)))
27import Data.Functor.Const (Const (..))
24import Data.Functor.Const (Const (..))
28import Data.Functor.Identity (Identity (..))
25import Data.Functor.Identity (Identity (..))
@@ -52,6 +49,9 @@ import Streamly.Internal.Data.Unbox
52 , genericPokeByteIndex
49 , genericPokeByteIndex
53 , genericSizeOf
50 , genericSizeOf
54 , newBytes
51 , newBytes
57import Test.Hspec as H
57import Test.Hspec as H
@@ -64,14 +64,14 @@ import Test.Hspec as H
65#define MODULE_NAME "Data.Serialize.Deriving.TH"
65#define MODULE_NAME "Data.Serialize.Deriving.TH"
66#define DERIVE_UNBOX(typ) $(deriveSerialize ''typ)
66#define DERIVE_UNBOX(typ) $(deriveSerialize ''typ)
67−#define PEEK(i, arr, sz) fmap snd (deserialize i arr sz)
67+#define PEEK(i, arr, sz) (deserialize i arr sz)
68−#define POKE(i, arr, val) void (serialize i arr val)
68+#define POKE(i, arr, val) (serialize i arr val)
69#define TYPE_CLASS Serialize
69#define TYPE_CLASS Serialize
73−#define PEEK(i, arr, sz) peekByteIndex i arr
73+#define PEEK(i, arr, sz) peekByteIndexWithNextOff i arr
74−#define POKE(i, arr, val) pokeByteIndex i arr val
74+#define POKE(i, arr, val) pokeByteIndexWithNextOff i arr val
75#define TYPE_CLASS Unbox
75#define TYPE_CLASS Unbox
77#ifdef USE_TH
77#ifdef USE_TH
@@ -88,6 +88,33 @@ import Test.Hspec as H
91+--------------------------------------------------------------------------------
93+--------------------------------------------------------------------------------
97+peekByteIndexWithNextOff ::
102+peekByteIndexWithNextOff i arr = do
103+ val <- peekByteIndex i arr
104+ pure (i + sizeOf (Proxy :: Proxy a), val)
106+pokeByteIndexWithNextOff ::
112+pokeByteIndexWithNextOff i arr val = do
113+ pokeByteIndex i arr val
114+ pure $ i + sizeOf (Proxy :: Proxy a)
91--------------------------------------------------------------------------------
118--------------------------------------------------------------------------------
93--------------------------------------------------------------------------------
120--------------------------------------------------------------------------------
@@ -194,8 +221,11 @@ testSerialization val = do
194 (sizeOf (Proxy :: Proxy a))
221 (sizeOf (Proxy :: Proxy a))
196 arr <- newBytes len
223 arr <- newBytes len
197− POKE(0, arr, val)
224+ nextOff <- POKE(0, arr, val)
198− PEEK(0, arr, len) `shouldReturn` val
225+ (nextOff1, val1) <- PEEK(0, arr, len)
227+ nextOff1 `shouldBe` len
228+ nextOff `shouldBe` len
200testGenericConsistency ::
230testGenericConsistency ::
201 forall a.
231 forall a.
@@ -226,11 +256,15 @@ testGenericConsistency val = do
226 -- Test the serialization and deserialization
256 -- Test the serialization and deserialization
227 arr <- newBytes (sizeOf (Proxy :: Proxy a))
257 arr <- newBytes (sizeOf (Proxy :: Proxy a))
229− POKE(0, arr, val)
259+ nextOff <- POKE(0, arr, val)
230 genericPeekByteIndex arr 0 `shouldReturn` val
260 genericPeekByteIndex arr 0 `shouldReturn` val
232 genericPokeByteIndex arr 0 val
262 genericPokeByteIndex arr 0 val
233− PEEK(0, arr, len) `shouldReturn` val
263+ (nextOff1, val1) <- PEEK(0, arr, len)
266+ nextOff1 `shouldBe` len
267+ nextOff `shouldBe` len
236#ifndef USE_SERIALIZE
270#ifndef USE_SERIALIZE