{-# LANGUAGE ScopedTypeVariables #-}
import qualified Data.Bytes.Get as Bytes
import qualified Data.Bytes.Put as Bytes
import qualified Data.Bytes.Serial as Bytes
import qualified Data.Vector as V
import qualified Data.Vector.Generic as VG
import qualified Data.Vector.Unboxed as VU
import Data.Vector.Serial ()
import qualified Data.Vector.Storable as VS
import Test.Tasty
import Test.Tasty.QuickCheck
roundTrip
:: forall v a
. (Eq (v a), Bytes.Serial (v a), VG.Vector v a)
=> v a
-> Property
roundTrip v =
let ev' = Bytes.runGetS Bytes.deserialize (Bytes.runPutS (Bytes.serialize v))
in property (ev' == Right v)
main = defaultMain $ testGroup "Vector Serial instances"
[ testProperty "Unboxed" $ roundTrip $ VU.enumFromTo z 100
, testProperty "Storable" $ roundTrip $ VS.enumFromTo z 100
, testProperty "Boxed" $ roundTrip $ V.enumFromTo z 100
]
where
z = 0 :: Int