{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE DataKinds #-} module Test.Data.Connection.Int where import Data.Connection.Int import Data.Int import Data.Word import Hedgehog import Test.Data.Connection import qualified Data.Connection.Property as Prop import qualified Hedgehog.Gen as G prop_connections_int16 :: Property prop_connections_int16 = withTests 1000 . property $ do i08 <- forAll $ gen_extended $ G.integral (ri @Int8) w08 <- forAll $ gen_extended $ G.integral (ri @Word8) i16 <- forAll $ G.integral (ri @Int16) i08' <- forAll $ gen_extended $ G.integral (ri @Int8) w08' <- forAll $ gen_extended $ G.integral (ri @Word8) i16' <- forAll $ G.integral (ri @Int16) assert $ Prop.adjoint w08i16 w08 i16 assert $ Prop.closed w08i16 w08 assert $ Prop.kernel w08i16 i16 assert $ Prop.monotonic w08i16 w08 w08' i16 i16' assert $ Prop.idempotent w08i16 w08 i16 assert $ Prop.adjoint i08i16 i08 i16 assert $ Prop.closed i08i16 i08 assert $ Prop.kernel i08i16 i16 assert $ Prop.monotonic i08i16 i08 i08' i16 i16' assert $ Prop.idempotent i08i16 i08 i16 prop_connections_int32 :: Property prop_connections_int32 = withTests 1000 . property $ do i08 <- forAll $ gen_extended $ G.integral (ri @Int8) w08 <- forAll $ gen_extended $ G.integral (ri @Word8) i16 <- forAll $ gen_extended $ G.integral (ri @Int16) w16 <- forAll $ gen_extended $ G.integral (ri @Word16) i32 <- forAll $ G.integral (ri @Int32) i08' <- forAll $ gen_extended $ G.integral (ri @Int8) w08' <- forAll $ gen_extended $ G.integral (ri @Word8) i16' <- forAll $ gen_extended $ G.integral (ri @Int16) w16' <- forAll $ gen_extended $ G.integral (ri @Word16) i32' <- forAll $ G.integral (ri @Int32) assert $ Prop.adjoint w08i32 w08 i32 assert $ Prop.closed w08i32 w08 assert $ Prop.kernel w08i32 i32 assert $ Prop.monotonic w08i32 w08 w08' i32 i32' assert $ Prop.idempotent w08i32 w08 i32 assert $ Prop.adjoint w16i32 w16 i32 assert $ Prop.closed w16i32 w16 assert $ Prop.kernel w16i32 i32 assert $ Prop.monotonic w16i32 w16 w16' i32 i32' assert $ Prop.idempotent w16i32 w16 i32 assert $ Prop.adjoint i08i32 i08 i32 assert $ Prop.closed i08i32 i08 assert $ Prop.kernel i08i32 i32 assert $ Prop.monotonic i08i32 i08 i08' i32 i32' assert $ Prop.idempotent i08i32 i08 i32 assert $ Prop.adjoint i16i32 i16 i32 assert $ Prop.closed i16i32 i16 assert $ Prop.kernel i16i32 i32 assert $ Prop.monotonic i16i32 i16 i16' i32 i32' assert $ Prop.idempotent i16i32 i16 i32 prop_connections_int64 :: Property prop_connections_int64 = withTests 1000 . property $ do i08 <- forAll $ gen_extended $ G.integral (ri @Int8) w08 <- forAll $ gen_extended $ G.integral (ri @Word8) i16 <- forAll $ gen_extended $ G.integral (ri @Int16) w16 <- forAll $ gen_extended $ G.integral (ri @Word16) i32 <- forAll $ gen_extended $ G.integral (ri @Int32) w32 <- forAll $ gen_extended $ G.integral (ri @Word32) i64 <- forAll $ G.integral (ri @Int64) i08' <- forAll $ gen_extended $ G.integral (ri @Int8) w08' <- forAll $ gen_extended $ G.integral (ri @Word8) i16' <- forAll $ gen_extended $ G.integral (ri @Int16) w16' <- forAll $ gen_extended $ G.integral (ri @Word16) i32' <- forAll $ gen_extended $ G.integral (ri @Int32) w32' <- forAll $ gen_extended $ G.integral (ri @Word32) i64' <- forAll $ G.integral (ri @Int64) assert $ Prop.adjoint w08i64 w08 i64 assert $ Prop.closed w08i64 w08 assert $ Prop.kernel w08i64 i64 assert $ Prop.monotonic w08i64 w08 w08' i64 i64' assert $ Prop.idempotent w08i64 w08 i64 assert $ Prop.adjoint w16i64 w16 i64 assert $ Prop.closed w16i64 w16 assert $ Prop.kernel w16i64 i64 assert $ Prop.monotonic w16i64 w16 w16' i64 i64' assert $ Prop.idempotent w16i64 w16 i64 assert $ Prop.adjoint w32i64 w32 i64 assert $ Prop.closed w32i64 w32 assert $ Prop.kernel w32i64 i64 assert $ Prop.monotonic w32i64 w32 w32' i64 i64' assert $ Prop.idempotent w32i64 w32 i64 assert $ Prop.adjoint i08i64 i08 i64 assert $ Prop.closed i08i64 i08 assert $ Prop.kernel i08i64 i64 assert $ Prop.monotonic i08i64 i08 i08' i64 i64' assert $ Prop.idempotent i08i64 i08 i64 assert $ Prop.adjoint i16i64 i16 i64 assert $ Prop.closed i16i64 i16 assert $ Prop.kernel i16i64 i64 assert $ Prop.monotonic i16i64 i16 i16' i64 i64' assert $ Prop.idempotent i16i64 i16 i64 assert $ Prop.adjoint i32i64 i32 i64 assert $ Prop.closed i32i64 i32 assert $ Prop.kernel i32i64 i64 assert $ Prop.monotonic i32i64 i32 i32' i64 i64' assert $ Prop.idempotent i32i64 i32 i64 prop_connections_int :: Property prop_connections_int = withTests 1000 . property $ do i08 <- forAll $ gen_extended $ G.integral (ri @Int8) w08 <- forAll $ gen_extended $ G.integral (ri @Word8) i16 <- forAll $ gen_extended $ G.integral (ri @Int16) w16 <- forAll $ gen_extended $ G.integral (ri @Word16) i32 <- forAll $ gen_extended $ G.integral (ri @Int32) w32 <- forAll $ gen_extended $ G.integral (ri @Word32) ixx <- forAll $ G.integral (ri @Int) i08' <- forAll $ gen_extended $ G.integral (ri @Int8) w08' <- forAll $ gen_extended $ G.integral (ri @Word8) i16' <- forAll $ gen_extended $ G.integral (ri @Int16) w16' <- forAll $ gen_extended $ G.integral (ri @Word16) i32' <- forAll $ gen_extended $ G.integral (ri @Int32) w32' <- forAll $ gen_extended $ G.integral (ri @Word32) ixx' <- forAll $ G.integral (ri @Int) assert $ Prop.adjoint w08ixx w08 ixx assert $ Prop.closed w08ixx w08 assert $ Prop.kernel w08ixx ixx assert $ Prop.monotonic w08ixx w08 w08' ixx ixx' assert $ Prop.idempotent w08ixx w08 ixx assert $ Prop.adjoint w16ixx w16 ixx assert $ Prop.closed w16ixx w16 assert $ Prop.kernel w16ixx ixx assert $ Prop.monotonic w16ixx w16 w16' ixx ixx' assert $ Prop.idempotent w16ixx w16 ixx assert $ Prop.adjoint w32ixx w32 ixx assert $ Prop.closed w32ixx w32 assert $ Prop.kernel w32ixx ixx assert $ Prop.monotonic w32ixx w32 w32' ixx ixx' assert $ Prop.idempotent w32ixx w32 ixx assert $ Prop.adjoint i08ixx i08 ixx assert $ Prop.closed i08ixx i08 assert $ Prop.kernel i08ixx ixx assert $ Prop.monotonic i08ixx i08 i08' ixx ixx' assert $ Prop.idempotent i08ixx i08 ixx assert $ Prop.adjoint i16ixx i16 ixx assert $ Prop.closed i16ixx i16 assert $ Prop.kernel i16ixx ixx assert $ Prop.monotonic i16ixx i16 i16' ixx ixx' assert $ Prop.idempotent i16ixx i16 ixx assert $ Prop.adjoint i32ixx i32 ixx assert $ Prop.closed i32ixx i32 assert $ Prop.kernel i32ixx ixx assert $ Prop.monotonic i32ixx i32 i32' ixx ixx' assert $ Prop.idempotent i32ixx i32 ixx prop_connections_integer :: Property prop_connections_integer = withTests 1000 . property $ do i08 <- forAll $ gen_extended $ G.integral (ri @Int8) w08 <- forAll $ gen_extended $ G.integral (ri @Word8) i16 <- forAll $ gen_extended $ G.integral (ri @Int16) w16 <- forAll $ gen_extended $ G.integral (ri @Word16) i32 <- forAll $ gen_extended $ G.integral (ri @Int32) w32 <- forAll $ gen_extended $ G.integral (ri @Word32) i64 <- forAll $ gen_extended $ G.integral (ri @Int64) w64 <- forAll $ gen_extended $ G.integral (ri @Word64) ixx <- forAll $ gen_extended $ G.integral (ri @Int) wxx <- forAll $ gen_extended $ G.integral (ri @Word) int <- forAll $ gen_maybe $ G.integral ri' i08' <- forAll $ gen_extended $ G.integral (ri @Int8) w08' <- forAll $ gen_extended $ G.integral (ri @Word8) i16' <- forAll $ gen_extended $ G.integral (ri @Int16) w16' <- forAll $ gen_extended $ G.integral (ri @Word16) i32' <- forAll $ gen_extended $ G.integral (ri @Int32) w32' <- forAll $ gen_extended $ G.integral (ri @Word32) i64' <- forAll $ gen_extended $ G.integral (ri @Int64) w64' <- forAll $ gen_extended $ G.integral (ri @Word64) ixx' <- forAll $ gen_extended $ G.integral (ri @Int) wxx' <- forAll $ gen_extended $ G.integral (ri @Word) int' <- forAll $ gen_maybe (G.integral ri') assert $ Prop.adjointL w08int w08 int assert $ Prop.closedL w08int w08 assert $ Prop.kernelL w08int int assert $ Prop.monotonicL w08int w08 w08' int int' assert $ Prop.idempotentL w08int w08 int assert $ Prop.adjointL w16int w16 int assert $ Prop.closedL w16int w16 assert $ Prop.kernelL w16int int assert $ Prop.monotonicL w16int w16 w16' int int' assert $ Prop.idempotentL w16int w16 int assert $ Prop.adjointL w32int w32 int assert $ Prop.closedL w32int w32 assert $ Prop.kernelL w32int int assert $ Prop.monotonicL w32int w32 w32' int int' assert $ Prop.idempotentL w32int w32 int assert $ Prop.adjointL w64int w64 int assert $ Prop.closedL w64int w64 assert $ Prop.kernelL w64int int assert $ Prop.monotonicL w64int w64 w64' int int' assert $ Prop.idempotentL w64int w64 int assert $ Prop.adjointL wxxint wxx int assert $ Prop.closedL wxxint wxx assert $ Prop.kernelL wxxint int assert $ Prop.monotonicL wxxint wxx wxx' int int' assert $ Prop.idempotentL wxxint wxx int assert $ Prop.adjointL i08int i08 int assert $ Prop.closedL i08int i08 assert $ Prop.kernelL i08int int assert $ Prop.monotonicL i08int i08 i08' int int' assert $ Prop.idempotentL i08int i08 int assert $ Prop.adjointL i16int i16 int assert $ Prop.closedL i16int i16 assert $ Prop.kernelL i16int int assert $ Prop.monotonicL i16int i16 i16' int int' assert $ Prop.idempotentL i16int i16 int assert $ Prop.adjointL i32int i32 int assert $ Prop.closedL i32int i32 assert $ Prop.kernelL i32int int assert $ Prop.monotonicL i32int i32 i32' int int' assert $ Prop.idempotentL i32int i32 int assert $ Prop.adjointL i64int i64 int assert $ Prop.closedL i64int i64 assert $ Prop.kernelL i64int int assert $ Prop.monotonicL i64int i64 i64' int int' assert $ Prop.idempotentL i64int i64 int assert $ Prop.adjointL ixxint ixx int assert $ Prop.closedL ixxint ixx assert $ Prop.kernelL ixxint int assert $ Prop.monotonicL ixxint ixx ixx' int int' assert $ Prop.idempotentL ixxint ixx int tests :: IO Bool tests = checkParallel $$(discover)