{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} import Test.Tasty import Test.Tasty.QuickCheck as QC import Codec.Serialise import Data.Typeable import qualified Data.Vector.Fixed as F import qualified Data.Vector.Fixed.Unboxed as U import qualified Data.Vector.Fixed.Boxed as B import qualified Data.Vector.Fixed.Storable as S import qualified Data.Vector.Fixed.Primitive as P import Data.Vector.Fixed.Instances.CBOR () tests = testGroup "cereal" [ testTagged p_serialize (T :: T (F.Only Int)) , testTagged p_serialize (T :: T (F.VecList 2 Int)) , testTagged p_serialize (T :: T (F.VecList 3 Int)) , testTagged p_serialize (T :: T (F.VecList 4 Int)) -- , testTagged p_serialize (T :: T (U.Vec 2 Int)) , testTagged p_serialize (T :: T (U.Vec 3 Int)) , testTagged p_serialize (T :: T (U.Vec 4 Int)) -- , testTagged p_serialize (T :: T (B.Vec 2 Int)) , testTagged p_serialize (T :: T (B.Vec 3 Int)) , testTagged p_serialize (T :: T (B.Vec 4 Int)) -- , testTagged p_serialize (T :: T (S.Vec 2 Int)) , testTagged p_serialize (T :: T (S.Vec 3 Int)) , testTagged p_serialize (T :: T (S.Vec 4 Int)) -- , testTagged p_serialize (T :: T (P.Vec 2 Int)) , testTagged p_serialize (T :: T (P.Vec 3 Int)) , testTagged p_serialize (T :: T (P.Vec 4 Int)) ] p_serialize :: (Serialise a, Arbitrary a, Eq a) => T a -> a -> Bool p_serialize _ a = a == (deserialise . serialise) a data T a = T testTagged :: forall a b. (Testable b, Typeable a) => (T a -> b) -> T a -> TestTree testTagged prop t = testProperty (show $ typeOf (undefined :: a)) (prop t) main :: IO () main = defaultMain tests ---------------------------------------------------------------- instance Arbitrary a => Arbitrary (F.Only a) where arbitrary = F.replicateM arbitrary instance Arbitrary a => Arbitrary (F.Empty a) where arbitrary = F.replicateM arbitrary instance (F.Arity n, Arbitrary a) => Arbitrary (F.VecList n a) where arbitrary = F.replicateM arbitrary instance (U.Unbox n a, Arbitrary a) => Arbitrary (U.Vec n a) where arbitrary = F.replicateM arbitrary instance (F.Arity n, Arbitrary a) => Arbitrary (B.Vec n a) where arbitrary = F.replicateM arbitrary instance (F.Arity n, S.Storable a, Arbitrary a) => Arbitrary (S.Vec n a) where arbitrary = F.replicateM arbitrary instance (F.Arity n, P.Prim a, Arbitrary a) => Arbitrary (P.Vec n a) where arbitrary = F.replicateM arbitrary