{-# LANGUAGE ScopedTypeVariables #-} module Test.Cardano.Ledger.Shelley.Imp.EpochSpec ( spec, ) where import Cardano.Ledger.BaseTypes (EpochInterval (..), addEpochInterval) import Cardano.Ledger.Core import Cardano.Ledger.Shelley.LedgerState ( esLStateL, lsCertStateL, lsUTxOStateL, nesELL, nesEsL, totalObligation, utxosDepositedL, utxosGovStateL, ) import Cardano.Ledger.Val (Val (..)) import Test.Cardano.Ledger.Imp.Common import Test.Cardano.Ledger.Shelley.ImpTest spec :: forall era. ShelleyEraImp era => SpecWith (ImpInit (LedgerSpec era)) spec :: forall era. ShelleyEraImp era => SpecWith (ImpInit (LedgerSpec era)) spec = forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "EPOCH" forall a b. (a -> b) -> a -> b $ do forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Runs basic transaction" forall a b. (a -> b) -> a -> b $ do do CertState era certState <- forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES forall a b. (a -> b) -> a -> b $ forall era. Lens' (NewEpochState era) (EpochState era) nesEsL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (EpochState era) (LedgerState era) esLStateL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (LedgerState era) (CertState era) lsCertStateL GovState era govState <- forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES forall a b. (a -> b) -> a -> b $ forall era. Lens' (NewEpochState era) (EpochState era) nesEsL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (EpochState era) (LedgerState era) esLStateL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (LedgerState era) (UTxOState era) lsUTxOStateL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (UTxOState era) (GovState era) utxosGovStateL forall era. EraGov era => CertState era -> GovState era -> Coin totalObligation CertState era certState GovState era govState forall (m :: * -> *) a. (HasCallStack, MonadIO m, Show a, Eq a) => a -> a -> m () `shouldBe` forall t. Val t => t zero do Coin deposited <- forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES forall a b. (a -> b) -> a -> b $ forall era. Lens' (NewEpochState era) (EpochState era) nesEsL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (EpochState era) (LedgerState era) esLStateL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (LedgerState era) (UTxOState era) lsUTxOStateL forall b c a. (b -> c) -> (a -> b) -> a -> c . forall era. Lens' (UTxOState era) Coin utxosDepositedL Coin deposited forall (m :: * -> *) a. (HasCallStack, MonadIO m, Show a, Eq a) => a -> a -> m () `shouldBe` forall t. Val t => t zero forall era. (HasCallStack, ShelleyEraImp era) => String -> Tx era -> ImpTestM era () submitTxAnn_ String "simple transaction" forall a b. (a -> b) -> a -> b $ forall era. EraTx era => TxBody era -> Tx era mkBasicTx forall era. EraTxBody era => TxBody era mkBasicTxBody forall era. (ShelleyEraImp era, HasCallStack) => ImpTestM era () passEpoch forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Crosses epoch boundaries" forall a b. (a -> b) -> a -> b $ do EpochNo startEpochNo <- forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES forall era. Lens' (NewEpochState era) EpochNo nesELL Positive Word32 n <- forall a (m :: * -> *). (Arbitrary a, MonadGen m) => m a arbitrary forall era. ShelleyEraImp era => Natural -> ImpTestM era () passNEpochs forall a b. (a -> b) -> a -> b $ forall a b. (Integral a, Num b) => a -> b fromIntegral Word32 n forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES forall era. Lens' (NewEpochState era) EpochNo nesELL forall (m :: * -> *) a. (HasCallStack, MonadIO m, Show a, Eq a) => m a -> a -> m () `shouldReturn` EpochNo -> EpochInterval -> EpochNo addEpochInterval EpochNo startEpochNo (Word32 -> EpochInterval EpochInterval Word32 n)