Fix major uplc test
This commit is contained in:
parent
33370b8637
commit
7ad5491ea9
|
@ -8,7 +8,7 @@ use uplc::{
|
||||||
ast::{Constant, Data, DeBruijn, Name, Program, Term, Type},
|
ast::{Constant, Data, DeBruijn, Name, Program, Term, Type},
|
||||||
builder::{CONSTR_FIELDS_EXPOSER, CONSTR_INDEX_EXPOSER, EXPECT_ON_LIST},
|
builder::{CONSTR_FIELDS_EXPOSER, CONSTR_INDEX_EXPOSER, EXPECT_ON_LIST},
|
||||||
machine::{cost_model::ExBudget, runtime::Compressable},
|
machine::{cost_model::ExBudget, runtime::Compressable},
|
||||||
optimize,
|
optimize::{self, shrinker::NO_INLINE},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TestType {
|
enum TestType {
|
||||||
|
@ -5219,16 +5219,16 @@ fn expect_head_cast_data_with_tail() {
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
let expect_on_list = Term::var("expect_on_list")
|
let expect_on_list = Term::var(EXPECT_ON_LIST)
|
||||||
.apply(Term::var("expect_on_list"))
|
.apply(Term::var(EXPECT_ON_LIST))
|
||||||
.apply(Term::var("__list"))
|
.apply(Term::var("__list"))
|
||||||
.lambda("expect_on_list")
|
.lambda(EXPECT_ON_LIST)
|
||||||
.apply(
|
.apply(
|
||||||
Term::var("check_with")
|
Term::var("check_with")
|
||||||
.apply(Term::var("__list"))
|
.apply(Term::var("__list"))
|
||||||
.apply(Term::var("expect_on_list").apply(Term::var("expect_on_list")))
|
.apply(Term::var(EXPECT_ON_LIST).apply(Term::var(EXPECT_ON_LIST)))
|
||||||
.lambda("__list")
|
.lambda("__list")
|
||||||
.lambda("expect_on_list")
|
.lambda(EXPECT_ON_LIST)
|
||||||
.lambda("__no_inline__"),
|
.lambda("__no_inline__"),
|
||||||
)
|
)
|
||||||
.lambda("check_with")
|
.lambda("check_with")
|
||||||
|
@ -5286,8 +5286,8 @@ 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("expect[h,j,..]:List<Int>=a"),
|
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::var("expect_on_list")
|
Term::var(EXPECT_ON_LIST)
|
||||||
.lambda("expect_on_list")
|
.lambda(EXPECT_ON_LIST)
|
||||||
.apply(expect_on_list)
|
.apply(expect_on_list)
|
||||||
.apply(Term::tail_list().apply(Term::var("tail_1")))
|
.apply(Term::tail_list().apply(Term::var("tail_1")))
|
||||||
.apply(check_with)
|
.apply(check_with)
|
||||||
|
@ -5591,126 +5591,61 @@ fn opaque_value_in_datum() {
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
let expect_on_tail = Term::tail_list()
|
let expect_on_list = Term::var(EXPECT_ON_LIST)
|
||||||
.apply(Term::var("tail_1"))
|
.apply(Term::var(EXPECT_ON_LIST))
|
||||||
.delay_empty_choose_list(
|
.apply(Term::var("__list"))
|
||||||
Term::unit().lambda("_").apply(
|
.lambda(EXPECT_ON_LIST)
|
||||||
Term::var("expect_on_list").apply(Term::var("a")).apply(
|
|
||||||
Term::var("expect_on_list")
|
|
||||||
.apply(Term::var("pair_snd_outer"))
|
|
||||||
.apply(
|
.apply(
|
||||||
Term::var("__val")
|
Term::var("check_with")
|
||||||
.choose_data(
|
.apply(Term::var("__list"))
|
||||||
Term::var("param_msg"),
|
.apply(Term::var(EXPECT_ON_LIST).apply(Term::var(EXPECT_ON_LIST)))
|
||||||
Term::var("param_msg"),
|
.lambda("__list")
|
||||||
Term::var("param_msg"),
|
.lambda(EXPECT_ON_LIST)
|
||||||
Term::un_i_data().apply(Term::var("__val")).delay(),
|
.lambda("__no_inline__"),
|
||||||
Term::var("param_msg"),
|
|
||||||
)
|
)
|
||||||
.force()
|
.lambda("check_with")
|
||||||
.lambda("__val")
|
.lambda("__list")
|
||||||
.apply(Term::snd_pair().apply(Term::var("pair")))
|
.lambda("__no_inline__");
|
||||||
.lambda("pair_fst")
|
|
||||||
.apply(
|
|
||||||
Term::var("__val")
|
|
||||||
.choose_data(
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::un_b_data().apply(Term::var("__val")).delay(),
|
|
||||||
)
|
|
||||||
.force()
|
|
||||||
.lambda("__val")
|
|
||||||
.apply(Term::fst_pair().apply(Term::var("pair"))),
|
|
||||||
)
|
|
||||||
.lambda("pair"),
|
|
||||||
)
|
|
||||||
.lambda("pair_snd_outer")
|
|
||||||
.apply(
|
|
||||||
Term::var("__val")
|
|
||||||
.choose_data(
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::unmap_data().apply(Term::var("__val")).delay(),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
)
|
|
||||||
.force()
|
|
||||||
.lambda("__val")
|
|
||||||
.apply(Term::snd_pair().apply(Term::var("pair_outer"))),
|
|
||||||
)
|
|
||||||
.lambda("pair_fst_outer")
|
|
||||||
.apply(
|
|
||||||
Term::var("__val")
|
|
||||||
.choose_data(
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::un_b_data().apply(Term::var("__val")).delay(),
|
|
||||||
)
|
|
||||||
.force()
|
|
||||||
.lambda("__val")
|
|
||||||
.apply(Term::fst_pair().apply(Term::var("pair_outer"))),
|
|
||||||
)
|
|
||||||
.lambda("pair_outer"),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
)
|
|
||||||
.lambda("a")
|
|
||||||
.apply(
|
|
||||||
Term::var("__val")
|
|
||||||
.choose_data(
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::unmap_data().apply(Term::var("__val")).delay(),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("param_msg"),
|
|
||||||
)
|
|
||||||
.force()
|
|
||||||
.lambda("__val")
|
|
||||||
.apply(Term::head_list().apply(Term::var("tail_1"))),
|
|
||||||
);
|
|
||||||
|
|
||||||
assert_uplc(
|
let expect_otherwise = &Term::var("expect[Pair(_,amount)]=val.inner.inner");
|
||||||
src,
|
let expect_delay_error: Term<Name> = Term::Error
|
||||||
Term::var("val")
|
.delayed_trace(Term::string("expect [Pair(_, amount)] = val.inner.inner"))
|
||||||
.delay_filled_choose_list(
|
.delay();
|
||||||
Term::var("expect[Pair(_,amount)]=val.inner.inner"),
|
|
||||||
Term::tail_list()
|
let final_comparison = Term::equals_data()
|
||||||
.apply(Term::var("val"))
|
|
||||||
.delay_empty_choose_list(
|
|
||||||
Term::equals_data()
|
|
||||||
.apply(Term::map_data().apply(Term::var("final_amount")))
|
.apply(Term::map_data().apply(Term::var("final_amount")))
|
||||||
.apply(Term::map_data().apply(Term::var("amount")))
|
.apply(Term::map_data().apply(Term::var("amount")));
|
||||||
.lambda("final_amount")
|
|
||||||
.apply(Term::map_values(vec![Constant::ProtoPair(
|
let assignments_body = Term::unmap_data()
|
||||||
|
.apply(Term::head_list().apply(
|
||||||
|
Term::tail_list().apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
|
||||||
|
))
|
||||||
|
.as_var("val", |val| {
|
||||||
|
Term::unwrap_tail_or(
|
||||||
|
val.clone(),
|
||||||
|
|tail| {
|
||||||
|
Term::head_list()
|
||||||
|
.apply(Term::Var(val))
|
||||||
|
.as_var("elem_0", |elem| {
|
||||||
|
tail.delay_empty_choose_list(
|
||||||
|
Term::unmap_data()
|
||||||
|
.apply(Term::snd_pair().apply(Term::Var(elem)))
|
||||||
|
.as_var("amount", |_| {
|
||||||
|
Term::map_values(vec![Constant::ProtoPair(
|
||||||
Type::Data,
|
Type::Data,
|
||||||
Type::Data,
|
Type::Data,
|
||||||
Constant::Data(Data::bytestring(vec![170])).into(),
|
Constant::Data(Data::bytestring(vec![170])).into(),
|
||||||
Constant::Data(Data::integer(4.into())).into(),
|
Constant::Data(Data::integer(4.into())).into(),
|
||||||
)]))
|
)])
|
||||||
.lambda("amount")
|
.as_var("final_amount", |_| final_comparison)
|
||||||
.apply(
|
}),
|
||||||
Term::unmap_data()
|
expect_otherwise.clone(),
|
||||||
.apply(Term::snd_pair().apply(Term::var("tuple_item_0"))),
|
|
||||||
),
|
|
||||||
Term::var("expect[Pair(_,amount)]=val.inner.inner"),
|
|
||||||
)
|
)
|
||||||
.lambda("tuple_item_0")
|
})
|
||||||
.apply(Term::head_list().apply(Term::var("val"))),
|
},
|
||||||
)
|
expect_otherwise,
|
||||||
.lambda("val")
|
|
||||||
.apply(
|
|
||||||
Term::unmap_data().apply(
|
|
||||||
Term::head_list()
|
|
||||||
.apply(Term::tail_list().apply(Term::var("__fields")))
|
|
||||||
.lambda("__fields")
|
|
||||||
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
})
|
||||||
.delayed_if_then_else(
|
.delayed_if_then_else(
|
||||||
Term::unit(),
|
Term::unit(),
|
||||||
Term::Error
|
Term::Error
|
||||||
|
@ -5718,109 +5653,196 @@ fn opaque_value_in_datum() {
|
||||||
.delayed_trace(Term::string("Validator returned false")),
|
.delayed_trace(Term::string("Validator returned false")),
|
||||||
)
|
)
|
||||||
.lambda("ctx")
|
.lambda("ctx")
|
||||||
.lambda("red")
|
.lambda("red");
|
||||||
.lambda("_")
|
|
||||||
|
let otherwise_dat = &Term::var("otherwise_delayed");
|
||||||
|
|
||||||
|
let else_dat = &Term::var("dat:Dat");
|
||||||
|
|
||||||
|
let curried_2 = Term::var("__curried_expect_on_list_2");
|
||||||
|
|
||||||
|
let expect_inner_pair = |pair| {
|
||||||
|
Term::snd_pair()
|
||||||
|
.apply(Term::Var(pair))
|
||||||
|
.as_var("__val", |val| {
|
||||||
|
Term::choose_data_map(
|
||||||
|
val,
|
||||||
|
|map_val| {
|
||||||
|
map_val.as_var("map_span", |map_span| {
|
||||||
|
Term::var(EXPECT_ON_LIST).apply(Term::Var(map_span)).apply(
|
||||||
|
Term::var("__list_2")
|
||||||
|
.delayed_choose_list(
|
||||||
|
Term::var("__curried_expect_on_list_1")
|
||||||
|
.apply(Term::tail_list().apply(Term::var("__list_1"))),
|
||||||
|
Term::head_list().apply(Term::var("__list_2")).as_var(
|
||||||
|
"pair",
|
||||||
|
|pair| {
|
||||||
|
let val =
|
||||||
|
Term::fst_pair().apply(Term::Var(pair.clone()));
|
||||||
|
|
||||||
|
val.as_var("__val", |val| {
|
||||||
|
Term::choose_data_bytearray(
|
||||||
|
val,
|
||||||
|
|v| {
|
||||||
|
let other_val = Term::snd_pair()
|
||||||
|
.apply(Term::Var(pair));
|
||||||
|
|
||||||
|
other_val
|
||||||
|
.as_var("__val", |other| {
|
||||||
|
Term::choose_data_integer(
|
||||||
|
other,
|
||||||
|
|v2| {
|
||||||
|
let arg =
|
||||||
|
Term::tail_list()
|
||||||
.apply(
|
.apply(
|
||||||
Term::var("expect_Dat")
|
Term::var(
|
||||||
.lambda("expect_Dat")
|
"__list_2",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
curried_2
|
||||||
|
.apply(arg)
|
||||||
|
.lambda("snd_pair")
|
||||||
|
.apply(v2)
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.lambda("fst_pair")
|
||||||
|
.apply(v)
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.lambda("__curried_expect_on_list_2")
|
||||||
|
.lambda("__list_2"),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
let expect_dat_value = |tail_id2: Rc<Name>| {
|
||||||
|
Term::unwrap_tail_or(
|
||||||
|
tail_id2.clone(),
|
||||||
|
|next_tail| {
|
||||||
|
Term::head_list()
|
||||||
|
.apply(Term::Var(tail_id2))
|
||||||
|
.as_var("__val", |val| {
|
||||||
|
Term::choose_data_map(
|
||||||
|
val,
|
||||||
|
|a| {
|
||||||
|
a.as_var("a", |a| {
|
||||||
|
next_tail.delay_empty_choose_list(
|
||||||
|
Term::var(EXPECT_ON_LIST)
|
||||||
|
.apply(Term::Var(a.clone()))
|
||||||
.apply(
|
.apply(
|
||||||
|
Term::var("__list_1")
|
||||||
|
.delayed_choose_list(
|
||||||
|
Term::var("then_delayed").force(),
|
||||||
|
Term::head_list()
|
||||||
|
.apply(Term::var("__list_1"))
|
||||||
|
.as_var("pair", |pair| {
|
||||||
|
Term::fst_pair()
|
||||||
|
.apply(Term::Var(pair.clone()))
|
||||||
|
.as_var("fst", |fst| {
|
||||||
|
Term::choose_data_bytearray(
|
||||||
|
fst,
|
||||||
|
|bytearray_fst| {
|
||||||
|
bytearray_fst.as_var(
|
||||||
|
"pair_fst_span",
|
||||||
|
|_| {
|
||||||
|
expect_inner_pair(
|
||||||
|
pair,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.lambda("__curried_expect_on_list_1")
|
||||||
|
.lambda("__list_1"),
|
||||||
|
),
|
||||||
|
otherwise_dat.clone(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
let expect_dat = Term::var(CONSTR_INDEX_EXPOSER)
|
||||||
|
.apply(Term::var("__param_0"))
|
||||||
|
.as_var("subject", |subject| {
|
||||||
Term::equals_integer()
|
Term::equals_integer()
|
||||||
.apply(Term::integer(0.into()))
|
.apply(Term::integer(0.into()))
|
||||||
.apply(Term::var("subject"))
|
.apply(Term::Var(subject))
|
||||||
.delay_true_if_then_else(
|
.delay_true_if_then_else(
|
||||||
Term::var("dat_fields")
|
|
||||||
.delay_filled_choose_list(
|
|
||||||
Term::var("param_msg"),
|
|
||||||
Term::var("tail_1")
|
|
||||||
.delay_filled_choose_list(
|
|
||||||
Term::var("param_msg"),
|
|
||||||
expect_on_tail,
|
|
||||||
)
|
|
||||||
.lambda("tail_1")
|
|
||||||
.apply(Term::tail_list().apply(Term::var("dat_fields")))
|
|
||||||
.lambda("c")
|
|
||||||
.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"),
|
|
||||||
)
|
|
||||||
.force()
|
|
||||||
.lambda("__val")
|
|
||||||
.apply(
|
|
||||||
Term::head_list()
|
|
||||||
.apply(Term::var("dat_fields")),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.lambda("dat_fields")
|
|
||||||
.apply(
|
|
||||||
Term::var(CONSTR_FIELDS_EXPOSER)
|
Term::var(CONSTR_FIELDS_EXPOSER)
|
||||||
.apply(Term::var("param_0")),
|
.apply(Term::var("__param_0"))
|
||||||
),
|
.as_var("tail_id_5", |tail_id| {
|
||||||
Term::var("param_msg"),
|
Term::unwrap_tail_or(
|
||||||
|
tail_id.clone(),
|
||||||
|
|next_tail| {
|
||||||
|
Term::head_list().apply(Term::Var(tail_id)).as_var(
|
||||||
|
"__val",
|
||||||
|
|val| {
|
||||||
|
Term::choose_data_integer(
|
||||||
|
val,
|
||||||
|
|c| {
|
||||||
|
c.as_var("c", |_| {
|
||||||
|
next_tail.as_var("tail_id_6", |tail_id2| {
|
||||||
|
expect_dat_value(tail_id2)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
otherwise_dat,
|
||||||
)
|
)
|
||||||
.lambda("subject")
|
},
|
||||||
.apply(Term::var(CONSTR_INDEX_EXPOSER).apply(Term::var("param_0")))
|
|
||||||
.lambda("param_msg")
|
|
||||||
.lambda("param_0"),
|
|
||||||
)
|
)
|
||||||
.lambda("expect_on_list")
|
},
|
||||||
.apply(
|
otherwise_dat,
|
||||||
Term::var("expect_on_list")
|
|
||||||
.apply(Term::var("expect_on_list"))
|
|
||||||
.apply(Term::var("list_to_check"))
|
|
||||||
.lambda("expect_on_list")
|
|
||||||
.apply(
|
|
||||||
Term::var("list_to_check")
|
|
||||||
.delayed_choose_list(
|
|
||||||
Term::unit(),
|
|
||||||
Term::var("expect_on_list")
|
|
||||||
.apply(Term::var("expect_on_list"))
|
|
||||||
.apply(
|
|
||||||
Term::tail_list().apply(Term::var("list_to_check")),
|
|
||||||
)
|
)
|
||||||
.lambda("_")
|
}),
|
||||||
.apply(Term::var("check_with").apply(
|
otherwise_dat.clone(),
|
||||||
Term::head_list().apply(Term::var("list_to_check")),
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
.lambda("list_to_check")
|
|
||||||
.lambda("expect_on_list"),
|
|
||||||
)
|
|
||||||
.lambda("check_with")
|
|
||||||
.lambda("list_to_check"),
|
|
||||||
)
|
)
|
||||||
|
})
|
||||||
|
.lambda("otherwise_delayed")
|
||||||
|
.lambda("then_delayed")
|
||||||
|
.lambda("__param_0")
|
||||||
|
.lambda(NO_INLINE);
|
||||||
|
|
||||||
|
assert_uplc(
|
||||||
|
src,
|
||||||
|
Term::choose_data_constr(
|
||||||
|
Name::text("dat").into(),
|
||||||
|
|_| {
|
||||||
|
expect_on_list
|
||||||
|
.as_var(EXPECT_ON_LIST, |_| {
|
||||||
|
expect_dat.as_var("__expect_Dat_", |expect| Term::Var(expect))
|
||||||
|
})
|
||||||
.apply(Term::var("dat"))
|
.apply(Term::var("dat"))
|
||||||
.apply(Term::var("dat:Dat")),
|
.apply(assignments_body.delay())
|
||||||
)
|
.apply(else_dat.clone())
|
||||||
.lambda("dat")
|
},
|
||||||
.apply(
|
else_dat,
|
||||||
Term::var("__val")
|
|
||||||
.choose_data(
|
|
||||||
Term::var("__val").delay(),
|
|
||||||
Term::var("dat:Dat"),
|
|
||||||
Term::var("dat:Dat"),
|
|
||||||
Term::var("dat:Dat"),
|
|
||||||
Term::var("dat:Dat"),
|
|
||||||
)
|
|
||||||
.force()
|
|
||||||
.lambda("__val")
|
|
||||||
.apply(Term::var("dat")),
|
|
||||||
)
|
)
|
||||||
.lambda("dat")
|
.lambda("dat")
|
||||||
.constr_fields_exposer()
|
.constr_fields_exposer()
|
||||||
.lambda("expect[Pair(_,amount)]=val.inner.inner")
|
.lambda("expect[Pair(_,amount)]=val.inner.inner")
|
||||||
.apply(
|
.apply(expect_delay_error)
|
||||||
Term::Error
|
|
||||||
.delayed_trace(Term::string("expect [Pair(_, amount)] = val.inner.inner"))
|
|
||||||
.delay(),
|
|
||||||
)
|
|
||||||
.lambda("dat:Dat")
|
.lambda("dat:Dat")
|
||||||
.apply(Term::Error.delayed_trace(Term::string("dat: Dat")).delay())
|
.apply(Term::Error.delayed_trace(Term::string("dat: Dat")).delay())
|
||||||
.constr_index_exposer(),
|
.constr_index_exposer(),
|
||||||
|
|
Loading…
Reference in New Issue