Skip to content

Commit

Permalink
Test golden files in Rust
Browse files Browse the repository at this point in the history
  • Loading branch information
szg251 committed Apr 16, 2024
1 parent ab9957c commit 4935646
Show file tree
Hide file tree
Showing 26 changed files with 16,151 additions and 3,466 deletions.
19,291 changes: 15,852 additions & 3,439 deletions flake.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion flake.nix
Expand Up @@ -33,7 +33,7 @@

# Rust runtime
plutus-ledger-api-rust = {
url = "github:mlabs-haskell/plutus-ledger-api-rust";
url = "github:mlabs-haskell/plutus-ledger-api-rust?ref=szg251/fix";
inputs.nixpkgs.follows = "nixpkgs";

};
Expand Down
Expand Up @@ -455,13 +455,13 @@ instance Json PlutusV1.TxInfo where
)

instance Json PlutusV1.ScriptContext where
toJson (PlutusV1.ScriptContext txInfo scriptPurpose) = object ["tx_info" .= toJson txInfo, "script_purpose" .= toJson scriptPurpose]
toJson (PlutusV1.ScriptContext txInfo scriptPurpose) = object ["tx_info" .= toJson txInfo, "purpose" .= toJson scriptPurpose]
fromJson =
withObject
"Plutus.V1.ScriptContext"
( \obj -> do
txInfo <- obj .: "tx_info"
scriptPurpose <- obj .: "script_purpose"
scriptPurpose <- obj .: "purpose"
return $ PlutusV1.ScriptContext txInfo scriptPurpose
)

Expand Down Expand Up @@ -504,13 +504,13 @@ instance Json PlutusV2.TxInfo where
)

instance Json PlutusV2.ScriptContext where
toJson (PlutusV2.ScriptContext txInfo scriptPurpose) = object ["tx_info" .= toJson txInfo, "script_purpose" .= toJson scriptPurpose]
toJson (PlutusV2.ScriptContext txInfo scriptPurpose) = object ["tx_info" .= toJson txInfo, "purpose" .= toJson scriptPurpose]
fromJson =
withObject
"Plutus.V2.ScriptContext"
( \obj -> do
txInfo <- obj .: "tx_info"
scriptPurpose <- obj .: "script_purpose"
scriptPurpose <- obj .: "purpose"
return $ PlutusV2.ScriptContext txInfo scriptPurpose
)

Expand Down
2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.0.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.1.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.2.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.3.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.4.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.5.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.6.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.7.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.8.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV1.ScriptContext.9.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.0.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.1.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.2.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.3.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.4.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.5.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.6.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.7.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.8.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion testsuites/lbt-plutus/golden/PlutusV2.ScriptContext.9.json

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions testsuites/lbt-plutus/lbt-plutus-rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

197 changes: 195 additions & 2 deletions testsuites/lbt-plutus/lbt-plutus-rust/tests/goldens.rs
Expand Up @@ -6,17 +6,20 @@ use plutus_ledger_api::plutus_data::PlutusData;
use plutus_ledger_api::v1::address::{
Address, CertificateIndex, ChainPointer, Credential, Slot, StakingCredential, TransactionIndex,
};
use plutus_ledger_api::v1::crypto::{Ed25519PubKeyHash, LedgerBytes};
use plutus_ledger_api::v1::crypto::{Ed25519PubKeyHash, LedgerBytes, PaymentPubKeyHash};
use plutus_ledger_api::v1::datum::{Datum, DatumHash};
use plutus_ledger_api::v1::interval::{Extended, LowerBound, PlutusInterval, UpperBound};
use plutus_ledger_api::v1::redeemer::{Redeemer, RedeemerHash};
use plutus_ledger_api::v1::script::{MintingPolicyHash, ScriptHash, ValidatorHash};
use plutus_ledger_api::v1::transaction::{
POSIXTime, TransactionHash, TransactionInput, TransactionOutput, TxInInfo,
POSIXTime, ScriptContext, TransactionHash, TransactionInfo, TransactionInput,
TransactionOutput, TxInInfo,
};
use plutus_ledger_api::v1::value::{AssetClass, CurrencySymbol, TokenName, Value};
use plutus_ledger_api::v2::assoc_map::AssocMap;
use plutus_ledger_api::v2::datum::OutputDatum;
use plutus_ledger_api::v2::transaction::{
DCert, ScriptContext as ScriptContextV2, ScriptPurpose, TransactionInfo as TransactionInfoV2,
TransactionOutput as TransactionOutputV2, TxInInfo as TxInInfoV2,
};
use std::collections::BTreeMap;
Expand Down Expand Up @@ -336,6 +339,128 @@ pub fn tx_out_goldens_v1() -> Vec<TransactionOutput> {
.collect()
}

