22{-# LANGUAGE BinaryLiterals #-}
33{-# LANGUAGE DataKinds #-}
44{-# LANGUAGE FlexibleContexts #-}
5- {-# LANGUAGE ImportQualifiedPost #-}
65{-# LANGUAGE OverloadedStrings #-}
76{-# LANGUAGE ScopedTypeVariables #-}
87{-# LANGUAGE TypeApplications #-}
@@ -24,12 +23,62 @@ import Data.Word
2423import Numeric.Natural (Natural )
2524import Test.Cardano.Ledger.Common
2625import Test.Cardano.Ledger.Core.Arbitrary ()
27- import Test.Cardano.Ledger.Plutus.ExUnits qualified as ExUnits
2826import Test.Cardano.Ledger.Plutus.ToPlutusData (roundTripPlutusDataSpec )
2927
3028spec :: Spec
3129spec = do
32- costModelsSpec
30+ describe " Plutus" $ do
31+ costModelsSpec
32+ exUnitsSpec
33+ dataSpec
34+
35+ costModelsSpec :: Spec
36+ costModelsSpec = do
37+ describe " CostModels" $ do
38+ prop " flattenCostModels . mkCostModelsLenient" $ \ valid unknown -> do
39+ let cms1Flat = flattenCostModels valid <> unknown
40+ cms2Flat = unknown <> flattenCostModels valid
41+ cms1 <- mkCostModelsLenient cms1Flat
42+ cms2 <- mkCostModelsLenient cms2Flat
43+ flattenCostModels cms1 `shouldBe` cms1Flat
44+ flattenCostModels cms2 `shouldBe` cms2Flat
45+
46+ exUnitsSpec :: Spec
47+ exUnitsSpec = do
48+ describe " ExUnits" $ do
49+ prop " Round-trip to ExBudget" exUnitsToExBudgetRoundTrip
50+ prop " Round-trip from ExBudget" exBudgetToExUnitsRoundTrip
51+
52+ -- ExUnits should remain intact when translating to and from the Plutus ExBudget type
53+ exUnitsToExBudgetRoundTrip :: Gen Property
54+ exUnitsToExBudgetRoundTrip = do
55+ e <- arbitrary
56+ let result = exBudgetToExUnits $ transExUnits e
57+ pure
58+ $ counterexample
59+ ( " Before: "
60+ <> show e
61+ <> " \n After: "
62+ <> show result
63+ )
64+ $ result == Just e
65+
66+ -- Plutus ExBudget should remain intact when translating to and from the ExUnits type
67+ exBudgetToExUnitsRoundTrip :: Gen Property
68+ exBudgetToExUnitsRoundTrip = do
69+ e <- arbitrary
70+ let result = transExUnits <$> exBudgetToExUnits e
71+ pure
72+ $ counterexample
73+ ( " Before: "
74+ <> show e
75+ <> " \n After: "
76+ <> show result
77+ )
78+ $ result == Just e
79+
80+ dataSpec :: Spec
81+ dataSpec = do
3382 describe " RoundTrip ToPlutusData" $ do
3483 roundTripPlutusDataSpec @ Version
3584 roundTripPlutusDataSpec @ Word
@@ -50,16 +99,3 @@ spec = do
5099 roundTripPlutusDataSpec @ ProtVer
51100 roundTripPlutusDataSpec @ CostModels
52101 roundTripPlutusDataSpec @ Integer
53- describe " ExUnits" $ do
54- ExUnits. spec
55-
56- costModelsSpec :: Spec
57- costModelsSpec = do
58- describe " CostModels" $ do
59- prop " flattenCostModels . mkCostModelsLenient" $ \ valid unknown -> do
60- let cms1Flat = flattenCostModels valid <> unknown
61- cms2Flat = unknown <> flattenCostModels valid
62- cms1 <- mkCostModelsLenient cms1Flat
63- cms2 <- mkCostModelsLenient cms2Flat
64- flattenCostModels cms1 `shouldBe` cms1Flat
65- flattenCostModels cms2 `shouldBe` cms2Flat
0 commit comments