Update most of the tests and builder functions to use the new delay_branch_functions

This commit is contained in:
microproofs 2024-08-02 01:37:23 -04:00 committed by Kasey
parent d7e9fef4d3
commit 4cf81a19b1
2 changed files with 475 additions and 601 deletions

View File

@ -1198,8 +1198,7 @@ pub fn list_access_to_uplc(
}
return Term::var("empty_list")
.choose_list(term.delay(), otherwise_delayed)
.force()
.delay_empty_choose_list(term, otherwise_delayed)
.lambda("empty_list");
}
@ -1272,11 +1271,10 @@ pub fn list_access_to_uplc(
} else if tail_present {
// Custom error instead of trying to do head_item on a possibly empty list.
Term::var(tail_name.to_string())
.choose_list(
.delay_filled_choose_list(
otherwise_delayed.clone(),
head_item(name, tipo, &tail_name, acc).delay(),
head_item(name, tipo, &tail_name, acc),
)
.force()
.lambda(tail_name)
} else if otherwise_delayed == Term::Error.delay() {
// Check head is last item in this list
@ -1286,14 +1284,13 @@ pub fn list_access_to_uplc(
&tail_name,
Term::tail_list()
.apply(Term::var(tail_name.to_string()))
.choose_list(acc.delay(), Term::Error.delay())
.force(),
.delayed_choose_list(acc, Term::Error),
)
.lambda(tail_name)
} else {
// Custom error if list is not empty after this head
Term::var(tail_name.to_string())
.choose_list(
.delay_filled_choose_list(
otherwise_delayed.clone(),
head_item(
name,
@ -1301,12 +1298,12 @@ pub fn list_access_to_uplc(
&tail_name,
Term::tail_list()
.apply(Term::var(tail_name.to_string()))
.choose_list(acc.delay(), otherwise_delayed.clone())
.force(),
.delay_empty_choose_list(
acc,
otherwise_delayed.clone(),
),
),
)
.delay(),
)
.force()
.lambda(tail_name)
}
}
@ -1333,7 +1330,7 @@ pub fn list_access_to_uplc(
// case for a custom error if the list is empty at this point
Term::var(tail_name.to_string())
.choose_list(
.delay_filled_choose_list(
otherwise_delayed.clone(),
head_item(
name,
@ -1342,10 +1339,8 @@ pub fn list_access_to_uplc(
acc.apply(
Term::tail_list().apply(Term::var(tail_name.to_string())),
),
),
)
.delay(),
)
.force()
.lambda(tail_name)
}
}

View File

@ -89,6 +89,8 @@ fn assert_uplc(source_code: &str, expected: Term<Name>, should_fail: bool) {
TestType::Validator(func) => {
let program = generator.generate(func, &script.1);
let pretty_program = program.to_pretty();
let debruijn_program: Program<DeBruijn> = program.try_into().unwrap();
let expected = Program {
@ -98,9 +100,16 @@ fn assert_uplc(source_code: &str, expected: Term<Name>, should_fail: bool) {
let expected = optimize::aiken_optimize_and_intern(expected);
let pretty_expected = expected.to_pretty();
let expected: Program<DeBruijn> = expected.try_into().unwrap();
assert_eq!(debruijn_program.to_pretty(), expected.to_pretty());
assert!(
debruijn_program.to_pretty() == expected.to_pretty(),
"=============== generated:\n{}\n\n=============== expected:\n{}",
pretty_program,
pretty_expected,
);
}
}
}
@ -3690,52 +3699,51 @@ fn when_tuple_deconstruction() {
assert_uplc(
src,
Term::choose_data_constr(
Name::text("__val").into(),
|v| {
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("dat")))
.if_then_else(
.delay_true_if_then_else(
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("red")))
.if_then_else(
.delay_true_if_then_else(
Term::equals_integer()
.apply(
Term::un_i_data().apply(
Term::head_list().apply(
.apply(Term::un_i_data().apply(Term::head_list().apply(
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("a")),
),
),
)
)))
.apply(Term::var("x"))
.delayed_if_then_else(
Term::bool(true),
Term::bool(false).delayed_trace(Term::string("a.idx == x ? False")),
Term::bool(false)
.delayed_trace(Term::string("a.idx == x ? False")),
)
.lambda("x")
.apply(
Term::un_i_data()
.apply(Term::head_list().apply(Term::var("red_constr_fields"))),
)
.apply(Term::un_i_data().apply(
Term::head_list().apply(Term::var("red_constr_fields")),
))
.lambda("red_constr_fields")
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("red")))
.delay(),
.apply(
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("red")),
),
Term::var("other_clauses"),
)
.force()
.lambda("a")
.apply(Term::head_list().apply(Term::var("dat_constr_fields")))
.lambda("dat_constr_fields")
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat")))
.delay(),
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
Term::var("other_clauses"),
)
.force()
.lambda("other_clauses")
.apply(Term::bool(true).delay())
.lambda("dat")
.apply(Term::head_list().apply(Term::var("pair_subject")))
.lambda("red")
.apply(Term::head_list().apply(Term::tail_list().apply(Term::var("pair_subject"))))
.apply(
Term::head_list().apply(Term::tail_list().apply(Term::var("pair_subject"))),
)
.lambda("pair_subject")
.apply(
Term::mk_cons().apply(Term::var("dat")).apply(
@ -3761,56 +3769,45 @@ fn when_tuple_deconstruction() {
.apply(Term::var("subject"))
.delayed_if_then_else(
Term::var("red_constr_fields")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::choose_data_integer(
Name::text("__val").into(),
|v| {
Term::tail_list()
.apply(Term::var("red_constr_fields"))
.choose_list(
Term::unit().delay(),
.delay_empty_choose_list(
Term::unit(),
Term::var("param_msg"),
)
.force()
.lambda("field_1")
.apply(
Term::var("__val")
.choose_data(
Term::var("param_msg"),
Term::var("param_msg"),
Term::var("param_msg"),
Term::un_i_data()
.apply(Term::var("__val"))
.delay(),
Term::var("param_msg"),
.apply(v)
},
&Term::var("param_msg"),
)
.force()
.lambda("__val")
.apply(
Term::head_list()
.apply(Term::var("red_constr_fields")),
),
)
.delay(),
)
.force()
.lambda("red_constr_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("red")),
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("red")),
),
Term::equals_integer()
.apply(Term::integer(1.into()))
.apply(Term::var("subject"))
.if_then_else(
.delay_true_if_then_else(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("red"))
.choose_list(
Term::unit().delay(),
.delay_empty_choose_list(
Term::unit(),
Term::var("param_msg"),
)
.force()
.delay(),
),
Term::var("param_msg"),
)
.force(),
),
)
.lambda("subject")
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("red")))
@ -3821,19 +3818,12 @@ fn when_tuple_deconstruction() {
.apply(Term::var("red:RedSpend")),
)
.lambda("red")
.apply(
Term::var("__val")
.choose_data(
Term::var("__val").delay(),
Term::var("red:RedSpend"),
Term::var("red:RedSpend"),
Term::var("red:RedSpend"),
Term::var("red:RedSpend"),
.apply(v)
},
&Term::var("red:RedSpend"),
)
.force()
.lambda("__val")
.apply(Term::var("red")),
)
.apply(Term::var("red"))
.lambda("red")
.lambda("_")
.apply(
@ -3845,61 +3835,43 @@ fn when_tuple_deconstruction() {
.apply(Term::var("subject"))
.delayed_if_then_else(
Term::var("dat_constr_fields")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::choose_data_constr(
Name::text("__val").into(),
|v| {
Term::tail_list()
.apply(Term::var("dat_constr_fields"))
.choose_list(
Term::unit()
.lambda("_")
.apply(
.delay_empty_choose_list(
Term::unit().lambda("_").apply(
Term::var("expect_Thing")
.apply(Term::var("field_1"))
.apply(Term::var("param_msg")),
)
.delay(),
),
Term::var("param_msg"),
)
.force()
.lambda("field_1")
.apply(
Term::var("__val")
.choose_data(
Term::var("__val").delay(),
Term::var("param_msg"),
Term::var("param_msg"),
Term::var("param_msg"),
Term::var("param_msg"),
.apply(v)
},
&Term::var("param_msg"),
)
.force()
.lambda("__val")
.apply(
Term::head_list()
.apply(Term::var("dat_constr_fields")),
),
.apply(Term::head_list().apply(Term::var("dat_constr_fields"))),
)
.delay(),
)
.force()
.lambda("dat_constr_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat")),
),
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
Term::equals_integer()
.apply(Term::integer(1.into()))
.apply(Term::var("subject"))
.if_then_else(
.delay_true_if_then_else(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("dat"))
.choose_list(
Term::unit().delay(),
.delay_empty_choose_list(
Term::unit(),
Term::var("param_msg"),
)
.force()
.delay(),
),
Term::var("param_msg"),
)
.force(),
),
)
.lambda("subject")
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("dat")))
@ -3911,17 +3883,16 @@ fn when_tuple_deconstruction() {
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::var("subject"))
.if_then_else(
.delay_true_if_then_else(
Term::var("field_1_constr_fields")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::tail_list()
.apply(Term::var("field_1_constr_fields"))
.choose_list(
Term::unit().delay(),
.delay_empty_choose_list(
Term::unit(),
Term::var("param_msg"),
)
.force()
.lambda("idx")
.apply(
Term::var("__val")
@ -3937,23 +3908,17 @@ fn when_tuple_deconstruction() {
.force()
.lambda("__val")
.apply(
Term::head_list().apply(Term::var(
"field_1_constr_fields",
)),
Term::head_list()
.apply(Term::var("field_1_constr_fields")),
),
),
)
.delay(),
)
.force()
.lambda("field_1_constr_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("field_1")),
)
.delay(),
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("field_1")),
),
Term::var("param_msg"),
)
.force()
.lambda("subject")
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("field_1")))
.lambda("param_msg")
@ -4026,13 +3991,11 @@ fn when_tuple_empty_lists() {
assert_uplc(
src,
Term::var("bucket_tuple_fst")
.choose_list(Term::bool(false).delay(), Term::var("delayed_clause"))
.force()
.delay_empty_choose_list(Term::bool(false), Term::var("delayed_clause"))
.lambda("delayed_clause")
.apply(
Term::var("bucket_tuple_snd")
.choose_list(Term::bool(false).delay(), Term::var("delayed_clause"))
.force()
.delay_empty_choose_list(Term::bool(false), Term::var("delayed_clause"))
.lambda("delayed_clause")
.apply(
Term::equals_integer()
@ -4113,15 +4076,12 @@ fn generic_validator_type_test() {
let void_check = Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::fst_pair().apply(Term::unconstr_data().apply(Term::var("__val"))))
.if_then_else(
.delay_true_if_then_else(
Term::snd_pair()
.apply(Term::unconstr_data().apply(Term::var("__val")))
.choose_list(Term::unit().delay(), Term::var("param_msg"))
.force()
.delay(),
.delay_empty_choose_list(Term::unit(), Term::var("param_msg")),
Term::var("param_msg"),
)
.force();
);
assert_uplc(
src,
@ -4169,36 +4129,29 @@ fn generic_validator_type_test() {
.delayed_if_then_else(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("param_0"))
.choose_list(Term::unit().delay(), Term::var("param_msg"))
.force(),
.delay_empty_choose_list(Term::unit(), Term::var("param_msg")),
Term::equals_integer()
.apply(Term::integer(1.into()))
.apply(Term::var("subject"))
.if_then_else(
.delay_true_if_then_else(
Term::var("r_fields")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::var("tail_1")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::tail_list()
.apply(Term::var("tail_1"))
.choose_list(
Term::unit()
.lambda("_")
.apply(
.delay_empty_choose_list(
Term::unit().lambda("_").apply(
Term::var("__expect_B")
.apply(Term::var(
"field_B",
))
.apply(Term::var("field_B"))
.apply(Term::var(
"param_msg",
)),
)
.delay(),
),
Term::var("param_msg"),
)
.force()
.lambda("field_B")
.apply(
Term::var("__val")
@ -4212,10 +4165,8 @@ fn generic_validator_type_test() {
.force()
.lambda("__val")
.apply(field_b),
),
)
.delay(),
)
.force()
.lambda("tail_1")
.apply(
Term::tail_list()
@ -4237,19 +4188,15 @@ fn generic_validator_type_test() {
Term::head_list()
.apply(Term::var("r_fields")),
),
),
)
.delay(),
)
.force()
.lambda("r_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("param_0")),
)
.delay(),
),
Term::var("param_msg"),
)
.force(),
),
)
.lambda("subject")
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("param_0")))
@ -4261,17 +4208,16 @@ fn generic_validator_type_test() {
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::var("subject"))
.if_then_else(
.delay_true_if_then_else(
Term::var("B_fields")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::tail_list()
.apply(Term::var("B_fields"))
.choose_list(
Term::unit().delay(),
.delay_empty_choose_list(
Term::unit(),
Term::var("param_msg"),
)
.force()
.lambda("something")
.apply(
Term::var("__val")
@ -4288,19 +4234,15 @@ fn generic_validator_type_test() {
Term::head_list()
.apply(Term::var("B_fields")),
),
),
)
.delay(),
)
.force()
.lambda("B_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("param_0")),
)
.delay(),
),
Term::var("param_msg"),
)
.force()
.lambda("subject")
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("param_0")))
.lambda("param_msg")
@ -4985,23 +4927,19 @@ fn expect_head_no_tail() {
assert_uplc(
src,
Term::var("a")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h]=a"),
Term::tail_list()
.apply(Term::var("a"))
.choose_list(
.delay_empty_choose_list(
Term::equals_integer()
.apply(Term::var("h"))
.apply(Term::var("h"))
.delay(),
.apply(Term::var("h")),
Term::var("expect[h]=a"),
)
.force()
.lambda("h")
.apply(Term::un_i_data().apply(Term::head_list().apply(Term::var("a"))))
.delay(),
.apply(Term::un_i_data().apply(Term::head_list().apply(Term::var("a")))),
)
.force()
.lambda("a")
.apply(Term::list_values(vec![
Constant::Data(Data::integer(1.into())),
@ -5031,17 +4969,17 @@ fn expect_head3_no_tail() {
assert_uplc(
src,
Term::var("a")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h,i,j]=a"),
Term::var("tail_1")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h,i,j]=a"),
Term::var("tail_2")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h,i,j]=a"),
Term::tail_list()
.apply(Term::var("tail_2"))
.choose_list(
.delay_empty_choose_list(
Term::equals_integer()
.apply(Term::var("h"))
.apply(Term::var("h"))
@ -5056,11 +4994,9 @@ fn expect_head3_no_tail() {
.apply(Term::var("j"))
.apply(Term::var("j")),
Term::bool(false),
)
.delay(),
),
Term::var("expect[h,i,j]=a"),
)
.force()
.lambda("j")
.apply(
Term::un_i_data()
@ -5068,24 +5004,19 @@ fn expect_head3_no_tail() {
)
.delay(),
)
.force()
.lambda("tail_2")
.apply(Term::tail_list().apply(Term::var("tail_1")))
.lambda("i")
.apply(
Term::un_i_data()
.apply(Term::head_list().apply(Term::var("tail_1"))),
),
)
.delay(),
)
.force()
.lambda("tail_1")
.apply(Term::tail_list().apply(Term::var("a")))
.lambda("h")
.apply(Term::un_i_data().apply(Term::head_list().apply(Term::var("a"))))
.delay(),
.apply(Term::un_i_data().apply(Term::head_list().apply(Term::var("a")))),
)
.force()
.lambda("a")
.apply(Term::list_values(vec![
Constant::Data(Data::integer(1.into())),
@ -5137,7 +5068,7 @@ fn expect_head3_cast_data_no_tail() {
Constant::Data(Data::integer(2.into())),
Constant::Data(Data::integer(3.into())),
])
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h]:List<Int>=a"),
Term::var("__var")
.choose_data(
@ -5150,17 +5081,14 @@ fn expect_head3_cast_data_no_tail() {
Constant::Data(Data::integer(2.into())),
Constant::Data(Data::integer(3.into())),
]))
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h]:List<Int>=a"),
then.lambda("__var").apply(todo!()).delay(),
then.lambda("__var").apply(todo!()),
)
.force()
.lambda("h")
.apply(Term::un_i_data().apply(Term::var("__var")))
.delay(),
.apply(Term::un_i_data().apply(Term::var("__var"))),
Term::var("expect[h]:List<Int>=a"),
)
.force()
.lambda("__var")
.apply(Term::head_list().apply(Term::list_values(vec![
Constant::Data(Data::integer(1.into())),
@ -5169,7 +5097,6 @@ fn expect_head3_cast_data_no_tail() {
])))
.delay(),
)
.force()
.delay(),
Term::var("expect[h]:List<Int>=a"),
Term::var("expect[h]:List<Int>=a"),
@ -5210,7 +5137,7 @@ fn expect_head_cast_data_no_tail() {
Constant::Data(Data::integer(2.into())),
Constant::Data(Data::integer(3.into())),
])
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h]:List<Int>=a"),
Term::var("__var")
.choose_data(
@ -5223,14 +5150,12 @@ fn expect_head_cast_data_no_tail() {
Constant::Data(Data::integer(2.into())),
Constant::Data(Data::integer(3.into())),
]))
.choose_list(
.delay_empty_choose_list(
Term::equals_integer()
.apply(Term::var("h"))
.apply(Term::var("h"))
.delay(),
.apply(Term::var("h")),
Term::var("expect[h]:List<Int>=a"),
)
.force()
.lambda("h")
.apply(Term::un_i_data().apply(Term::var("__var")))
.delay(),
@ -5242,10 +5167,8 @@ fn expect_head_cast_data_no_tail() {
Constant::Data(Data::integer(1.into())),
Constant::Data(Data::integer(2.into())),
Constant::Data(Data::integer(3.into())),
])))
.delay(),
]))),
)
.force()
.delay(),
Term::var("expect[h]:List<Int>=a"),
Term::var("expect[h]:List<Int>=a"),
@ -5270,6 +5193,7 @@ fn expect_head_cast_data_with_tail() {
h == h && j == j
}
"#;
let expect_on_list = Term::var("expect_on_list")
.apply(Term::var("expect_on_list"))
.apply(Term::var("__list"))
@ -5305,19 +5229,16 @@ fn expect_head_cast_data_with_tail() {
let check_with = Term::var("__list")
.delayed_choose_list(
then,
Term::var("__head")
.choose_data(
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("expect[h,j,..]:List<Int>=a"),
Term::choose_data_integer(
Name::text("__head").into(),
|v| {
Term::var("__curried_expect_on_list")
.apply(Term::tail_list().apply(Term::var("__list")))
.lambda("_")
.apply(Term::un_i_data().apply(Term::var("__head")))
.delay(),
Term::var("expect[h,j,..]:List<Int>=a"),
.apply(v)
},
&Term::var("expect[h,j,..]:List<Int>=a"),
)
.force()
.lambda("__head")
.apply(Term::head_list().apply(Term::var("__list"))),
)
@ -5325,9 +5246,7 @@ fn expect_head_cast_data_with_tail() {
.lambda("__list")
.lambda("__no_inline__");
let on_list = values
.clone()
.choose_list(
let on_list = values.clone().delay_filled_choose_list(
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("__val")
.choose_data(
@ -5335,7 +5254,7 @@ fn expect_head_cast_data_with_tail() {
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("tail_1")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("__val")
.choose_data(
@ -5354,10 +5273,8 @@ fn expect_head_cast_data_with_tail() {
)
.force()
.lambda("__val")
.apply(Term::head_list().apply(Term::var("tail_1")))
.delay(),
.apply(Term::head_list().apply(Term::var("tail_1"))),
)
.force()
.lambda("tail_1")
.apply(Term::tail_list().apply(values.clone()))
.lambda("h")
@ -5367,23 +5284,16 @@ fn expect_head_cast_data_with_tail() {
)
.force()
.lambda("__val")
.apply(Term::head_list().apply(values))
.delay(),
)
.force()
.delay();
.apply(Term::head_list().apply(values)),
);
assert_uplc(
src,
Term::var("__val")
.choose_data(
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("expect[h,j,..]:List<Int>=a"),
on_list,
Term::var("expect[h,j,..]:List<Int>=a"),
Term::var("expect[h,j,..]:List<Int>=a"),
Term::choose_data_list(
Name::text("__val").into(),
|_| on_list,
&Term::var("expect[h,j,..]:List<Int>=a"),
)
.force()
.lambda("__val")
.apply(Term::data(Data::list(vec![
Data::integer(1.into()),
@ -5539,21 +5449,19 @@ fn list_clause_with_assign() {
.delayed_choose_list(
Term::var("self"),
Term::var("tail_2")
.choose_list(
.delay_empty_choose_list(
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(
Term::var(CONSTR_INDEX_EXPOSER)
.apply(Term::var("n")),
)
.if_then_else(
.delay_true_if_then_else(
Term::mk_cons()
.apply(Term::var("n"))
.apply(Term::empty_list())
.delay(),
.apply(Term::empty_list()),
Term::var("clauses_delayed"),
)
.force()
.lambda("x")
.apply(
Term::head_list()
@ -5563,11 +5471,9 @@ fn list_clause_with_assign() {
.apply(
Term::head_list()
.apply(Term::var("self")),
)
.delay(),
),
Term::var("clauses_delayed"),
)
.force()
.lambda("clauses_delayed")
.apply(
Term::var("tail_2")
@ -5662,10 +5568,8 @@ fn opaque_value_in_datum() {
let expect_on_tail = Term::tail_list()
.apply(Term::var("tail_1"))
.choose_list(
Term::unit()
.lambda("_")
.apply(
.delay_empty_choose_list(
Term::unit().lambda("_").apply(
Term::var("expect_on_list").apply(Term::var("a")).apply(
Term::var("expect_on_list")
.apply(Term::var("pair_snd_outer"))
@ -5727,11 +5631,9 @@ fn opaque_value_in_datum() {
)
.lambda("pair_outer"),
),
)
.delay(),
),
Term::var("param_msg"),
)
.force()
.lambda("a")
.apply(
Term::var("__val")
@ -5750,11 +5652,11 @@ fn opaque_value_in_datum() {
assert_uplc(
src,
Term::var("val")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[Pair(_,amount)]=val.inner.inner"),
Term::tail_list()
.apply(Term::var("val"))
.choose_list(
.delay_empty_choose_list(
Term::equals_data()
.apply(Term::map_data().apply(Term::var("final_amount")))
.apply(Term::map_data().apply(Term::var("amount")))
@ -5769,16 +5671,12 @@ fn opaque_value_in_datum() {
.apply(
Term::unmap_data()
.apply(Term::snd_pair().apply(Term::var("tuple_item_0"))),
)
.delay(),
),
Term::var("expect[Pair(_,amount)]=val.inner.inner"),
)
.force()
.lambda("tuple_item_0")
.apply(Term::head_list().apply(Term::var("val")))
.delay(),
.apply(Term::head_list().apply(Term::var("val"))),
)
.force()
.lambda("val")
.apply(
Term::unmap_data().apply(
@ -5804,16 +5702,15 @@ fn opaque_value_in_datum() {
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::var("subject"))
.if_then_else(
.delay_true_if_then_else(
Term::var("dat_fields")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
Term::var("tail_1")
.choose_list(
.delay_filled_choose_list(
Term::var("param_msg"),
expect_on_tail.delay(),
expect_on_tail,
)
.force()
.lambda("tail_1")
.apply(Term::tail_list().apply(Term::var("dat_fields")))
.lambda("c")
@ -5834,19 +5731,15 @@ fn opaque_value_in_datum() {
Term::head_list()
.apply(Term::var("dat_fields")),
),
),
)
.delay(),
)
.force()
.lambda("dat_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("param_0")),
)
.delay(),
),
Term::var("param_msg"),
)
.force()
.lambda("subject")
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("param_0")))
.lambda("param_msg")
@ -5951,11 +5844,11 @@ fn opaque_value_in_test() {
assert_uplc(
src,
Term::var("val")
.choose_list(
.delay_filled_choose_list(
Term::var("expect[Pair(_,amount)]=val.inner.inner"),
Term::tail_list()
.apply(Term::var("val"))
.choose_list(
.delay_empty_choose_list(
Term::equals_data()
.apply(Term::map_data().apply(Term::var("final_amount")))
.apply(Term::map_data().apply(Term::var("amount")))
@ -5970,16 +5863,12 @@ fn opaque_value_in_test() {
.apply(
Term::unmap_data()
.apply(Term::snd_pair().apply(Term::var("tuple_item_0"))),
)
.delay(),
),
Term::var("expect[Pair(_,amount)]=val.inner.inner"),
)
.force()
.lambda("tuple_item_0")
.apply(Term::head_list().apply(Term::var("val")))
.delay(),
.apply(Term::head_list().apply(Term::var("val"))),
)
.force()
.lambda("val")
.apply(Term::unmap_data().apply(Term::head_list().apply(
Term::tail_list().apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
@ -6138,13 +6027,13 @@ fn tuple_2_match() {
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("tuple_index_0")))
.if_then_else(
.delay_true_if_then_else(
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(
Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("tuple_index_1")),
)
.if_then_else(
.delay_true_if_then_else(
Term::equals_integer()
.apply(
Term::subtract_integer()
@ -6182,11 +6071,9 @@ fn tuple_2_match() {
.apply(
Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("tuple_index_1")),
)
.delay(),
),
Term::var("clauses_delayed"),
)
.force()
.lambda("x1")
.apply(
Term::un_i_data()
@ -6208,11 +6095,9 @@ fn tuple_2_match() {
.lambda("tuple_index_0_fields")
.apply(
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("tuple_index_0")),
)
.delay(),
),
Term::var("clauses_delayed"),
)
.force()
.lambda("clauses_delayed")
.apply(
Term::equals_integer()
@ -6220,22 +6105,19 @@ fn tuple_2_match() {
.apply(
Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("tuple_index_0")),
)
.if_then_else(
.delay_true_if_then_else(
Term::equals_integer()
.apply(Term::integer(1.into()))
.apply(
Term::var(CONSTR_INDEX_EXPOSER)
.apply(Term::var("tuple_index_1")),
)
.if_then_else(
Term::bool(true).delay(),
.delay_true_if_then_else(
Term::bool(true),
Term::var("clauses_delayed"),
),
Term::var("clauses_delayed"),
)
.force()
.delay(),
Term::var("clauses_delayed"),
)
.force()
.lambda("clauses_delayed")
.apply(
Term::equals_integer()
@ -6244,22 +6126,19 @@ fn tuple_2_match() {
Term::var(CONSTR_INDEX_EXPOSER)
.apply(Term::var("tuple_index_0")),
)
.if_then_else(
.delay_true_if_then_else(
Term::equals_integer()
.apply(Term::integer(0.into()))
.apply(
Term::var(CONSTR_INDEX_EXPOSER)
.apply(Term::var("tuple_index_1")),
)
.if_then_else(
Term::bool(false).delay(),
.delay_true_if_then_else(
Term::bool(false),
Term::var("clauses_delayed"),
),
Term::var("clauses_delayed"),
)
.force()
.delay(),
Term::var("clauses_delayed"),
)
.force()
.lambda("clauses_delayed")
.apply(Term::bool(false).delay())
.delay(),