pub fn dcert_goldens() -> Vec<DCert> {
[
vec![DCert::Mir],
vec![DCert::Genesis],
pubkeyhash_goldens()
.into_iter()
.map(|pkh| DCert::PoolRetire(PaymentPubKeyHash(pkh), BigInt::from(1337)))
.collect(),
staking_credential_goldens()
.into_iter()
.map(|staking_cred| DCert::DelegRegKey(staking_cred))
.collect(),
pubkeyhash_goldens()
.iter()
.flat_map(|pkh1| {
pubkeyhash_goldens()
.into_iter()
.map(|pkh2| {
DCert::PoolRegister(
PaymentPubKeyHash(pkh1.clone()),
PaymentPubKeyHash(pkh2),
)
})
.collect::<Vec<_>>()
})
.collect(),
staking_credential_goldens()
.into_iter()
.map(|staking_cred| DCert::DelegDeRegKey(staking_cred))
.collect(),
staking_credential_goldens()
.iter()
.flat_map(|staking_cred| {
pubkeyhash_goldens()
.into_iter()
.map(|pkh| DCert::DelegDelegate(staking_cred.clone(), PaymentPubKeyHash(pkh)))
.collect::<Vec<_>>()
})
.collect(),
]
.concat()
}

pub fn script_purpose_goldens() -> Vec<ScriptPurpose> {
[
currency_symbol_goldens()
.into_iter()
.map(|cur_sym| ScriptPurpose::Minting(cur_sym))
.collect::<Vec<_>>(),
tx_out_ref_goldens()
.into_iter()
.map(|tx_out_ref| ScriptPurpose::Spending(tx_out_ref))
.collect::<Vec<_>>(),
staking_credential_goldens()
.into_iter()
.map(|staking_cred| ScriptPurpose::Rewarding(staking_cred))
.collect::<Vec<_>>(),
dcert_goldens()
.into_iter()
.map(|dcert| ScriptPurpose::Certifying(dcert))
.collect::<Vec<_>>(),
]
.concat()
}

