@@ -0,0 +1,237 @@
1+module Main (main) where
3+import Data.Word (Word8, Word16, Word32, Word64)
4+import GHC.Int (Int8, Int16, Int32, Int64)
11+import Test.QuickCheck.Monadic (monadicIO)
13+import qualified Streamly.Internal.Serialize.FromBytes as Decoder
14+import qualified Streamly.Internal.Serialize.ToBytes as Encoder
15+import qualified Streamly.Data.Stream as Stream
16+import Streamly.Internal.Data.Parser (Parser)
19+ (maximum, minimum, elem, notElem, null, product, sum, head, last, take)
20+import Test.Hspec as H
21+import Test.Hspec.QuickCheck
22+import GHC.Base (unsafeChr)
33+chooseWord8 :: (Word8, Word8) -> Gen Word8
36+chooseWord16 :: (Word16, Word16) -> Gen Word16
39+chooseWord32 :: (Word32, Word32) -> Gen Word32
42+chooseWord64 :: (Word64, Word64) -> Gen Word64
45+chooseInt8 :: (Int8, Int8) -> Gen Int8
48+chooseInt16 :: (Int16, Int16) -> Gen Int16
51+chooseInt32 :: (Int32, Int32) -> Gen Int32
54+chooseInt64 :: (Int64, Int64) -> Gen Int64
57+chooseFloat :: (Float, Float) -> Gen Float
60+chooseDouble :: (Double, Double) -> Gen Double
63+chooseChar :: (Char, Char) -> Gen Char
66+action :: (Monad m, Eq a) =>
68+ -> (a -> Stream.Stream m Word8)
73+ v1 <- Stream.parse dec str
82+ let str = Encoder.unit
83+ v1 <- Stream.parse Decoder.unit str
91+ forAll (chooseWord8 (0, 1)) $ \case
92+ 0 -> monadicIO $ action False Encoder.bool Decoder.bool
93+ _ -> monadicIO $ action True Encoder.bool Decoder.bool
97+ forAll (chooseWord8 (0, 2)) $ \case
98+ 0 -> monadicIO $ action LT Encoder.ordering Decoder.ordering
99+ 1 -> monadicIO $ action EQ Encoder.ordering Decoder.ordering
100+ _ -> monadicIO $ action GT Encoder.ordering Decoder.ordering
104+ forAll (chooseWord8 (0, 255)) $ \x ->
105+ monadicIO $ action x Encoder.word8 Decoder.word8
109+ forAll (chooseWord16 (0, word16Max)) $ \x ->
110+ monadicIO $ action x Encoder.word16be Decoder.word16be
114+ forAll (chooseWord32 (0, word32Max)) $ \x ->
115+ monadicIO $ action x Encoder.word32be Decoder.word32be
119+ forAll (chooseWord64 (0, word64Max)) $ \x ->
120+ monadicIO $ action x Encoder.word64be Decoder.word64be
124+ forAll (chooseWord16 (0, word16Max)) $ \x ->
125+ monadicIO $ action x Encoder.word16le Decoder.word16le
129+ forAll (chooseWord32 (0, word32Max)) $ \x ->
130+ monadicIO $ action x Encoder.word32le Decoder.word32le
134+ forAll (chooseWord64 (0, word64Max)) $ \x ->
135+ monadicIO $ action x Encoder.word64le Decoder.word64le
139+ forAll (chooseInt8 (-128, 127)) $ \x ->
140+ monadicIO $ action x Encoder.int8 Decoder.int8
144+ forAll (chooseInt16 (-32768, 32767)) $ \x ->
145+ monadicIO $ action x Encoder.int16be Decoder.int16be
149+ forAll (chooseInt32 (-2147483648, 2147483647)) $ \x ->
150+ monadicIO $ action x Encoder.int32be Decoder.int32be
154+ forAll (chooseInt64 (-9223372036854775808, 9223372036854775807)) $ \x ->
155+ monadicIO $ action x Encoder.int64be Decoder.int64be
159+ forAll (chooseInt16 (-32768, 32767)) $ \x ->
160+ monadicIO $ action x Encoder.int16le Decoder.int16le
164+ forAll (chooseInt32 (-2147483648, 2147483647)) $ \x ->
165+ monadicIO $ action x Encoder.int32le Decoder.int32le
169+ forAll (chooseInt64 (-9223372036854775808, 9223372036854775807)) $ \x ->
170+ monadicIO $ action x Encoder.int64le Decoder.int64le
172+float32be :: Property
174+ forAll (chooseFloat (-3.40282e+38, 3.40282e+38)) $ \x ->
175+ monadicIO $ action x Encoder.float32be Decoder.float32be
177+float32le :: Property
179+ forAll (chooseFloat (-3.40282e+38, 3.40282e+38)) $ \x ->
180+ monadicIO $ action x Encoder.float32le Decoder.float32le
182+double64be :: Property
184+ forAll (chooseDouble (-1.79769e+308, 1.79769e+308)) $ \x ->
185+ monadicIO $ action x Encoder.double64be Decoder.double64be
187+double64le :: Property
189+ forAll (chooseDouble (-1.79769e+308, 1.79769e+308)) $ \x ->
190+ monadicIO $ action x Encoder.double64le Decoder.double64le
192+charLatin1 :: Property
193+charLatin1 = forAll (chooseChar (unsafeChr 0, unsafeChr 255)) $ \x ->
194+ monadicIO $ action x Encoder.charLatin1 Decoder.charLatin1
197+moduleName = "Serialize.Serializable"
202+ describe moduleName $ do
204+ prop "unit" Main.unit
207+ prop "bool" Main.bool
210+ prop "ordering" Main.ordering
213+ prop "word8" Main.word8
214+ prop "word16be" Main.word16be
215+ prop "word32be" Main.word32be
216+ prop "word64be" Main.word64be
217+ prop "word16le" Main.word16le
218+ prop "word32le" Main.word32le
219+ prop "word64le" Main.word64le
222+ prop "int8" Main.int8
223+ prop "int16be" Main.int16be
224+ prop "int32be" Main.int32be
225+ prop "int64be" Main.int64be
226+ prop "int16le" Main.int16le
227+ prop "int32le" Main.int32le
228+ prop "int64le" Main.int64le
231+ prop "float32be" Main.float32be
232+ prop "float32le" Main.float32le
233+ prop "double64be" Main.double64be
234+ prop "double64le" Main.double64le
237+ prop "charLatin1" Main.charLatin1