{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}

-- | Golden tests that check CBOR token encoding.
module Test.Cardano.Ledger.ShelleyMA.Serialisation.Golden.Encoding (goldenEncodingTests) where

import Cardano.Ledger.Address (Addr (..), RewardAccount (..))
import Cardano.Ledger.Allegra (AllegraEra)
import Cardano.Ledger.Allegra.Scripts (
  AllegraEraScript,
  Timelock (..),
  pattern RequireTimeExpire,
  pattern RequireTimeStart,
 )
import Cardano.Ledger.Allegra.TxAuxData (pattern AllegraTxAuxData)
import Cardano.Ledger.Allegra.TxBody (TxBody (..))
import Cardano.Ledger.BaseTypes (Network (..), StrictMaybe (..))
import Cardano.Ledger.Binary (DecCBOR, ToCBOR)
import Cardano.Ledger.Coin (Coin (..))
import Cardano.Ledger.Credential (Credential (..), StakeReference (..))
import Cardano.Ledger.Mary (MaryEra)
import Cardano.Ledger.Mary.Core
import Cardano.Ledger.Mary.TxBody (TxBody (..))
import Cardano.Ledger.Mary.Value (AssetName (..), MaryValue (..), MultiAsset (..), PolicyID (..))
import Cardano.Ledger.Shelley.PParams (
  Update,
  pattern ProposedPPUpdates,
  pattern Update,
 )
import Cardano.Ledger.Shelley.Scripts (
  ShelleyEraScript,
  pattern RequireAllOf,
  pattern RequireAnyOf,
  pattern RequireMOf,
  pattern RequireSignature,
 )
import qualified Cardano.Ledger.Shelley.TxAuxData as TxAuxData
import Cardano.Ledger.Shelley.TxOut (ShelleyTxOut (..))
import Cardano.Ledger.Slot (EpochNo (..), SlotNo (..))
import Cardano.Ledger.TxIn (mkTxInPartial)
import qualified Cardano.Ledger.Val as Val
import Codec.CBOR.Encoding (Tokens (..))
import qualified Data.ByteString.Short as SBS
import qualified Data.Map.Strict as Map
import qualified Data.Sequence.Strict as StrictSeq
import qualified Data.Set as Set
import Lens.Micro
import Test.Cardano.Ledger.Binary.RoundTrip (roundTripCborRangeFailureExpectation)
import Test.Cardano.Ledger.Mary.Binary.Annotator
import Test.Cardano.Ledger.Shelley.Generator.EraGen (genesisId)
import Test.Cardano.Ledger.Shelley.Serialisation.GoldenUtils (
  ToTokens (..),
  checkEncodingCBOR,
  checkEncodingCBORAnnotated,
  checkEncodingCBORDecodeFailure,
 )
import Test.Cardano.Ledger.Shelley.Utils (RawSeed (..), mkGenKey, mkKeyPair)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (Assertion, testCase)

-- ===============================================
-- == Test Values for Building Timelock Scripts ==
-- ===============================================

policy1 :: ShelleyEraScript era => NativeScript era
policy1 :: forall era. ShelleyEraScript era => NativeScript era
policy1 = StrictSeq (NativeScript era) -> NativeScript era
forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAnyOf (StrictSeq (NativeScript era) -> NativeScript era)
-> ([NativeScript era] -> StrictSeq (NativeScript era))
-> [NativeScript era]
-> NativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [NativeScript era] -> StrictSeq (NativeScript era)
forall a. [a] -> StrictSeq a
StrictSeq.fromList ([NativeScript era] -> NativeScript era)
-> [NativeScript era] -> NativeScript era
forall a b. (a -> b) -> a -> b
$ []

policyID1 :: PolicyID
policyID1 :: PolicyID
policyID1 = ScriptHash -> PolicyID
PolicyID (ScriptHash -> PolicyID)
-> (Timelock AllegraEra -> ScriptHash)
-> Timelock AllegraEra
-> PolicyID
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall era. EraScript era => Script era -> ScriptHash
hashScript @AllegraEra (Timelock AllegraEra -> PolicyID)
-> Timelock AllegraEra -> PolicyID
forall a b. (a -> b) -> a -> b
$ Timelock AllegraEra
NativeScript AllegraEra
forall era. ShelleyEraScript era => NativeScript era
policy1

policyID2 :: PolicyID
policyID2 :: PolicyID
policyID2 = ScriptHash -> PolicyID
PolicyID (ScriptHash -> PolicyID)
-> ([NativeScript AllegraEra] -> ScriptHash)
-> [NativeScript AllegraEra]
-> PolicyID
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall era. EraScript era => Script era -> ScriptHash
hashScript @AllegraEra (Timelock AllegraEra -> ScriptHash)
-> ([NativeScript AllegraEra] -> Timelock AllegraEra)
-> [NativeScript AllegraEra]
-> ScriptHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StrictSeq (NativeScript AllegraEra) -> Timelock AllegraEra
StrictSeq (NativeScript AllegraEra) -> NativeScript AllegraEra
forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAllOf (StrictSeq (NativeScript AllegraEra) -> Timelock AllegraEra)
-> ([NativeScript AllegraEra]
    -> StrictSeq (NativeScript AllegraEra))
-> [NativeScript AllegraEra]
-> Timelock AllegraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [NativeScript AllegraEra] -> StrictSeq (NativeScript AllegraEra)
forall a. [a] -> StrictSeq a
StrictSeq.fromList ([NativeScript AllegraEra] -> PolicyID)
-> [NativeScript AllegraEra] -> PolicyID
forall a b. (a -> b) -> a -> b
$ []

assetName1 :: SBS.ShortByteString
assetName1 :: ShortByteString
assetName1 = ShortByteString
"a1"

assetName2 :: SBS.ShortByteString
assetName2 :: ShortByteString
assetName2 = ShortByteString
"a2"

assetName3 :: SBS.ShortByteString
assetName3 :: ShortByteString
assetName3 = ShortByteString
"a3"

-- ===========================================
-- == Test Values for Building Transactions ==
-- ===========================================