pub fn tx_info_goldens_v1() -> Vec<TransactionInfo> {
value_goldens()
.iter()
.flat_map(|fee| {
value_goldens()
.iter()
.flat_map(|mint| {
posix_time_range_goldens()
.iter()
.flat_map(|valid_range| {
tx_id_goldens()
.into_iter()
.map(|tx_id| TransactionInfo {
inputs: tx_in_info_goldens_v1(),
outputs: tx_out_goldens_v1(),
fee: fee.clone(),
mint: mint.clone(),
d_cert: dcert_goldens(),
wdrl: staking_credential_goldens()
.into_iter()
.map(|staking_cred| (staking_cred, BigInt::from(1234)))
.collect(),
valid_range: valid_range.clone(),
signatories: pubkeyhash_goldens()
.into_iter()
.map(|pkh| PaymentPubKeyHash(pkh))
.collect(),
datums: datum_hash_goldens()
.into_iter()
.zip(datum_goldens().into_iter())
.collect(),
id: tx_id,
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
})
.collect()
}

pub fn script_context_goldens_v1() -> Vec<ScriptContext> {
tx_info_goldens_v1()
.iter()
.flat_map(|tx_info| {
script_purpose_goldens()
.into_iter()
.map(|purpose| ScriptContext {
purpose,
tx_info: tx_info.clone(),
})
.collect::<Vec<_>>()
})
.collect()
}

pub fn tx_in_info_goldens_v2() -> Vec<TxInInfoV2> {
tx_out_ref_goldens()
.iter()
Expand Down Expand Up @@ -391,6 +516,74 @@ pub fn out_datum_goldens() -> Vec<OutputDatum> {
.concat()
}

pub fn tx_info_goldens_v2() -> Vec<TransactionInfoV2> {
value_goldens()
.iter()
.flat_map(|fee| {
value_goldens()
.iter()
.flat_map(|mint| {
posix_time_range_goldens()
.iter()
.flat_map(|valid_range| {
tx_id_goldens()
.into_iter()
.map(|tx_id| TransactionInfoV2 {
inputs: tx_in_info_goldens_v2(),
reference_inputs: tx_in_info_goldens_v2(),
outputs: tx_out_goldens_v2(),
fee: fee.clone(),
mint: mint.clone(),
d_cert: dcert_goldens(),
wdrl: AssocMap::from(
staking_credential_goldens()
.into_iter()
.map(|staking_cred| (staking_cred, BigInt::from(1234)))
.collect::<Vec<_>>(),
),
valid_range: valid_range.clone(),
signatories: pubkeyhash_goldens()
.into_iter()
.map(|pkh| PaymentPubKeyHash(pkh))
.collect(),
redeemers: AssocMap::from(
script_purpose_goldens()
.into_iter()
.zip(redeemer_goldens().into_iter())
.collect::<Vec<_>>(),
),
datums: AssocMap::from(
datum_hash_goldens()
.into_iter()
.zip(datum_goldens().into_iter())
.collect::<Vec<_>>(),
),
id: tx_id,
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
})
.collect()
}

pub fn script_context_goldens_v2() -> Vec<ScriptContextV2> {
tx_info_goldens_v2()
.iter()
.flat_map(|tx_info| {
script_purpose_goldens()
.into_iter()
.map(|purpose| ScriptContextV2 {
purpose,
tx_info: tx_info.clone(),
})
.collect::<Vec<_>>()
})
.collect()
}

pub fn foo_sum_goldens<A: Clone, B: Clone, C>(x: A, y: B, z: C) -> Vec<FooSum<A, B, C>> {
vec![
FooSum::Foo(x.clone(), y.clone(), z),
Expand Down
72 changes: 72 additions & 0 deletions testsuites/lbt-plutus/lbt-plutus-rust/tests/main.rs
Expand Up @@ -164,6 +164,29 @@ mod json_tests {
from_to_golden_test("PlutusV1.TxOut", goldens::tx_out_goldens_v1())
}

#[test]
fn dcert_v1_from_to_golden_test() {
from_to_golden_test("PlutusV1.DCert", goldens::dcert_goldens())
}

#[test]
fn script_purpose_v1_from_to_golden_test() {
from_to_golden_test("PlutusV1.ScriptPurpose", goldens::script_purpose_goldens())
}

#[test]
fn tx_info_v1_from_to_golden_test() {
from_to_golden_test("PlutusV1.TxInfo", goldens::tx_info_goldens_v1())
}

#[test]
fn script_context_v1_from_to_golden_test() {
from_to_golden_test(
"PlutusV1.ScriptContext",
goldens::script_context_goldens_v1(),
)
}

#[test]
fn tx_in_info_v2_from_to_golden_test() {
from_to_golden_test("PlutusV2.TxInInfo", goldens::tx_in_info_goldens_v2())
Expand All @@ -178,6 +201,19 @@ mod json_tests {
fn tx_out_v2_from_to_golden_test() {
from_to_golden_test("PlutusV2.TxOut", goldens::tx_out_goldens_v2())
}

#[test]
fn tx_info_v2_from_to_golden_test() {
from_to_golden_test("PlutusV2.TxInfo", goldens::tx_info_goldens_v2())
}

#[test]
fn script_context_v2_from_to_golden_test() {
from_to_golden_test(
"PlutusV2.ScriptContext",
goldens::script_context_goldens_v2(),
)
}
}

mod plutus_data_tests {
Expand Down Expand Up @@ -403,6 +439,29 @@ mod plutus_data_tests {
from_to_golden_test("PlutusV1.TxOut", goldens::tx_out_goldens_v1())
}

#[test]
fn dcert_v1_from_to_golden_test() {
from_to_golden_test("PlutusV1.DCert", goldens::dcert_goldens())
}

#[test]
fn script_purpose_v1_from_to_golden_test() {
from_to_golden_test("PlutusV1.ScriptPurpose", goldens::script_purpose_goldens())
}

#[test]
fn tx_info_v1_from_to_golden_test() {
from_to_golden_test("PlutusV1.TxInfo", goldens::tx_info_goldens_v1())
}

#[test]
fn script_context_v1_from_to_golden_test() {
from_to_golden_test(
"PlutusV1.ScriptContext",
goldens::script_context_goldens_v1(),
)
}

#[test]
fn tx_in_info_v2_from_to_golden_test() {
from_to_golden_test("PlutusV2.TxInInfo", goldens::tx_in_info_goldens_v2())
Expand All @@ -417,6 +476,19 @@ mod plutus_data_tests {
fn tx_out_v2_from_to_golden_test() {
from_to_golden_test("PlutusV2.TxOut", goldens::tx_out_goldens_v2())
}

#[test]
fn tx_info_v2_from_to_golden_test() {
from_to_golden_test("PlutusV2.TxInfo", goldens::tx_info_goldens_v2())
}

#[test]
fn script_context_v2_from_to_golden_test() {
from_to_golden_test(
"PlutusV2.ScriptContext",
goldens::script_context_goldens_v2(),
)
}
}

mod prelude_tests {
Expand Down

0 comments on commit 4935646

Please sign in to comment.