module Main ( main ) where import Data.ObjectID import qualified Data.ByteString as ByteString import Data.ByteString.Arbitrary import Data.Serialize ( encode, decode ) import Data.Word ( Word64 ) import Test.Tasty import Test.Tasty.QuickCheck ( testProperty ) main :: IO () main = defaultMain $ testGroup "ObjectID" [ testProperty "ByteString" bytestring , testProperty "Integer" integer , testProperty "Double" double , testProperty "Word" word , testProperty "Neg ByteString" neg_bytestring , testProperty "Neg Integer" neg_integer , testProperty "Neg Double" neg_double , testProperty "Neg Word" neg_word ] where bytestring :: ArbByteString -> Bool bytestring (ABS bs) = let oid = calculateByteString bs ser = encode oid Right des = decode ser in oid == des integer :: Integer -> Bool integer = seri double :: Double -> Bool double = seri word :: Word64 -> Bool word = seri seri s = let oid = calculateSerialize s ser = encode oid Right des = decode ser in oid == des neg_bytestring :: ArbByteString -> Bool neg_bytestring (ABS bs) = let oid = calculateSerialize bs ser = ByteString.reverse $ encode oid Right des = decode ser in oid /= des neg_integer :: Integer -> Bool neg_integer = neg_seri neg_double :: Double -> Bool neg_double = neg_seri neg_word :: Word64 -> Bool neg_word = neg_seri neg_seri s = let oid = calculateSerialize s ser = ByteString.reverse $ encode oid Right des = decode ser in oid /= des