packages feed

postgresql-binary-0.15.0.1: tasty/Main/Properties.hs

module Main.Properties where

import qualified Database.PostgreSQL.LibPQ as LibPQ
import qualified Main.IO as IO
import Main.Prelude hiding (isLeft, isRight)
import qualified Main.TextEncoder as C
import qualified PostgreSQL.Binary.Decoding as A
import qualified PostgreSQL.Binary.Encoding as B
import Test.QuickCheck

roundtrip ::
  (Show a, Eq a) =>
  LibPQ.Oid ->
  (Bool -> (a -> B.Encoding)) ->
  (Bool -> A.Value a) ->
  a ->
  Property
roundtrip oid encoder decoder value =
  Right value === unsafePerformIO (IO.roundtrip oid encoder decoder value)

stdRoundtrip :: (Show a, Eq a) => LibPQ.Oid -> (a -> B.Encoding) -> A.Value a -> a -> Property
stdRoundtrip oid encoder decoder value =
  roundtrip oid (const encoder) (const decoder) value

textRoundtrip :: (Show a, Eq a) => LibPQ.Oid -> C.Encoder a -> (Bool -> A.Value a) -> a -> Property
textRoundtrip oid encoder decoder value =
  Right value === unsafePerformIO (IO.textRoundtrip oid encoder decoder value)