Generic test now passes
This commit is contained in:
parent
6a438bc8cd
commit
140cb02be0
|
@ -3981,87 +3981,114 @@ fn generic_validator_type_test() {
|
||||||
Term::fst_pair()
|
Term::fst_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(target.clone()))),
|
.apply(Term::unconstr_data().apply(Term::Var(target.clone()))),
|
||||||
)
|
)
|
||||||
.delayed_if_then_else(
|
.delay_true_if_then_else(
|
||||||
Term::snd_pair()
|
Term::snd_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(target)))
|
.apply(Term::unconstr_data().apply(Term::Var(target)))
|
||||||
.delayed_choose_list(then, Term::Error),
|
.delay_empty_choose_list(then, Term::var("r:A<B>")),
|
||||||
Term::Error,
|
Term::var("r:A<B>"),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
&Term::Error.delay(),
|
&Term::var("r:A<B>"),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let expect_void_no_trace = |target: Rc<Name>, then: Term<Name>| {
|
let expect_void_no_trace = |target: Term<Name>| {
|
||||||
Term::equals_integer()
|
Term::equals_integer()
|
||||||
.apply(Term::integer(0.into()))
|
.apply(Term::integer(0.into()))
|
||||||
.apply(Term::fst_pair().apply(Term::unconstr_data().apply(Term::Var(target.clone()))))
|
.apply(Term::fst_pair().apply(Term::unconstr_data().apply(target.clone())))
|
||||||
.delayed_if_then_else(
|
.delayed_if_then_else(
|
||||||
Term::snd_pair()
|
Term::snd_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(target)))
|
.apply(Term::unconstr_data().apply(target))
|
||||||
.delayed_choose_list(then, Term::Error),
|
.delayed_choose_list(Term::unit(), Term::Error),
|
||||||
Term::Error,
|
Term::Error,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let expect_no_a = |redeemer: Rc<Name>, then_delayed: Rc<Name>| {
|
let expect_no_a = |redeemer: Rc<Name>, then_delayed: Rc<Name>, trace: bool| {
|
||||||
Term::snd_pair()
|
Term::snd_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(redeemer)))
|
.apply(Term::unconstr_data().apply(Term::Var(redeemer)))
|
||||||
.delayed_choose_list(Term::Var(then_delayed.clone()).force(), Term::Error)
|
.delay_empty_choose_list(
|
||||||
|
Term::Var(then_delayed.clone()).force(),
|
||||||
|
if trace {
|
||||||
|
Term::var("r:A<B>")
|
||||||
|
} else {
|
||||||
|
Term::Error.delay()
|
||||||
|
},
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let expect_b = |target: Rc<Name>, then: Term<Name>, trace: bool| {
|
let expect_b = |target: Rc<Name>, then: Term<Name>, trace: bool| {
|
||||||
|
let error_trace = if trace {
|
||||||
|
Term::var("r:A<B>")
|
||||||
|
} else {
|
||||||
|
Term::Error.delay()
|
||||||
|
};
|
||||||
|
|
||||||
Term::equals_integer()
|
Term::equals_integer()
|
||||||
.apply(Term::integer(0.into()))
|
.apply(Term::integer(0.into()))
|
||||||
.apply(Term::fst_pair().apply(Term::unconstr_data().apply(Term::Var(target.clone()))))
|
.apply(Term::fst_pair().apply(Term::unconstr_data().apply(Term::Var(target.clone()))))
|
||||||
.delayed_if_then_else(
|
.delay_true_if_then_else(
|
||||||
Term::snd_pair()
|
Term::snd_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(target)))
|
.apply(Term::unconstr_data().apply(Term::Var(target)))
|
||||||
.as_var("tail_id_8", |tail_id_8| {
|
.as_var("tail_id_8", |tail_id_8| {
|
||||||
Term::Var(tail_id_8.clone()).delayed_choose_list(
|
if trace {
|
||||||
Term::Error,
|
Term::Var(tail_id_8.clone()).delay_filled_choose_list(
|
||||||
|
error_trace.clone(),
|
||||||
Term::head_list()
|
Term::head_list()
|
||||||
.apply(Term::Var(tail_id_8.clone()))
|
.apply(Term::Var(tail_id_8.clone()))
|
||||||
.as_var("__val", |val| {
|
.as_var("__val", |val| {
|
||||||
if trace {
|
|
||||||
expect_void(
|
expect_void(
|
||||||
val,
|
val,
|
||||||
Term::tail_list()
|
Term::tail_list()
|
||||||
.apply(Term::Var(tail_id_8))
|
.apply(Term::Var(tail_id_8))
|
||||||
.delayed_choose_list(then.force(), Term::Error),
|
.delay_empty_choose_list(
|
||||||
|
then.force(),
|
||||||
|
error_trace.clone(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
expect_void_no_trace(
|
Term::head_list()
|
||||||
val,
|
.apply(Term::Var(tail_id_8.clone()))
|
||||||
|
.as_var("__val", |val| expect_void_no_trace(Term::Var(val)))
|
||||||
|
.as_var("something", |_| {
|
||||||
Term::tail_list()
|
Term::tail_list()
|
||||||
.apply(Term::Var(tail_id_8))
|
.apply(Term::Var(tail_id_8))
|
||||||
.delayed_choose_list(then.force(), Term::Error),
|
.delayed_choose_list(then.force(), Term::Error)
|
||||||
)
|
})
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
)
|
error_trace,
|
||||||
}),
|
|
||||||
Term::Error,
|
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let expect_some_a = |redeemer: Rc<Name>, then_delayed: Rc<Name>, trace: bool| {
|
let expect_some_a = |redeemer: Rc<Name>, then_delayed: Rc<Name>, trace: bool| {
|
||||||
|
let trace_error = if trace {
|
||||||
|
Term::var("r:A<B>")
|
||||||
|
} else {
|
||||||
|
Term::Error.delay()
|
||||||
|
};
|
||||||
|
|
||||||
Term::snd_pair()
|
Term::snd_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(redeemer)))
|
.apply(Term::unconstr_data().apply(Term::Var(redeemer)))
|
||||||
.as_var("tail_id_5", |tail_id_5| {
|
.as_var("tail_id_5", |tail_id_5| {
|
||||||
Term::Var(tail_id_5.clone()).delayed_choose_list(
|
let inner = if trace {
|
||||||
Term::Error,
|
Term::head_list().apply(Term::Var(tail_id_5.clone()))
|
||||||
|
} else {
|
||||||
Term::head_list()
|
Term::head_list()
|
||||||
.apply(Term::Var(tail_id_5.clone()))
|
.apply(Term::Var(tail_id_5.clone()))
|
||||||
|
.as_var("val", |val| expect_void_no_trace(Term::Var(val)))
|
||||||
|
}
|
||||||
.as_var("__val", |val| {
|
.as_var("__val", |val| {
|
||||||
if trace {
|
if trace {
|
||||||
expect_void(
|
expect_void(
|
||||||
val,
|
val,
|
||||||
Term::tail_list().apply(Term::Var(tail_id_5)).as_var(
|
Term::tail_list()
|
||||||
"tail_id_6",
|
.apply(Term::Var(tail_id_5.clone()))
|
||||||
|tail_id_6| {
|
.as_var("tail_id_6", |tail_id_6| {
|
||||||
Term::Var(tail_id_6.clone()).delayed_choose_list(
|
Term::Var(tail_id_6.clone()).delay_filled_choose_list(
|
||||||
Term::Error,
|
trace_error.clone(),
|
||||||
Term::head_list()
|
Term::head_list()
|
||||||
.apply(Term::Var(tail_id_6.clone()))
|
.apply(Term::Var(tail_id_6.clone()))
|
||||||
.as_var("__val", |val| {
|
.as_var("__val", |val| {
|
||||||
|
@ -4070,55 +4097,50 @@ fn generic_validator_type_test() {
|
||||||
|_| {
|
|_| {
|
||||||
Term::tail_list()
|
Term::tail_list()
|
||||||
.apply(Term::Var(tail_id_6))
|
.apply(Term::Var(tail_id_6))
|
||||||
.delayed_choose_list(
|
.delay_empty_choose_list(
|
||||||
expect_b(
|
expect_b(
|
||||||
val,
|
val,
|
||||||
Term::Var(then_delayed),
|
Term::Var(then_delayed),
|
||||||
trace,
|
trace,
|
||||||
),
|
),
|
||||||
Term::Error,
|
trace_error.clone(),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
&Term::Error.delay(),
|
&trace_error,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
},
|
}),
|
||||||
),
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
expect_void_no_trace(
|
Term::tail_list()
|
||||||
val,
|
.apply(Term::Var(tail_id_5.clone()))
|
||||||
Term::tail_list().apply(Term::Var(tail_id_5)).as_var(
|
.as_var("tail_id_6", |tail_id_6| {
|
||||||
"tail_id_6",
|
|
||||||
|tail_id_6| {
|
|
||||||
Term::Var(tail_id_6.clone()).delayed_choose_list(
|
|
||||||
Term::Error,
|
|
||||||
Term::head_list()
|
Term::head_list()
|
||||||
.apply(Term::Var(tail_id_6.clone()))
|
.apply(Term::Var(tail_id_6.clone()))
|
||||||
.as_var("__val", |val| {
|
.as_var("__val", |val| {
|
||||||
Term::tail_list()
|
Term::tail_list()
|
||||||
.apply(Term::Var(tail_id_6))
|
.apply(Term::Var(tail_id_6))
|
||||||
.delayed_choose_list(
|
.delayed_choose_list(
|
||||||
expect_b(
|
expect_b(val, Term::Var(then_delayed), trace),
|
||||||
val,
|
|
||||||
Term::Var(then_delayed),
|
|
||||||
trace,
|
|
||||||
),
|
|
||||||
Term::Error,
|
Term::Error,
|
||||||
)
|
)
|
||||||
}),
|
})
|
||||||
)
|
})
|
||||||
},
|
}
|
||||||
),
|
});
|
||||||
)
|
|
||||||
|
if trace {
|
||||||
|
Term::Var(tail_id_5.clone())
|
||||||
|
.delay_filled_choose_list(trace_error.clone(), inner)
|
||||||
|
} else {
|
||||||
|
inner
|
||||||
}
|
}
|
||||||
}),
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
let when_constr_arity_2 = |redeemer: Rc<Name>, then_1st: Term<Name>, then_2nd: Term<Name>| {
|
let when_constr_arity_2 =
|
||||||
|
|redeemer: Rc<Name>, then_1st: Term<Name>, then_2nd: Term<Name>, trace: bool| {
|
||||||
Term::fst_pair()
|
Term::fst_pair()
|
||||||
.apply(Term::unconstr_data().apply(Term::Var(redeemer.clone())))
|
.apply(Term::unconstr_data().apply(Term::Var(redeemer.clone())))
|
||||||
.as_var("__subject_span_0_0", |subject_span_0_0| {
|
.as_var("__subject_span_0_0", |subject_span_0_0| {
|
||||||
|
@ -4130,7 +4152,14 @@ fn generic_validator_type_test() {
|
||||||
|
|
||||||
when_constructor(0).delayed_if_then_else(
|
when_constructor(0).delayed_if_then_else(
|
||||||
then_1st,
|
then_1st,
|
||||||
when_constructor(1).delayed_if_then_else(then_2nd, Term::Error),
|
when_constructor(1).delay_true_if_then_else(
|
||||||
|
then_2nd,
|
||||||
|
if trace {
|
||||||
|
Term::var("r:A<B>")
|
||||||
|
} else {
|
||||||
|
Term::Error.delay()
|
||||||
|
},
|
||||||
|
),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
@ -4149,7 +4178,7 @@ fn generic_validator_type_test() {
|
||||||
Term::head_list()
|
Term::head_list()
|
||||||
.apply(Term::tail_list().apply(Term::Var(tail_id_10.clone())))
|
.apply(Term::tail_list().apply(Term::Var(tail_id_10.clone())))
|
||||||
.as_var("__datum__", |_datum| {
|
.as_var("__datum__", |_datum| {
|
||||||
body(redeemer.clone()).delay().as_var(
|
let body_part = body(redeemer.clone()).delay().as_var(
|
||||||
"then_delayed",
|
"then_delayed",
|
||||||
|then_delayed| {
|
|then_delayed| {
|
||||||
when_constr_arity_2(
|
when_constr_arity_2(
|
||||||
|
@ -4157,15 +4186,27 @@ fn generic_validator_type_test() {
|
||||||
expect_no_a(
|
expect_no_a(
|
||||||
redeemer.clone(),
|
redeemer.clone(),
|
||||||
then_delayed.clone(),
|
then_delayed.clone(),
|
||||||
|
trace,
|
||||||
),
|
),
|
||||||
expect_some_a(
|
expect_some_a(
|
||||||
redeemer.clone(),
|
redeemer.clone(),
|
||||||
then_delayed.clone(),
|
then_delayed.clone(),
|
||||||
trace,
|
trace,
|
||||||
),
|
),
|
||||||
|
trace,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if trace {
|
||||||
|
Term::choose_data_constr(
|
||||||
|
redeemer.clone(),
|
||||||
|
|_| body_part,
|
||||||
|
&Term::var("r:A<B>"),
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
body_part
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
|
@ -4199,14 +4240,25 @@ fn generic_validator_type_test() {
|
||||||
})
|
})
|
||||||
.delayed_if_then_else(
|
.delayed_if_then_else(
|
||||||
Term::unit(),
|
Term::unit(),
|
||||||
|
if trace {
|
||||||
Term::Error
|
Term::Error
|
||||||
.apply(Term::Error.force())
|
.apply(Term::Error.force())
|
||||||
.delayed_trace(Term::string("Validator returned false")),
|
.delayed_trace(Term::string("Validator returned false"))
|
||||||
|
} else {
|
||||||
|
Term::Error.apply(Term::Error.force())
|
||||||
|
},
|
||||||
)
|
)
|
||||||
.lambda(context)
|
.lambda(context)
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_uplc(src, validator(true), false, true);
|
assert_uplc(
|
||||||
|
src,
|
||||||
|
validator(true)
|
||||||
|
.lambda("r:A<B>")
|
||||||
|
.apply(Term::Error.delayed_trace(Term::string("r: A<B>")).delay()),
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
assert_uplc(src, validator(false), false, false);
|
assert_uplc(src, validator(false), false, false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue