Skip to content

Commit e7c6ca6

Browse files
committed
Add majorVersionAtLeast and majorVersionAtMost
1 parent a462432 commit e7c6ca6

File tree

4 files changed

+83
-57
lines changed

4 files changed

+83
-57
lines changed

eras/conway/impl/testlib/Test/Cardano/Ledger/Conway/Imp/UtxoSpec.hs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,9 @@ spec =
8989
& bodyTxL . inputsTxBodyL .~ Set.singleton txIn
9090
& bodyTxL . referenceInputsTxBodyL .~ Set.singleton txIn
9191

92-
it "Can run scripts that expect inputs and refInputs to overlap (PV 9)"
93-
. whenMajorVersion @9
94-
$ do
95-
txIn <- produceScript $ scriptHash SPlutusV3
96-
submitTx_ @era $ tx txIn
92+
it "Can run scripts that expect inputs and refInputs to overlap (PV 9)" . whenMajorVersion @9 $ do
93+
txIn <- produceScript $ scriptHash SPlutusV3
94+
submitTx_ @era $ tx txIn
9795
it "Same script cannot appear in regular and reference inputs in PlutusV3 (PV 10)"
9896
. whenMajorVersion @10
9997
$ do
@@ -105,7 +103,7 @@ spec =
105103
(txIn NE.:| [])
106104
]
107105
it "Same script cannot appear in regular and reference inputs in PlutusV3 (PV 11)"
108-
. whenMajorVersion @11
106+
. whenMajorVersionAtLeast @11
109107
$ do
110108
txIn <- produceScript $ scriptHash SPlutusV3
111109
submitFailingTx @era

eras/conway/impl/testlib/Test/Cardano/Ledger/Conway/ImpTest.hs

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,9 @@ module Test.Cardano.Ledger.Conway.ImpTest (
116116
expectNoCurrentProposals,
117117
expectPulserProposals,
118118
expectNoPulserProposals,
119-
minorFollow,
120-
majorFollow,
121-
cantFollow,
122119
getsPParams,
123120
currentProposalsShouldContain,
124121
ifBootstrap,
125-
whenMajorVersion,
126-
unlessMajorVersion,
127122
whenBootstrap,
128123
whenPostBootstrap,
129124
submitYesVoteCCs_,
@@ -145,17 +140,12 @@ import Cardano.Ledger.Allegra.Scripts (Timelock)
145140
import Cardano.Ledger.BaseTypes (
146141
EpochInterval (..),
147142
EpochNo (..),
148-
MaxVersion,
149-
MinVersion,
150-
ProtVer (..),
151143
ShelleyBase,
152144
StrictMaybe (..),
153145
UnitInterval,
154146
addEpochInterval,
155147
binOpEpochNo,
156148
inject,
157-
natVersion,
158-
succVersion,
159149
textToUrl,
160150
)
161151
import Cardano.Ledger.Coin (Coin (..))
@@ -226,7 +216,6 @@ import qualified Data.Sequence.Strict as SSeq
226216
import qualified Data.Set as Set
227217
import Data.Tree
228218
import qualified GHC.Exts as GHC (fromList)
229-
import GHC.TypeLits (KnownNat, Natural, type (<=))
230219
import Lens.Micro
231220
import Prettyprinter (align, hsep, viaShow, vsep)
232221
import Test.Cardano.Ledger.Babbage.ImpTest
@@ -1584,49 +1573,11 @@ pulsingStateSnapshotL = lens getter setter
15841573
setter (DRComplete _ y) snap = DRComplete snap y
15851574
setter state snap = DRComplete snap $ snd $ finishDRepPulser state
15861575

1587-
-- | A legal ProtVer that differs in the minor Version
1588-
minorFollow :: ProtVer -> ProtVer
1589-
minorFollow (ProtVer x y) = ProtVer x (y + 1)
1590-
1591-
-- | A legal ProtVer that moves to the next major Version
1592-
majorFollow :: ProtVer -> ProtVer
1593-
majorFollow pv@(ProtVer x _) = case succVersion x of
1594-
Just x' -> ProtVer x' 0
1595-
Nothing -> error ("The last major version can't be incremented. " ++ show pv)
1596-
1597-
-- | An illegal ProtVer that skips 3 minor versions
1598-
cantFollow :: ProtVer -> ProtVer
1599-
cantFollow (ProtVer x y) = ProtVer x (y + 3)
1600-
1601-
whenMajorVersion ::
1602-
forall (v :: Natural) era.
1603-
( EraGov era
1604-
, KnownNat v
1605-
, MinVersion <= v
1606-
, v <= MaxVersion
1607-
) =>
1608-
ImpTestM era () -> ImpTestM era ()
1609-
whenMajorVersion a = do
1610-
pv <- getProtVer
1611-
when (pvMajor pv == natVersion @v) a
1612-
1613-
unlessMajorVersion ::
1614-
forall (v :: Natural) era.
1615-
( EraGov era
1616-
, KnownNat v
1617-
, MinVersion <= v
1618-
, v <= MaxVersion
1619-
) =>
1620-
ImpTestM era () -> ImpTestM era ()
1621-
unlessMajorVersion a = do
1622-
pv <- getProtVer
1623-
unless (pvMajor pv == natVersion @v) a
1624-
16251576
whenBootstrap :: EraGov era => ImpTestM era () -> ImpTestM era ()
16261577
whenBootstrap = whenMajorVersion @9
16271578

16281579
whenPostBootstrap :: EraGov era => ImpTestM era () -> ImpTestM era ()
1629-
whenPostBootstrap = unlessMajorVersion @9
1580+
whenPostBootstrap = whenMajorVersionAtLeast @10
16301581

16311582
ifBootstrap :: EraGov era => ImpTestM era a -> ImpTestM era a -> ImpTestM era a
16321583
ifBootstrap inBootstrap outOfBootstrap = do

eras/shelley/impl/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## 1.17.0.0
44

5+
* Add:
6+
* `unlessMajorVersion`
7+
* `whenMajorVersion`
8+
* `whenMajorVersionAtLeast`
9+
* `whenMajorVersionAtMost`
10+
* `cantFollow`
11+
* `majorFollow`
12+
* `minorFollow`
513
* Remove `ShelleyTxBody`
614
* Removed `era` parameter from `ShelleyTxBodyRaw`
715
* Remove `HeapWords` instances for: #5001

eras/shelley/impl/testlib/Test/Cardano/Ledger/Shelley/ImpTest.hs

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ module Test.Cardano.Ledger.Shelley.ImpTest (
105105
modifyImpInitProtVer,
106106
modifyImpInitExpectLedgerRuleConformance,
107107
disableImpInitExpectLedgerRuleConformance,
108+
minorFollow,
109+
majorFollow,
110+
cantFollow,
111+
whenMajorVersion,
112+
whenMajorVersionAtLeast,
113+
whenMajorVersionAtMost,
114+
unlessMajorVersion,
108115

109116
-- * Logging
110117
Doc,
@@ -243,7 +250,7 @@ import Data.Time.Format.ISO8601 (iso8601ParseM)
243250
import Data.TreeDiff (ansiWlExpr)
244251
import Data.Type.Equality (TestEquality (..))
245252
import Data.Void
246-
import GHC.TypeLits (KnownSymbol, Symbol, symbolVal)
253+
import GHC.TypeLits (KnownSymbol, Symbol, symbolVal, KnownNat, type (<=))
247254
import Lens.Micro (Lens', SimpleGetter, lens, to, (%~), (&), (.~), (<>~), (^.))
248255
import Lens.Micro.Mtl (use, view, (%=), (+=), (.=))
249256
import Numeric.Natural (Natural)
@@ -1651,3 +1658,65 @@ advanceToPointOfNoReturn = do
16511658
impLastTick <- gets impLastTick
16521659
(_, slotOfNoReturn, _) <- runShelleyBase $ getTheSlotOfNoReturn impLastTick
16531660
impLastTickL .= slotOfNoReturn
1661+
1662+
-- | A legal ProtVer that differs in the minor Version
1663+
minorFollow :: ProtVer -> ProtVer
1664+
minorFollow (ProtVer x y) = ProtVer x (y + 1)
1665+
1666+
-- | A legal ProtVer that moves to the next major Version
1667+
majorFollow :: ProtVer -> ProtVer
1668+
majorFollow pv@(ProtVer x _) = case succVersion x of
1669+
Just x' -> ProtVer x' 0
1670+
Nothing -> error ("The last major version can't be incremented. " ++ show pv)
1671+
1672+
-- | An illegal ProtVer that skips 3 minor versions
1673+
cantFollow :: ProtVer -> ProtVer
1674+
cantFollow (ProtVer x y) = ProtVer x (y + 3)
1675+
1676+
whenMajorVersion ::
1677+
forall (v :: Natural) era.
1678+
( EraGov era
1679+
, KnownNat v
1680+
, MinVersion <= v
1681+
, v <= MaxVersion
1682+
) =>
1683+
ImpTestM era () -> ImpTestM era ()
1684+
whenMajorVersion a = do
1685+
pv <- getProtVer
1686+
when (pvMajor pv == natVersion @v) a
1687+
1688+
whenMajorVersionAtLeast ::
1689+
forall (v :: Natural) era.
1690+
( EraGov era
1691+
, KnownNat v
1692+
, MinVersion <= v
1693+
, v <= MaxVersion
1694+
) =>
1695+
ImpTestM era () -> ImpTestM era ()
1696+
whenMajorVersionAtLeast a = do
1697+
pv <- getProtVer
1698+
when (pvMajor pv >= natVersion @v) a
1699+
1700+
whenMajorVersionAtMost ::
1701+
forall (v :: Natural) era.
1702+
( EraGov era
1703+
, KnownNat v
1704+
, MinVersion <= v
1705+
, v <= MaxVersion
1706+
) =>
1707+
ImpTestM era () -> ImpTestM era ()
1708+
whenMajorVersionAtMost a = do
1709+
pv <- getProtVer
1710+
when (pvMajor pv <= natVersion @v) a
1711+
1712+
unlessMajorVersion ::
1713+
forall (v :: Natural) era.
1714+
( EraGov era
1715+
, KnownNat v
1716+
, MinVersion <= v
1717+
, v <= MaxVersion
1718+
) =>
1719+
ImpTestM era () -> ImpTestM era ()
1720+
unlessMajorVersion a = do
1721+
pv <- getProtVer
1722+
unless (pvMajor pv == natVersion @v) a

0 commit comments

Comments
 (0)