Fix missing delay in list_access_to_uplc. Also fix one of the unit tests.

This commit is contained in:
microproofs 2024-06-13 19:55:36 -04:00 committed by Lucas
parent 41b941e0e3
commit cc9df04093
2 changed files with 57 additions and 52 deletions

View File

@ -1517,7 +1517,8 @@ pub fn list_access_to_uplc(
.choose_list(acc.delay(), otherwise_delayed.clone()) .choose_list(acc.delay(), otherwise_delayed.clone())
.force() .force()
.lambda(name) .lambda(name)
.apply(head_item), .apply(head_item)
.delay(),
) )
.force() .force()
.lambda(tail_name) .lambda(tail_name)

View File

@ -5065,17 +5065,17 @@ fn expect_head3_cast_data_no_tail() {
assert_uplc( assert_uplc(
src, src,
Term::var("tail_0") Term::var("tail_0")
.delayed_choose_list( .choose_list(
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::var("tail_1") Term::var("tail_1")
.delayed_choose_list( .choose_list(
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::var("tail_2") Term::var("tail_2")
.delayed_choose_list( .choose_list(
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::tail_list() Term::tail_list()
.apply(Term::var("tail_2")) .apply(Term::var("tail_2"))
.delayed_choose_list( .choose_list(
Term::equals_integer() Term::equals_integer()
.apply(Term::var("h")) .apply(Term::var("h"))
.apply(Term::var("h")) .apply(Term::var("h"))
@ -5090,68 +5090,66 @@ fn expect_head3_cast_data_no_tail() {
.apply(Term::var("j")) .apply(Term::var("j"))
.apply(Term::var("j")), .apply(Term::var("j")),
Term::bool(false), Term::bool(false),
), )
Term::Error .delay(),
.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
) )
.force()
.lambda("j") .lambda("j")
.apply( .apply(
Term::var("__var") Term::var("__var")
.delayed_choose_data( .choose_data(
Term::Error.delayed_trace(Term::var( Term::var("expect[h,i,j]:List<Int>=a"),
"expect[h,i,j]:List<Int>=a", Term::var("expect[h,i,j]:List<Int>=a"),
)), Term::var("expect[h,i,j]:List<Int>=a"),
Term::Error.delayed_trace(Term::var( Term::un_i_data().apply(Term::var("__var")).delay(),
"expect[h,i,j]:List<Int>=a", Term::var("expect[h,i,j]:List<Int>=a"),
)),
Term::Error.delayed_trace(Term::var(
"expect[h,i,j]:List<Int>=a",
)),
Term::un_i_data().apply(Term::var("__var")),
Term::Error.delayed_trace(Term::var(
"expect[h,i,j]:List<Int>=a",
)),
) )
.force()
.lambda("__var") .lambda("__var")
.apply(Term::head_list().apply(Term::var("tail_2"))), .apply(Term::head_list().apply(Term::var("tail_2"))),
), )
.delay(),
) )
.force()
.lambda("tail_2") .lambda("tail_2")
.apply(Term::tail_list().apply(Term::var("tail_1"))) .apply(Term::tail_list().apply(Term::var("tail_1")))
.lambda("i") .lambda("i")
.apply( .apply(
Term::var("__var") Term::var("__var")
.delayed_choose_data( .choose_data(
Term::Error Term::var("expect[h,i,j]:List<Int>=a"),
.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::Error Term::var("expect[h,i,j]:List<Int>=a"),
.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::un_i_data().apply(Term::var("__var")).delay(),
Term::Error Term::var("expect[h,i,j]:List<Int>=a"),
.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")),
Term::un_i_data().apply(Term::var("__var")),
Term::Error
.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")),
) )
.force()
.lambda("__var") .lambda("__var")
.apply(Term::head_list().apply(Term::var("tail_1"))), .apply(Term::head_list().apply(Term::var("tail_1"))),
), )
.delay(),
) )
.force()
.lambda("tail_1") .lambda("tail_1")
.apply(Term::tail_list().apply(Term::var("tail_0"))) .apply(Term::tail_list().apply(Term::var("tail_0")))
.lambda("h") .lambda("h")
.apply( .apply(
Term::var("__var") Term::var("__var")
.delayed_choose_data( .choose_data(
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::un_i_data().apply(Term::var("__var")), Term::un_i_data().apply(Term::var("__var")).delay(),
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
) )
.force()
.lambda("__var") .lambda("__var")
.apply(Term::head_list().apply(Term::var("tail_0"))), .apply(Term::head_list().apply(Term::var("tail_0"))),
), )
.delay(),
) )
.force()
.lambda("tail_0") .lambda("tail_0")
.apply( .apply(
Term::data(Data::list(vec![ Term::data(Data::list(vec![
@ -5159,20 +5157,26 @@ fn expect_head3_cast_data_no_tail() {
Data::integer(2.into()), Data::integer(2.into()),
Data::integer(3.into()), Data::integer(3.into()),
])) ]))
.delayed_choose_data( .choose_data(
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
Term::list_values(vec![ Term::list_values(vec![
Constant::Data(Data::integer(1.into())), Constant::Data(Data::integer(1.into())),
Constant::Data(Data::integer(2.into())), Constant::Data(Data::integer(2.into())),
Constant::Data(Data::integer(3.into())), Constant::Data(Data::integer(3.into())),
]), ])
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), .delay(),
Term::Error.delayed_trace(Term::var("expect[h,i,j]:List<Int>=a")), Term::var("expect[h,i,j]:List<Int>=a"),
), Term::var("expect[h,i,j]:List<Int>=a"),
)
.force(),
) )
.lambda("expect[h,i,j]:List<Int>=a") .lambda("expect[h,i,j]:List<Int>=a")
.apply(Term::string("expect [h, i, j]: List<Int> = a")), .apply(
Term::Error
.delayed_trace(Term::string("expect [h, i, j]: List<Int> = a"))
.delay(),
),
false, false,
); );
} }