module Main (main) where import Data.Array.Byte (ByteArray) import Data.Binary (Binary, decode, encode) import Data.Binary.Orphans () import Data.Monoid (Sum) import Data.Proxy (Proxy (..)) import Data.Semigroup (Min (..)) -- import Data.Tuple.Solo (Solo (..)) import Numeric.Natural (Natural) import Test.QuickCheck (Property, (===)) import Test.QuickCheck.Instances () import Test.Tasty (TestTree, defaultMain, testGroup) import Test.Tasty.QuickCheck (testProperty) main :: IO () main = defaultMain tests tests :: TestTree tests = testGroup "Roundtrip" [ testProperty "Natural" $ roundtrip (Proxy :: Proxy Natural) , testProperty "Sum Int" $ roundtrip (Proxy :: Proxy (Sum Int)) , testProperty "Min Int" $ roundtrip (Proxy :: Proxy (Min Int)) -- , testProperty "Solo Int" $ roundtrip (Proxy :: Proxy (Solo Int)) -- no Arbitrary instance (always) , testProperty "ByteArray" $ roundtrip (Proxy :: Proxy ByteArray) ] roundtrip :: (Eq a, Show a, Binary a) => Proxy a -> a -> Property roundtrip _ x = x === decode (encode x)