{-# 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 = String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "EPOCH" (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ do String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Runs basic transaction" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do do certState <- SimpleGetter (NewEpochState era) (CertState era) -> ImpTestM era (CertState era) forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) (CertState era) -> ImpTestM era (CertState era)) -> SimpleGetter (NewEpochState era) (CertState era) -> ImpTestM era (CertState era) forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((CertState era -> Const r (CertState era)) -> EpochState era -> Const r (EpochState era)) -> (CertState era -> Const r (CertState era)) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (LedgerState era -> Const r (LedgerState era)) -> EpochState era -> Const r (EpochState era) forall era (f :: * -> *). Functor f => (LedgerState era -> f (LedgerState era)) -> EpochState era -> f (EpochState era) esLStateL ((LedgerState era -> Const r (LedgerState era)) -> EpochState era -> Const r (EpochState era)) -> ((CertState era -> Const r (CertState era)) -> LedgerState era -> Const r (LedgerState era)) -> (CertState era -> Const r (CertState era)) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (CertState era -> Const r (CertState era)) -> LedgerState era -> Const r (LedgerState era) forall era (f :: * -> *). Functor f => (CertState era -> f (CertState era)) -> LedgerState era -> f (LedgerState era) lsCertStateL govState <- getsNES $ nesEsL . esLStateL . lsUTxOStateL . utxosGovStateL totalObligation certState govState `shouldBe` zero do deposited <- SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin) -> SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era)) -> (Coin -> Const r Coin) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (LedgerState era -> Const r (LedgerState era)) -> EpochState era -> Const r (EpochState era) forall era (f :: * -> *). Functor f => (LedgerState era -> f (LedgerState era)) -> EpochState era -> f (EpochState era) esLStateL ((LedgerState era -> Const r (LedgerState era)) -> EpochState era -> Const r (EpochState era)) -> ((Coin -> Const r Coin) -> LedgerState era -> Const r (LedgerState era)) -> (Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (UTxOState era -> Const r (UTxOState era)) -> LedgerState era -> Const r (LedgerState era) forall era (f :: * -> *). Functor f => (UTxOState era -> f (UTxOState era)) -> LedgerState era -> f (LedgerState era) lsUTxOStateL ((UTxOState era -> Const r (UTxOState era)) -> LedgerState era -> Const r (LedgerState era)) -> ((Coin -> Const r Coin) -> UTxOState era -> Const r (UTxOState era)) -> (Coin -> Const r Coin) -> LedgerState era -> Const r (LedgerState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Coin -> Const r Coin) -> UTxOState era -> Const r (UTxOState era) forall era (f :: * -> *). Functor f => (Coin -> f Coin) -> UTxOState era -> f (UTxOState era) utxosDepositedL deposited `shouldBe` zero String -> Tx TopTx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => String -> Tx TopTx era -> ImpTestM era () submitTxAnn_ String "simple transaction" (Tx TopTx era -> ImpM (LedgerSpec era) ()) -> Tx TopTx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody TopTx era -> Tx TopTx era forall era (l :: TxLevel). EraTx era => TxBody l era -> Tx l era forall (l :: TxLevel). TxBody l era -> Tx l era mkBasicTx TxBody TopTx era forall era (l :: TxLevel). (EraTxBody era, Typeable l) => TxBody l era forall (l :: TxLevel). Typeable l => TxBody l era mkBasicTxBody ImpM (LedgerSpec era) () forall era. (ShelleyEraImp era, HasCallStack) => ImpTestM era () passEpoch String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Crosses epoch boundaries" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do startEpochNo <- SimpleGetter (NewEpochState era) EpochNo -> ImpTestM era EpochNo forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (EpochNo -> Const r EpochNo) -> NewEpochState era -> Const r (NewEpochState era) SimpleGetter (NewEpochState era) EpochNo forall era (f :: * -> *). Functor f => (EpochNo -> f EpochNo) -> NewEpochState era -> f (NewEpochState era) nesELL Positive n <- arbitrary passNEpochs $ fromIntegral n getsNES nesELL `shouldReturn` addEpochInterval startEpochNo (EpochInterval n)