connections-0.1.0: test/Test/Data/Connection/Int.hs
{-# LANGUAGE TemplateHaskell #-}
module Test.Data.Connection.Int where
import Data.Connection.Int
import Data.Connection.Conn
import Data.Int
import Data.Word
import Hedgehog
import Prelude hiding (Bounded)
import Test.Data.Connection
import qualified Data.Connection.Property as Prop
import qualified Hedgehog.Gen as G
prop_connectionsL :: Property
prop_connectionsL = withTests 1000 . property $ do
i08 <- forAll $ G.integral (ri @Int8)
w08 <- forAll $ G.integral (ri @Word8)
i16 <- forAll $ G.integral (ri @Int16)
w16 <- forAll $ G.integral (ri @Word16)
i32 <- forAll $ G.integral (ri @Int32)
w32 <- forAll $ G.integral (ri @Word32)
i64 <- forAll $ G.integral (ri @Int64)
w64 <- forAll $ G.integral (ri @Word64)
ixx <- forAll $ G.integral (ri @Int)
wxx <- forAll $ G.integral (ri @Word)
int <- forAll $ G.integral ri'
nat <- forAll $ G.integral rn
mnt <- forAll $ gen_maybe (G.integral ri')
i08' <- forAll $ G.integral (ri @Int8)
w08' <- forAll $ G.integral (ri @Word8)
i16' <- forAll $ G.integral (ri @Int16)
w16' <- forAll $ G.integral (ri @Word16)
i32' <- forAll $ G.integral (ri @Int32)
w32' <- forAll $ G.integral (ri @Word32)
i64' <- forAll $ G.integral (ri @Int64)
w64' <- forAll $ G.integral (ri @Word64)
ixx' <- forAll $ G.integral (ri @Int)
wxx' <- forAll $ G.integral (ri @Word)
int' <- forAll $ G.integral ri'
nat' <- forAll $ G.integral rn
mnt' <- forAll $ gen_maybe (G.integral ri')
assert $ Prop.adjointL intnat int nat
--assert $ Prop.adjointL natint nat mnt
assert $ Prop.adjointL ixxwxx ixx wxx
assert $ Prop.adjointL i64w64 i64 w64
assert $ Prop.adjointL i32w32 i32 w32
assert $ Prop.adjointL i16w16 i16 w16
assert $ Prop.adjointL i08w08 i08 w08
assert $ Prop.closedL intnat int
--assert $ Prop.closedL natint nat
assert $ Prop.closedL ixxwxx ixx
assert $ Prop.closedL i64w64 i64
assert $ Prop.closedL i32w32 i32
assert $ Prop.closedL i16w16 i16
assert $ Prop.closedL i08w08 i08
assert $ Prop.kernelL intnat nat
--assert $ Prop.kernelL natint mnt
assert $ Prop.kernelL ixxwxx wxx
assert $ Prop.kernelL i64w64 w64
assert $ Prop.kernelL i32w32 w32
assert $ Prop.kernelL i16w16 w16
assert $ Prop.kernelL i08w08 w08
assert $ Prop.monotonicL intnat int int' nat nat'
--assert $ Prop.monotonicL natint nat nat' mnt mnt'
assert $ Prop.monotonicL ixxwxx ixx ixx' wxx wxx'
assert $ Prop.monotonicL i64w64 i64 i64' w64 w64'
assert $ Prop.monotonicL i32w32 i32 i32' w32 w32'
assert $ Prop.monotonicL i16w16 i16 i16' w16 w16'
assert $ Prop.monotonicL i08w08 i08 i08' w08 w08'
assert $ Prop.idempotentL intnat int nat
-- assert $ Prop.idempotentL natint nat mnt
assert $ Prop.idempotentL ixxwxx ixx wxx
assert $ Prop.idempotentL i64w64 i64 w64
assert $ Prop.idempotentL i32w32 i32 w32
assert $ Prop.idempotentL i16w16 i16 w16
assert $ Prop.idempotentL i08w08 i08 w08
prop_connectionsR :: Property
prop_connectionsR = withTests 1000 . property $ do
i08 <- forAll $ G.integral (ri @Int8)
w08 <- forAll $ G.integral (ri @Word8)
i16 <- forAll $ G.integral (ri @Int16)
w16 <- forAll $ G.integral (ri @Word16)
i32 <- forAll $ G.integral (ri @Int32)
w32 <- forAll $ G.integral (ri @Word32)
i64 <- forAll $ G.integral (ri @Int64)
w64 <- forAll $ G.integral (ri @Word64)
ixx <- forAll $ G.integral (ri @Int)
wxx <- forAll $ G.integral (ri @Word)
int <- forAll $ G.integral ri'
nat <- forAll $ G.integral rn
mnt <- forAll $ gen_maybe (G.integral ri')
i08' <- forAll $ G.integral (ri @Int8)
w08' <- forAll $ G.integral (ri @Word8)
i16' <- forAll $ G.integral (ri @Int16)
w16' <- forAll $ G.integral (ri @Word16)
i32' <- forAll $ G.integral (ri @Int32)
w32' <- forAll $ G.integral (ri @Word32)
i64' <- forAll $ G.integral (ri @Int64)
w64' <- forAll $ G.integral (ri @Word64)
ixx' <- forAll $ G.integral (ri @Int)
wxx' <- forAll $ G.integral (ri @Word)
int' <- forAll $ G.integral ri'
nat' <- forAll $ G.integral rn
mnt' <- forAll $ gen_maybe (G.integral ri')
assert $ Prop.adjointR (swapR intnat) nat int
-- assert $ Prop.adjointR (swapR natint) mnt nat
assert $ Prop.adjointR (swapR ixxwxx) wxx ixx
assert $ Prop.adjointR (swapR i64w64) w64 i64
assert $ Prop.adjointR (swapR i32w32) w32 i32
assert $ Prop.adjointR (swapR i16w16) w16 i16
assert $ Prop.adjointR (swapR i08w08) w08 i08
assert $ Prop.closedR (swapR intnat) nat
--assert $ Prop.closedR (swapR natint) mnt
assert $ Prop.closedR (swapR ixxwxx) wxx
assert $ Prop.closedR (swapR i64w64) w64
assert $ Prop.closedR (swapR i32w32) w32
assert $ Prop.closedR (swapR i16w16) w16
assert $ Prop.closedR (swapR i08w08) w08
assert $ Prop.kernelR (swapR intnat) int
--assert $ Prop.kernelR (swapR natint) nat
assert $ Prop.kernelR (swapR ixxwxx) ixx
assert $ Prop.kernelR (swapR i64w64) i64
assert $ Prop.kernelR (swapR i32w32) i32
assert $ Prop.kernelR (swapR i16w16) i16
assert $ Prop.kernelR (swapR i08w08) i08
assert $ Prop.monotonicR (swapR intnat) nat nat' int int'
-- assert $ Prop.monotonicR (swapR natint) mnt mnt' nat nat'
assert $ Prop.monotonicR (swapR ixxwxx) wxx wxx' ixx ixx'
assert $ Prop.monotonicR (swapR i64w64) w64 w64' i64 i64'
assert $ Prop.monotonicR (swapR i32w32) w32 w32' i32 i32'
assert $ Prop.monotonicR (swapR i16w16) w16 w16' i16 i16'
assert $ Prop.monotonicR (swapR i08w08) w08 w08' i08 i08'
assert $ Prop.idempotentR (swapR intnat) nat int
-- assert $ Prop.idempotentR (swapR natint) mnt nat
assert $ Prop.idempotentR (swapR ixxwxx) wxx ixx
assert $ Prop.idempotentR (swapR i64w64) w64 i64
assert $ Prop.idempotentR (swapR i32w32) w32 i32
assert $ Prop.idempotentR (swapR i16w16) w16 i16
assert $ Prop.idempotentR (swapR i08w08) w08 i08
tests :: IO Bool
tests = checkParallel $$(discover)