testGKeyHash :: KeyHash 'Genesis
testGKeyHash :: KeyHash 'Genesis
testGKeyHash = VKey 'Genesis -> KeyHash 'Genesis
forall (kd :: KeyRole). VKey kd -> KeyHash kd
hashKey (VKey 'Genesis -> KeyHash 'Genesis)
-> (RawSeed -> VKey 'Genesis) -> RawSeed -> KeyHash 'Genesis
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SignKeyDSIGN DSIGN, VKey 'Genesis) -> VKey 'Genesis
forall a b. (a, b) -> b
snd ((SignKeyDSIGN DSIGN, VKey 'Genesis) -> VKey 'Genesis)
-> (RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Genesis))
-> RawSeed
-> VKey 'Genesis
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Genesis)
forall (kd :: KeyRole). RawSeed -> (SignKeyDSIGN DSIGN, VKey kd)
mkGenKey (RawSeed -> KeyHash 'Genesis) -> RawSeed -> KeyHash 'Genesis
forall a b. (a -> b) -> a -> b
$ Word64 -> Word64 -> Word64 -> Word64 -> Word64 -> RawSeed
RawSeed Word64
0 Word64
0 Word64
0 Word64
0 Word64
0

testAddrE :: Addr
testAddrE :: Addr
testAddrE =
  Network -> PaymentCredential -> StakeReference -> Addr
Addr
    Network
Testnet
    (KeyHash 'Payment -> PaymentCredential
forall (kr :: KeyRole). KeyHash kr -> Credential kr
KeyHashObj (KeyHash 'Payment -> PaymentCredential)
-> ((SignKeyDSIGN DSIGN, VKey 'Payment) -> KeyHash 'Payment)
-> (SignKeyDSIGN DSIGN, VKey 'Payment)
-> PaymentCredential
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VKey 'Payment -> KeyHash 'Payment
forall (kd :: KeyRole). VKey kd -> KeyHash kd
hashKey (VKey 'Payment -> KeyHash 'Payment)
-> ((SignKeyDSIGN DSIGN, VKey 'Payment) -> VKey 'Payment)
-> (SignKeyDSIGN DSIGN, VKey 'Payment)
-> KeyHash 'Payment
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SignKeyDSIGN DSIGN, VKey 'Payment) -> VKey 'Payment
forall a b. (a, b) -> b
snd ((SignKeyDSIGN DSIGN, VKey 'Payment) -> PaymentCredential)
-> (SignKeyDSIGN DSIGN, VKey 'Payment) -> PaymentCredential
forall a b. (a -> b) -> a -> b
$ RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Payment)
forall (kd :: KeyRole). RawSeed -> (SignKeyDSIGN DSIGN, VKey kd)
mkKeyPair (Word64 -> Word64 -> Word64 -> Word64 -> Word64 -> RawSeed
RawSeed Word64
0 Word64
0 Word64
0 Word64
0 Word64
1))
    StakeReference
StakeRefNull

testKeyHash :: KeyHash 'Staking
testKeyHash :: KeyHash 'Staking
testKeyHash = VKey 'Staking -> KeyHash 'Staking
forall (kd :: KeyRole). VKey kd -> KeyHash kd
hashKey (VKey 'Staking -> KeyHash 'Staking)
-> ((SignKeyDSIGN DSIGN, VKey 'Staking) -> VKey 'Staking)
-> (SignKeyDSIGN DSIGN, VKey 'Staking)
-> KeyHash 'Staking
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SignKeyDSIGN DSIGN, VKey 'Staking) -> VKey 'Staking
forall a b. (a, b) -> b
snd ((SignKeyDSIGN DSIGN, VKey 'Staking) -> KeyHash 'Staking)
-> (SignKeyDSIGN DSIGN, VKey 'Staking) -> KeyHash 'Staking
forall a b. (a -> b) -> a -> b
$ RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Staking)
forall (kd :: KeyRole). RawSeed -> (SignKeyDSIGN DSIGN, VKey kd)
mkKeyPair (Word64 -> Word64 -> Word64 -> Word64 -> Word64 -> RawSeed
RawSeed Word64
0 Word64
0 Word64
0 Word64
0 Word64
2)

testStakeCred :: Credential 'Staking
testStakeCred :: Credential 'Staking
testStakeCred = KeyHash 'Staking -> Credential 'Staking
forall (kr :: KeyRole). KeyHash kr -> Credential kr
KeyHashObj (KeyHash 'Staking -> Credential 'Staking)
-> ((SignKeyDSIGN DSIGN, VKey 'Staking) -> KeyHash 'Staking)
-> (SignKeyDSIGN DSIGN, VKey 'Staking)
-> Credential 'Staking
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VKey 'Staking -> KeyHash 'Staking
forall (kd :: KeyRole). VKey kd -> KeyHash kd
hashKey (VKey 'Staking -> KeyHash 'Staking)
-> ((SignKeyDSIGN DSIGN, VKey 'Staking) -> VKey 'Staking)
-> (SignKeyDSIGN DSIGN, VKey 'Staking)
-> KeyHash 'Staking
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SignKeyDSIGN DSIGN, VKey 'Staking) -> VKey 'Staking
forall a b. (a, b) -> b
snd ((SignKeyDSIGN DSIGN, VKey 'Staking) -> Credential 'Staking)
-> (SignKeyDSIGN DSIGN, VKey 'Staking) -> Credential 'Staking
forall a b. (a -> b) -> a -> b
$ RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Staking)
forall (kd :: KeyRole). RawSeed -> (SignKeyDSIGN DSIGN, VKey kd)
mkKeyPair (Word64 -> Word64 -> Word64 -> Word64 -> Word64 -> RawSeed
RawSeed Word64
0 Word64
0 Word64
0 Word64
0 Word64
3)

testUpdate ::
  forall era.
  EraPParams era =>
  Update era
testUpdate :: forall era. EraPParams era => Update era
testUpdate =
  ProposedPPUpdates era -> EpochNo -> Update era
forall era. ProposedPPUpdates era -> EpochNo -> Update era
Update
    ( Map (KeyHash 'Genesis) (PParamsUpdate era) -> ProposedPPUpdates era
forall era.
Map (KeyHash 'Genesis) (PParamsUpdate era) -> ProposedPPUpdates era
ProposedPPUpdates
        ( KeyHash 'Genesis
-> PParamsUpdate era -> Map (KeyHash 'Genesis) (PParamsUpdate era)
forall k a. k -> a -> Map k a
Map.singleton
            KeyHash 'Genesis
testGKeyHash
            (PParamsUpdate era
forall era. EraPParams era => PParamsUpdate era
emptyPParamsUpdate PParamsUpdate era
-> (PParamsUpdate era -> PParamsUpdate era) -> PParamsUpdate era
forall a b. a -> (a -> b) -> b
& (StrictMaybe Word16 -> Identity (StrictMaybe Word16))
-> PParamsUpdate era -> Identity (PParamsUpdate era)
forall era.
EraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Word16)
Lens' (PParamsUpdate era) (StrictMaybe Word16)
ppuNOptL ((StrictMaybe Word16 -> Identity (StrictMaybe Word16))
 -> PParamsUpdate era -> Identity (PParamsUpdate era))
-> StrictMaybe Word16 -> PParamsUpdate era -> PParamsUpdate era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Word16 -> StrictMaybe Word16
forall a. a -> StrictMaybe a
SJust Word16
100)
        )
    )
    (Word64 -> EpochNo
EpochNo Word64
0)

-- =============================================
-- == Golden Tests Common to Allegra and Mary ==
-- =============================================

scriptGoldenTest ::
  forall era.
  ( AllegraEraScript era
  , ToCBOR (NativeScript era)
  , DecCBOR (Annotator (NativeScript era))
  ) =>
  TestTree
scriptGoldenTest :: forall era.
(AllegraEraScript era, ToCBOR (NativeScript era),
 DecCBOR (Annotator (NativeScript era))) =>
TestTree
scriptGoldenTest =
  let kh0 :: KeyHash 'Witness
kh0 = VKey 'Witness -> KeyHash 'Witness
forall (kd :: KeyRole). VKey kd -> KeyHash kd
hashKey (VKey 'Witness -> KeyHash 'Witness)
-> (RawSeed -> VKey 'Witness) -> RawSeed -> KeyHash 'Witness
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SignKeyDSIGN DSIGN, VKey 'Witness) -> VKey 'Witness
forall a b. (a, b) -> b
snd ((SignKeyDSIGN DSIGN, VKey 'Witness) -> VKey 'Witness)
-> (RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Witness))
-> RawSeed
-> VKey 'Witness
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Witness)
forall (kd :: KeyRole). RawSeed -> (SignKeyDSIGN DSIGN, VKey kd)
mkGenKey (RawSeed -> KeyHash 'Witness) -> RawSeed -> KeyHash 'Witness
forall a b. (a -> b) -> a -> b
$ Word64 -> Word64 -> Word64 -> Word64 -> Word64 -> RawSeed
RawSeed Word64
0 Word64
0 Word64
0 Word64
0 Word64
0 :: KeyHash 'Witness
      kh1 :: KeyHash 'Witness
kh1 = VKey 'Witness -> KeyHash 'Witness
forall (kd :: KeyRole). VKey kd -> KeyHash kd
hashKey (VKey 'Witness -> KeyHash 'Witness)
-> (RawSeed -> VKey 'Witness) -> RawSeed -> KeyHash 'Witness
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SignKeyDSIGN DSIGN, VKey 'Witness) -> VKey 'Witness
forall a b. (a, b) -> b
snd ((SignKeyDSIGN DSIGN, VKey 'Witness) -> VKey 'Witness)
-> (RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Witness))
-> RawSeed
-> VKey 'Witness
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RawSeed -> (SignKeyDSIGN DSIGN, VKey 'Witness)
forall (kd :: KeyRole). RawSeed -> (SignKeyDSIGN DSIGN, VKey kd)
mkGenKey (RawSeed -> KeyHash 'Witness) -> RawSeed -> KeyHash 'Witness
forall a b. (a -> b) -> a -> b
$ Word64 -> Word64 -> Word64 -> Word64 -> Word64 -> RawSeed
RawSeed Word64
1 Word64
1 Word64
1 Word64
1 Word64
1 :: KeyHash 'Witness
   in Version -> String -> NativeScript era -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
        (forall era. Era era => Version
eraProtVerHigh @era)
        String
"timelock_script"
        ( forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAllOf @era
            ( [NativeScript era] -> StrictSeq (NativeScript era)
forall a. [a] -> StrictSeq a
StrictSeq.fromList
                [ Int -> StrictSeq (NativeScript era) -> NativeScript era
forall era.
ShelleyEraScript era =>
Int -> StrictSeq (NativeScript era) -> NativeScript era
RequireMOf Int
1 (StrictSeq (NativeScript era) -> NativeScript era)
-> StrictSeq (NativeScript era) -> NativeScript era
forall a b. (a -> b) -> a -> b
$ [NativeScript era] -> StrictSeq (NativeScript era)
forall a. [a] -> StrictSeq a
StrictSeq.fromList [KeyHash 'Witness -> NativeScript era
forall era.
ShelleyEraScript era =>
KeyHash 'Witness -> NativeScript era
RequireSignature KeyHash 'Witness
kh0, KeyHash 'Witness -> NativeScript era
forall era.
ShelleyEraScript era =>
KeyHash 'Witness -> NativeScript era
RequireSignature KeyHash 'Witness
kh1]
                , SlotNo -> NativeScript era
forall era. AllegraEraScript era => SlotNo -> NativeScript era
RequireTimeStart (Word64 -> SlotNo
SlotNo Word64
100)
                , SlotNo -> NativeScript era
forall era. AllegraEraScript era => SlotNo -> NativeScript era
RequireTimeExpire (Word64 -> SlotNo
SlotNo Word64
101)
                ]
            )
        )
        ( (Tokens -> Tokens) -> ToTokens
T
            ( Word -> Tokens -> Tokens
TkListLen Word
2
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
1 -- label for RequireAllOf
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
3 -- RequireMOf, RequireTimeStart, RequireTimeExpire
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
3 -- label, m, signatures
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
3 -- label for RequireMOf
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
1 -- m value
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
2 -- two possible signatures
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
2 -- credential wrapper
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
0 -- label for keyhash
            )
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> KeyHash 'Witness -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S KeyHash 'Witness
kh0 -- keyhash
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T
              ( Word -> Tokens -> Tokens
TkListLen Word
2 -- credential wrapper
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
0 -- label for keyhash
              )
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> KeyHash 'Witness -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S KeyHash 'Witness
kh1 -- keyhash
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T
              ( Word -> Tokens -> Tokens
TkListLen Word
2 -- RequireTimeStart
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
4 -- label for RequireTimeStart
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
100 -- start slot
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
2 -- RequireTimeExpire
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
5 -- label for RequireTimeExpire
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
101 -- expire slot
              )
        )

metadataNoScriptsGoldenTest :: forall era. Era era => TestTree
metadataNoScriptsGoldenTest :: forall era. Era era => TestTree
metadataNoScriptsGoldenTest =
  Version -> String -> AllegraTxAuxData era -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
    (forall era. Era era => Version
eraProtVerHigh @era)
    String
"metadata_no_scripts"
    (forall era.
Era era =>
Map Word64 Metadatum
-> StrictSeq (Timelock era) -> AllegraTxAuxData era
AllegraTxAuxData @era (Word64 -> Metadatum -> Map Word64 Metadatum
forall k a. k -> a -> Map k a
Map.singleton Word64
17 (Integer -> Metadatum
TxAuxData.I Integer
42)) StrictSeq (Timelock era)
forall a. StrictSeq a
StrictSeq.empty)
    ( (Tokens -> Tokens) -> ToTokens
T
        ( Word -> Tokens -> Tokens
TkListLen Word
2 -- structured metadata and auxiliary scripts
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkMapLen Word
1 -- metadata wrapper
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
17
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
42
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
0 -- empty scripts
        )
    )

-- CONTINUE also Scripts
metadataWithScriptsGoldenTest ::
  forall era.
  (ShelleyEraScript era, NativeScript era ~ Timelock era) =>
  TestTree
metadataWithScriptsGoldenTest :: forall era.
(ShelleyEraScript era, NativeScript era ~ Timelock era) =>
TestTree
metadataWithScriptsGoldenTest =
  Version -> String -> AllegraTxAuxData era -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
    (forall era. Era era => Version
eraProtVerHigh @era)
    String
"metadata_with_scripts"
    ( forall era.
Era era =>
Map Word64 Metadatum
-> StrictSeq (Timelock era) -> AllegraTxAuxData era
AllegraTxAuxData @era
        (Word64 -> Metadatum -> Map Word64 Metadatum
forall k a. k -> a -> Map k a
Map.singleton Word64
17 (Integer -> Metadatum
TxAuxData.I Integer
42))
        (Timelock era -> StrictSeq (Timelock era)
forall a. a -> StrictSeq a
StrictSeq.singleton Timelock era
NativeScript era
forall era. ShelleyEraScript era => NativeScript era
policy1)
    )
    ( (Tokens -> Tokens) -> ToTokens
T
        ( Word -> Tokens -> Tokens
TkListLen Word
2 -- structured metadata and auxiliary scripts
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkMapLen Word
1 -- metadata wrapper
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
17
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
42
            (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkListLen Word
1 -- one script
        )
        ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Timelock era -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (forall era. ShelleyEraScript era => NativeScript era
policy1 @era)
    )

-- | Golden Tests for Allegra
goldenEncodingTestsAllegra :: TestTree
goldenEncodingTestsAllegra :: TestTree
goldenEncodingTestsAllegra =
  String -> [TestTree] -> TestTree
testGroup
    String
"Allegra"
    [ Version -> String -> Coin -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR a, EncCBOR a, Show a, Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBOR
        (forall era. Era era => Version
eraProtVerHigh @MaryEra)
        String
"value"
        (Coin -> Coin
forall t s. Inject t s => t -> s
Val.inject (Integer -> Coin
Coin Integer
1) :: Value AllegraEra)
        ((Tokens -> Tokens) -> ToTokens
T (Integer -> Tokens -> Tokens
TkInteger Integer
1))
    , forall era.
(AllegraEraScript era, ToCBOR (NativeScript era),
 DecCBOR (Annotator (NativeScript era))) =>
TestTree
scriptGoldenTest @AllegraEra
    , forall era. Era era => TestTree
metadataNoScriptsGoldenTest @AllegraEra
    , forall era.
(ShelleyEraScript era, NativeScript era ~ Timelock era) =>
TestTree
metadataWithScriptsGoldenTest @AllegraEra
    , -- "minimal_txn_body"
      let tin :: TxIn
tin = HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial TxId
genesisId Integer
1
          tout :: ShelleyTxOut AllegraEra
tout = forall era.
(HasCallStack, Era era, Val (Value era)) =>
Addr -> Value era -> ShelleyTxOut era
ShelleyTxOut @AllegraEra Addr
testAddrE (Integer -> Coin
Coin Integer
2)
       in Version -> String -> TxBody AllegraEra -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
            (forall era. Era era => Version
eraProtVerHigh @AllegraEra)
            String
"minimal_txbody"
            ( Set TxIn
-> StrictSeq (TxOut AllegraEra)
-> StrictSeq (TxCert AllegraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AllegraEra)
-> StrictMaybe TxAuxDataHash
-> TxBody AllegraEra
(EraTxOut AllegraEra, EraTxCert AllegraEra) =>
Set TxIn
-> StrictSeq (TxOut AllegraEra)
-> StrictSeq (TxCert AllegraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AllegraEra)
-> StrictMaybe TxAuxDataHash
-> TxBody AllegraEra
AllegraTxBody
                ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [TxIn
tin])
                (ShelleyTxOut AllegraEra -> StrictSeq (ShelleyTxOut AllegraEra)
forall a. a -> StrictSeq a
StrictSeq.singleton ShelleyTxOut AllegraEra
tout)
                StrictSeq (TxCert AllegraEra)
StrictSeq (ShelleyTxCert AllegraEra)
forall a. StrictSeq a
StrictSeq.empty
                (Map RewardAccount Coin -> Withdrawals
Withdrawals Map RewardAccount Coin
forall k a. Map k a
Map.empty)
                (Integer -> Coin
Coin Integer
9)
                (StrictMaybe SlotNo -> StrictMaybe SlotNo -> ValidityInterval
ValidityInterval StrictMaybe SlotNo
forall a. StrictMaybe a
SNothing StrictMaybe SlotNo
forall a. StrictMaybe a
SNothing)
                StrictMaybe (Update AllegraEra)
forall a. StrictMaybe a
SNothing
                StrictMaybe TxAuxDataHash
forall a. StrictMaybe a
SNothing
            )
            ( (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkMapLen Word
3)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
0) -- Tx Ins
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> TxIn -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxIn
tin
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
1) -- Tx Outs
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> ShelleyTxOut AllegraEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S ShelleyTxOut AllegraEra
tout
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
2) -- Tx Fee
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word64 -> Tokens -> Tokens
TkWord64 Word64
9)
            )
    , -- "full_txn_body"
      let tin :: TxIn
tin = HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial TxId
genesisId Integer
1
          tout :: ShelleyTxOut AllegraEra
tout = forall era.
(HasCallStack, Era era, Val (Value era)) =>
Addr -> Value era -> ShelleyTxOut era
ShelleyTxOut @AllegraEra Addr
testAddrE (Integer -> Coin
Coin Integer
2)
          reg :: TxCert AllegraEra
reg = Credential 'Staking -> TxCert AllegraEra
forall era.
ShelleyEraTxCert era =>
Credential 'Staking -> TxCert era
RegTxCert Credential 'Staking
testStakeCred
          ras :: Map RewardAccount Coin
ras = RewardAccount -> Coin -> Map RewardAccount Coin
forall k a. k -> a -> Map k a
Map.singleton (Network -> Credential 'Staking -> RewardAccount
RewardAccount Network
Testnet (KeyHash 'Staking -> Credential 'Staking
forall (kr :: KeyRole). KeyHash kr -> Credential kr
KeyHashObj KeyHash 'Staking
testKeyHash)) (Integer -> Coin
Coin Integer
123)
          up :: Update AllegraEra
up = Update AllegraEra
forall era. EraPParams era => Update era
testUpdate
          mdh :: TxAuxDataHash
mdh = forall era. EraTxAuxData era => TxAuxData era -> TxAuxDataHash
hashTxAuxData @AllegraEra (TxAuxData AllegraEra -> TxAuxDataHash)
-> TxAuxData AllegraEra -> TxAuxDataHash
forall a b. (a -> b) -> a -> b
$ Map Word64 Metadatum
-> StrictSeq (Timelock AllegraEra) -> AllegraTxAuxData AllegraEra
forall era.
Era era =>
Map Word64 Metadatum
-> StrictSeq (Timelock era) -> AllegraTxAuxData era
AllegraTxAuxData Map Word64 Metadatum
forall k a. Map k a
Map.empty StrictSeq (Timelock AllegraEra)
forall a. StrictSeq a
StrictSeq.empty
       in Version -> String -> TxBody AllegraEra -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
            (forall era. Era era => Version
eraProtVerHigh @AllegraEra)
            String
"full_txn_body"
            ( Set TxIn
-> StrictSeq (TxOut AllegraEra)
-> StrictSeq (TxCert AllegraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AllegraEra)
-> StrictMaybe TxAuxDataHash
-> TxBody AllegraEra
(EraTxOut AllegraEra, EraTxCert AllegraEra) =>
Set TxIn
-> StrictSeq (TxOut AllegraEra)
-> StrictSeq (TxCert AllegraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AllegraEra)
-> StrictMaybe TxAuxDataHash
-> TxBody AllegraEra
AllegraTxBody
                ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [TxIn
tin])
                (ShelleyTxOut AllegraEra -> StrictSeq (ShelleyTxOut AllegraEra)
forall a. a -> StrictSeq a
StrictSeq.singleton ShelleyTxOut AllegraEra
tout)
                ([ShelleyTxCert AllegraEra] -> StrictSeq (ShelleyTxCert AllegraEra)
forall a. [a] -> StrictSeq a
StrictSeq.fromList [TxCert AllegraEra
ShelleyTxCert AllegraEra
reg])
                (Map RewardAccount Coin -> Withdrawals
Withdrawals Map RewardAccount Coin
ras)
                (Integer -> Coin
Coin Integer
9)
                (StrictMaybe SlotNo -> StrictMaybe SlotNo -> ValidityInterval
ValidityInterval (SlotNo -> StrictMaybe SlotNo
forall a. a -> StrictMaybe a
SJust (SlotNo -> StrictMaybe SlotNo) -> SlotNo -> StrictMaybe SlotNo
forall a b. (a -> b) -> a -> b
$ Word64 -> SlotNo
SlotNo Word64
500) (SlotNo -> StrictMaybe SlotNo
forall a. a -> StrictMaybe a
SJust (SlotNo -> StrictMaybe SlotNo) -> SlotNo -> StrictMaybe SlotNo
forall a b. (a -> b) -> a -> b
$ Word64 -> SlotNo
SlotNo Word64
600))
                (Update AllegraEra -> StrictMaybe (Update AllegraEra)
forall a. a -> StrictMaybe a
SJust Update AllegraEra
up)
                (TxAuxDataHash -> StrictMaybe TxAuxDataHash
forall a. a -> StrictMaybe a
SJust TxAuxDataHash
mdh)
            )
            ( (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkMapLen Word
9)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
0) -- Tx Ins
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> TxIn -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxIn
tin
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
1) -- Tx Outs
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> ShelleyTxOut AllegraEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S ShelleyTxOut AllegraEra
tout
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
2) -- Tx Fee
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Coin -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (Integer -> Coin
Coin Integer
9)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
3) -- Tx TTL
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> SlotNo -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (Word64 -> SlotNo
SlotNo Word64
600)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
4) -- Tx Certs
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1) -- Seq list begin
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> ShelleyTxCert AllegraEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxCert AllegraEra
ShelleyTxCert AllegraEra
reg
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
5) -- Tx Reward Withdrawals
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Map RewardAccount Coin -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S Map RewardAccount Coin
ras
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
6) -- Tx Update
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Update AllegraEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S Update AllegraEra
up
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
7) -- Tx AuxiliaryData Hash
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> TxAuxDataHash -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxAuxDataHash
mdh
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
8) -- Tx Validity Start
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> SlotNo -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (Word64 -> SlotNo
SlotNo Word64
500)
            )
    ]

-- | Golden Tests for Mary
goldenEncodingTestsMary :: TestTree
goldenEncodingTestsMary :: TestTree
goldenEncodingTestsMary =
  String -> [TestTree] -> TestTree
testGroup
    String
"Mary"
    [ Version -> String -> MaryValue -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR a, EncCBOR a, Show a, Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBOR
        (forall era. Era era => Version
eraProtVerHigh @MaryEra)
        String
"ada_only_value"
        (Coin -> MaryValue
forall t s. Inject t s => t -> s
Val.inject (Integer -> Coin
Coin Integer
1) :: MaryValue)
        ((Tokens -> Tokens) -> ToTokens
T (Integer -> Tokens -> Tokens
TkInteger Integer
1))
    , Version -> String -> MaryValue -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR a, EncCBOR a, Show a, Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBOR
        (forall era. Era era => Version
eraProtVerHigh @MaryEra)
        String
"not_just_ada_value"
        ( Coin -> MultiAsset -> MaryValue
MaryValue (Integer -> Coin
Coin Integer
2) (MultiAsset -> MaryValue) -> MultiAsset -> MaryValue
forall a b. (a -> b) -> a -> b
$
            Map PolicyID (Map AssetName Integer) -> MultiAsset
MultiAsset (Map PolicyID (Map AssetName Integer) -> MultiAsset)
-> Map PolicyID (Map AssetName Integer) -> MultiAsset
forall a b. (a -> b) -> a -> b
$
              [(PolicyID, Map AssetName Integer)]
-> Map PolicyID (Map AssetName Integer)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
                [
                  ( PolicyID
policyID1
                  , [(AssetName, Integer)] -> Map AssetName Integer
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
                      [ (ShortByteString -> AssetName
AssetName ShortByteString
assetName1, Integer
13)
                      , (ShortByteString -> AssetName
AssetName ShortByteString
assetName2, Integer
17)
                      ]
                  )
                ,
                  ( PolicyID
policyID2
                  , AssetName -> Integer -> Map AssetName Integer
forall k a. k -> a -> Map k a
Map.singleton (ShortByteString -> AssetName
AssetName ShortByteString
assetName3) Integer
19
                  )
                ]
        )
        ( (Tokens -> Tokens) -> ToTokens
T
            ( Word -> Tokens -> Tokens
TkListLen Word
2
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
2
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkMapLen Word
2
            )
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> PolicyID -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S PolicyID
policyID1
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T
              ( Word -> Tokens -> Tokens
TkMapLen Word
2
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Tokens -> Tokens
TkBytes (ShortByteString -> ByteString
SBS.fromShort ShortByteString
assetName1)
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
13
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Tokens -> Tokens
TkBytes (ShortByteString -> ByteString
SBS.fromShort ShortByteString
assetName2)
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
17
              )
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> PolicyID -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S PolicyID
policyID2
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T
              ( Word -> Tokens -> Tokens
TkMapLen Word
1
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Tokens -> Tokens
TkBytes (ShortByteString -> ByteString
SBS.fromShort ShortByteString
assetName3)
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
19
              )
        )
    , Version -> String -> MultiAsset -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR a, EncCBOR a, Show a, Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBOR
        (forall era. Era era => Version
eraProtVerHigh @MaryEra)
        String
"multiasset_with_negative"
        (Map PolicyID (Map AssetName Integer) -> MultiAsset
MultiAsset (Map PolicyID (Map AssetName Integer) -> MultiAsset)
-> Map PolicyID (Map AssetName Integer) -> MultiAsset
forall a b. (a -> b) -> a -> b
$ PolicyID
-> Map AssetName Integer -> Map PolicyID (Map AssetName Integer)
forall k a. k -> a -> Map k a
Map.singleton PolicyID
policyID1 (AssetName -> Integer -> Map AssetName Integer
forall k a. k -> a -> Map k a
Map.singleton (ShortByteString -> AssetName
AssetName ShortByteString
assetName1) (-Integer
19)))
        ( (Tokens -> Tokens) -> ToTokens
T
            (Word -> Tokens -> Tokens
TkMapLen Word
1)
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> PolicyID -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S PolicyID
policyID1
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T
              ( Word -> Tokens -> Tokens
TkMapLen Word
1
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Tokens -> Tokens
TkBytes (ShortByteString -> ByteString
SBS.fromShort ShortByteString
assetName1)
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger (-Integer
19)
              )
        )
    , Version -> String -> MaryValue -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR a, EncCBOR a, Show a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORDecodeFailure
        (forall era. Era era => Version
eraProtVerHigh @MaryEra)
        String
"value_with_negative"
        ( Coin -> MultiAsset -> MaryValue
MaryValue (Integer -> Coin
Coin Integer
1) (MultiAsset -> MaryValue) -> MultiAsset -> MaryValue
forall a b. (a -> b) -> a -> b
$
            Map PolicyID (Map AssetName Integer) -> MultiAsset
MultiAsset (Map PolicyID (Map AssetName Integer) -> MultiAsset)
-> Map PolicyID (Map AssetName Integer) -> MultiAsset
forall a b. (a -> b) -> a -> b
$
              PolicyID
-> Map AssetName Integer -> Map PolicyID (Map AssetName Integer)
forall k a. k -> a -> Map k a
Map.singleton PolicyID
policyID1 (AssetName -> Integer -> Map AssetName Integer
forall k a. k -> a -> Map k a
Map.singleton (ShortByteString -> AssetName
AssetName ShortByteString
assetName1) (-Integer
19))
        )
        ( (Tokens -> Tokens) -> ToTokens
T
            ( Word -> Tokens -> Tokens
TkListLen Word
2
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger Integer
1
                (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Tokens -> Tokens
TkMapLen Word
1
            )
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> PolicyID -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S PolicyID
policyID1
            ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T
              ( Word -> Tokens -> Tokens
TkMapLen Word
1
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Tokens -> Tokens
TkBytes (ShortByteString -> ByteString
SBS.fromShort ShortByteString
assetName1)
                  (Tokens -> Tokens) -> (Tokens -> Tokens) -> Tokens -> Tokens
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Tokens -> Tokens
TkInteger (-Integer
19)
              )
        )
    , forall era.
(AllegraEraScript era, ToCBOR (NativeScript era),
 DecCBOR (Annotator (NativeScript era))) =>
TestTree
scriptGoldenTest @MaryEra
    , forall era. Era era => TestTree
metadataNoScriptsGoldenTest @MaryEra
    , forall era.
(ShelleyEraScript era, NativeScript era ~ Timelock era) =>
TestTree
metadataWithScriptsGoldenTest @MaryEra
    , -- "minimal_txn_body"
      let tin :: TxIn
tin = HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial TxId
genesisId Integer
1
          tout :: ShelleyTxOut MaryEra
tout = forall era.
(HasCallStack, Era era, Val (Value era)) =>
Addr -> Value era -> ShelleyTxOut era
ShelleyTxOut @MaryEra Addr
testAddrE (Coin -> Value MaryEra
forall t s. Inject t s => t -> s
Val.inject (Coin -> Value MaryEra) -> Coin -> Value MaryEra
forall a b. (a -> b) -> a -> b
$ Integer -> Coin
Coin Integer
2)
       in Version -> String -> TxBody MaryEra -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
            (forall era. Era era => Version
eraProtVerHigh @MaryEra)
            String
"minimal_txbody"
            ( Set TxIn
-> StrictSeq (TxOut MaryEra)
-> StrictSeq (TxCert MaryEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update MaryEra)
-> StrictMaybe TxAuxDataHash
-> MultiAsset
-> TxBody MaryEra
(EraTxOut MaryEra, EraTxCert MaryEra) =>
Set TxIn
-> StrictSeq (TxOut MaryEra)
-> StrictSeq (TxCert MaryEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update MaryEra)
-> StrictMaybe TxAuxDataHash
-> MultiAsset
-> TxBody MaryEra
MaryTxBody
                ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [TxIn
tin])
                (ShelleyTxOut MaryEra -> StrictSeq (ShelleyTxOut MaryEra)
forall a. a -> StrictSeq a
StrictSeq.singleton ShelleyTxOut MaryEra
tout)
                StrictSeq (TxCert MaryEra)
StrictSeq (ShelleyTxCert MaryEra)
forall a. StrictSeq a
StrictSeq.empty
                (Map RewardAccount Coin -> Withdrawals
Withdrawals Map RewardAccount Coin
forall k a. Map k a
Map.empty)
                (Integer -> Coin
Coin Integer
9)
                (StrictMaybe SlotNo -> StrictMaybe SlotNo -> ValidityInterval
ValidityInterval StrictMaybe SlotNo
forall a. StrictMaybe a
SNothing StrictMaybe SlotNo
forall a. StrictMaybe a
SNothing)
                StrictMaybe (Update MaryEra)
forall a. StrictMaybe a
SNothing
                StrictMaybe TxAuxDataHash
forall a. StrictMaybe a
SNothing
                MultiAsset
forall a. Monoid a => a
mempty
            )
            ( (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkMapLen Word
3)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
0) -- Tx Ins
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> TxIn -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxIn
tin
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
1) -- Tx Outs
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> ShelleyTxOut MaryEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S ShelleyTxOut MaryEra
tout
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
2) -- Tx Fee
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word64 -> Tokens -> Tokens
TkWord64 Word64
9)
            )
    , -- "full_txn_body"
      let tin :: TxIn
tin = HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial TxId
genesisId Integer
1
          tout :: ShelleyTxOut MaryEra
tout = forall era.
(HasCallStack, Era era, Val (Value era)) =>
Addr -> Value era -> ShelleyTxOut era
ShelleyTxOut @MaryEra Addr
testAddrE (Coin -> Value MaryEra
forall t s. Inject t s => t -> s
Val.inject (Coin -> Value MaryEra) -> Coin -> Value MaryEra
forall a b. (a -> b) -> a -> b
$ Integer -> Coin
Coin Integer
2)
          reg :: TxCert MaryEra
reg = Credential 'Staking -> TxCert MaryEra
forall era.
ShelleyEraTxCert era =>
Credential 'Staking -> TxCert era
RegTxCert Credential 'Staking
testStakeCred
          ras :: Map RewardAccount Coin
ras = RewardAccount -> Coin -> Map RewardAccount Coin
forall k a. k -> a -> Map k a
Map.singleton (Network -> Credential 'Staking -> RewardAccount
RewardAccount Network
Testnet (KeyHash 'Staking -> Credential 'Staking
forall (kr :: KeyRole). KeyHash kr -> Credential kr
KeyHashObj KeyHash 'Staking
testKeyHash)) (Integer -> Coin
Coin Integer
123)
          up :: Update MaryEra
up = Update MaryEra
forall era. EraPParams era => Update era
testUpdate
          mdh :: TxAuxDataHash
mdh = forall era. EraTxAuxData era => TxAuxData era -> TxAuxDataHash
hashTxAuxData @AllegraEra (TxAuxData AllegraEra -> TxAuxDataHash)
-> TxAuxData AllegraEra -> TxAuxDataHash
forall a b. (a -> b) -> a -> b
$ Map Word64 Metadatum
-> StrictSeq (Timelock AllegraEra) -> AllegraTxAuxData AllegraEra
forall era.
Era era =>
Map Word64 Metadatum
-> StrictSeq (Timelock era) -> AllegraTxAuxData era
AllegraTxAuxData Map Word64 Metadatum
forall k a. Map k a
Map.empty StrictSeq (Timelock AllegraEra)
forall a. StrictSeq a
StrictSeq.empty
          mint :: Map PolicyID (Map AssetName Integer)
mint = PolicyID
-> Map AssetName Integer -> Map PolicyID (Map AssetName Integer)
forall k a. k -> a -> Map k a
Map.singleton PolicyID
policyID1 (Map AssetName Integer -> Map PolicyID (Map AssetName Integer))
-> Map AssetName Integer -> Map PolicyID (Map AssetName Integer)
forall a b. (a -> b) -> a -> b
$ AssetName -> Integer -> Map AssetName Integer
forall k a. k -> a -> Map k a
Map.singleton (ShortByteString -> AssetName
AssetName ShortByteString
assetName1) Integer
13
       in Version -> String -> TxBody MaryEra -> ToTokens -> TestTree
forall a.
(HasCallStack, DecCBOR (Annotator a), DecCBOR a, ToCBOR a, Show a,
 Eq a) =>
Version -> String -> a -> ToTokens -> TestTree
checkEncodingCBORAnnotated
            (forall era. Era era => Version
eraProtVerHigh @MaryEra)
            String
"full_txn_body"
            ( Set TxIn
-> StrictSeq (TxOut MaryEra)
-> StrictSeq (TxCert MaryEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update MaryEra)
-> StrictMaybe TxAuxDataHash
-> MultiAsset
-> TxBody MaryEra
(EraTxOut MaryEra, EraTxCert MaryEra) =>
Set TxIn
-> StrictSeq (TxOut MaryEra)
-> StrictSeq (TxCert MaryEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update MaryEra)
-> StrictMaybe TxAuxDataHash
-> MultiAsset
-> TxBody MaryEra
MaryTxBody
                ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [TxIn
tin])
                (ShelleyTxOut MaryEra -> StrictSeq (ShelleyTxOut MaryEra)
forall a. a -> StrictSeq a
StrictSeq.singleton ShelleyTxOut MaryEra
tout)
                ([ShelleyTxCert MaryEra] -> StrictSeq (ShelleyTxCert MaryEra)
forall a. [a] -> StrictSeq a
StrictSeq.fromList [TxCert MaryEra
ShelleyTxCert MaryEra
reg])
                (Map RewardAccount Coin -> Withdrawals
Withdrawals Map RewardAccount Coin
ras)
                (Integer -> Coin
Coin Integer
9)
                (StrictMaybe SlotNo -> StrictMaybe SlotNo -> ValidityInterval
ValidityInterval (SlotNo -> StrictMaybe SlotNo
forall a. a -> StrictMaybe a
SJust (SlotNo -> StrictMaybe SlotNo) -> SlotNo -> StrictMaybe SlotNo
forall a b. (a -> b) -> a -> b
$ Word64 -> SlotNo
SlotNo Word64
500) (SlotNo -> StrictMaybe SlotNo
forall a. a -> StrictMaybe a
SJust (SlotNo -> StrictMaybe SlotNo) -> SlotNo -> StrictMaybe SlotNo
forall a b. (a -> b) -> a -> b
$ Word64 -> SlotNo
SlotNo Word64
600))
                (Update MaryEra -> StrictMaybe (Update MaryEra)
forall a. a -> StrictMaybe a
SJust Update MaryEra
up)
                (TxAuxDataHash -> StrictMaybe TxAuxDataHash
forall a. a -> StrictMaybe a
SJust TxAuxDataHash
mdh)
                (Map PolicyID (Map AssetName Integer) -> MultiAsset
MultiAsset Map PolicyID (Map AssetName Integer)
mint)
            )
            ( (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkMapLen Word
10)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
0) -- Tx Ins
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> TxIn -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxIn
tin
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
1) -- Tx Outs
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> ShelleyTxOut MaryEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S ShelleyTxOut MaryEra
tout
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
2) -- Tx Fee
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Coin -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (Integer -> Coin
Coin Integer
9)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
3) -- Tx TTL
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> SlotNo -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (Word64 -> SlotNo
SlotNo Word64
600)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
4) -- Tx Certs
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkListLen Word
1)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> ShelleyTxCert MaryEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxCert MaryEra
ShelleyTxCert MaryEra
reg
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
5) -- Tx Reward Withdrawals
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Map RewardAccount Coin -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S Map RewardAccount Coin
ras
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
6) -- Tx Update
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Update MaryEra -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S Update MaryEra
up
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
7) -- Tx AuxiliaryData Hash
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> TxAuxDataHash -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S TxAuxDataHash
mdh
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
8) -- Tx Validity Start
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> SlotNo -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S (Word64 -> SlotNo
SlotNo Word64
500)
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> (Tokens -> Tokens) -> ToTokens
T (Word -> Tokens -> Tokens
TkWord Word
9) -- Tx Mint
                ToTokens -> ToTokens -> ToTokens
