packages feed

objectid-0.1.0.2: tests/TestAll.hs

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