module Test.Consensus.Shelley.Coherence (tests) where
import Cardano.Ledger.Alonzo.Scripts (ExUnits, pointWiseExUnits)
import qualified Data.Measure as Measure
import Data.Word (Word32)
import Ouroboros.Consensus.Ledger.SupportsMempool
( ByteSize32 (..)
, IgnoringOverflow (..)
)
import Ouroboros.Consensus.Shelley.Ledger.Mempool
( AlonzoMeasure (..)
, ConwayMeasure (..)
, fromExUnits
)
import Test.Cardano.Ledger.Alonzo.Serialisation.Generators ()
import Test.Tasty
import Test.Tasty.QuickCheck
tests :: TestTree
tests :: TestTree
tests =
TestName -> [TestTree] -> TestTree
testGroup
TestName
"Shelley coherences"
[ TestName
-> (Word32 -> Word32 -> ExUnits -> ExUnits -> Property) -> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"Measure.<= uses pointWiseExUnits (<=)" Word32 -> Word32 -> ExUnits -> ExUnits -> Property
leqCoherence
]
leqCoherence :: Word32 -> Word32 -> ExUnits -> ExUnits -> Property
leqCoherence :: Word32 -> Word32 -> ExUnits -> ExUnits -> Property
leqCoherence Word32
w1 Word32
w2 ExUnits
eu1 ExUnits
eu2 =
Bool
actual Bool -> Bool -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Bool
expected
where
inj :: ExUnits -> ConwayMeasure
inj ExUnits
eu =
AlonzoMeasure -> IgnoringOverflow ByteSize32 -> ConwayMeasure
ConwayMeasure
( IgnoringOverflow ByteSize32 -> ExUnits' Natural -> AlonzoMeasure
AlonzoMeasure
(ByteSize32 -> IgnoringOverflow ByteSize32
forall a. a -> IgnoringOverflow a
IgnoringOverflow (ByteSize32 -> IgnoringOverflow ByteSize32)
-> ByteSize32 -> IgnoringOverflow ByteSize32
forall a b. (a -> b) -> a -> b
$ Word32 -> ByteSize32
ByteSize32 Word32
w1)
(ExUnits -> ExUnits' Natural
fromExUnits ExUnits
eu)
)
(ByteSize32 -> IgnoringOverflow ByteSize32
forall a. a -> IgnoringOverflow a
IgnoringOverflow (ByteSize32 -> IgnoringOverflow ByteSize32)
-> ByteSize32 -> IgnoringOverflow ByteSize32
forall a b. (a -> b) -> a -> b
$ Word32 -> ByteSize32
ByteSize32 Word32
w2)
actual :: Bool
actual = ExUnits -> ConwayMeasure
inj ExUnits
eu1 ConwayMeasure -> ConwayMeasure -> Bool
forall a. Measure a => a -> a -> Bool
Measure.<= ExUnits -> ConwayMeasure
inj ExUnits
eu2
expected :: Bool
expected = (Natural -> Natural -> Bool) -> ExUnits -> ExUnits -> Bool
pointWiseExUnits Natural -> Natural -> Bool
forall a. Ord a => a -> a -> Bool
(<=) ExUnits
eu1 ExUnits
eu2