From 6609ab335c961365577cbbe006dd370804e855de Mon Sep 17 00:00:00 2001 From: microproofs Date: Fri, 2 Jun 2023 13:00:09 -0400 Subject: [PATCH] chore: add another test for field destructuring in a list --- crates/aiken-project/src/tests/gen_uplc.rs | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/crates/aiken-project/src/tests/gen_uplc.rs b/crates/aiken-project/src/tests/gen_uplc.rs index f11ff7ae..112dc101 100644 --- a/crates/aiken-project/src/tests/gen_uplc.rs +++ b/crates/aiken-project/src/tests/gen_uplc.rs @@ -2848,3 +2848,74 @@ fn record_update_output_first_last_val() { false, ); } + +#[test] +fn list_fields_unwrap() { + let src = r#" + type Fields { + a: ByteArray, + b: Int, + } + + fn data_fields(){ + [ + Fields{a: #"", b: 14}, + Fields{a: #"AA", b: 0} + ] + } + + test list_fields_unwr_0() { + when data_fields() is { + [Fields { b, .. }, ..] -> + b > 0 + _ -> + False + } == True + } + "#; + + assert_uplc( + src, + Term::var("field_list") + .delayed_choose_list( + Term::bool(false), + Term::less_than_integer() + .apply(Term::integer(0.into())) + .apply(Term::var("b")) + .lambda("b") + .apply( + Term::un_i_data() + .apply(Term::head_list().apply(Term::var("record_index_1"))), + ) + .lambda("record_index_1") + .apply(Term::tail_list().apply(Term::var("item_1_fields"))) + .lambda("item_1_fields") + .apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("item_1"))) + .lambda("item_1") + .apply(Term::head_list().apply(Term::var("field_list"))) + .lambda("clauses_delayed") + .apply(Term::bool(false).delay()) + .lambda("tail_1") + .apply(Term::tail_list().apply(Term::var("field_list"))), + ) + .lambda("field_list") + .apply(Term::list_values(vec![ + Constant::Data(Data::constr( + 0, + vec![Data::bytestring(vec![]), Data::integer(14.into())], + )), + Constant::Data(Data::constr( + 0, + vec![Data::bytestring(vec![170]), Data::integer(0.into())], + )), + ])) + .delayed_if_else( + Term::bool(true), + Term::bool(true).if_else(Term::bool(false), Term::bool(true)), + ) + .constr_get_field() + .constr_fields_exposer() + .constr_index_exposer(), + false, + ); +}