forall a. Semigroup a => a -> a -> a
<> Map PolicyID (Map AssetName Integer) -> ToTokens
forall a. EncCBOR a => a -> ToTokens
S Map PolicyID (Map AssetName Integer)
mint
            )
    ]

assetName32Bytes :: Assertion
assetName32Bytes :: Assertion
assetName32Bytes =
  Version -> Version -> AssetName -> Assertion
forall t.
(EncCBOR t, DecCBOR t, Eq t, HasCallStack) =>
Version -> Version -> t -> Assertion
roundTripCborRangeFailureExpectation (forall era. Era era => Version
eraProtVerHigh @MaryEra) Version
forall a. Bounded a => a
maxBound (AssetName -> Assertion) -> AssetName -> Assertion
forall a b. (a -> b) -> a -> b
$
    ShortByteString -> AssetName
AssetName ShortByteString
"123456789-123456789-123456789-123"

-- | Golden Tests for Allegra and Mary
goldenEncodingTests :: TestTree
goldenEncodingTests :: TestTree
goldenEncodingTests =
  String -> [TestTree] -> TestTree
testGroup
    String
"Golden Encoding Tests"
    [ TestTree
goldenEncodingTestsAllegra
    , TestTree
goldenEncodingTestsMary
    , String -> Assertion -> TestTree
testCase String
"33 bytes asset name too big" Assertion
assetName32Bytes
    ]