Fix more tests and issues
This commit is contained in:
parent
7655a6ecbe
commit
6e94d502a7
|
@ -2485,7 +2485,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
|
||||
AirTree::clause(
|
||||
test_subject_name.clone(),
|
||||
case.get_air_pattern(),
|
||||
case.get_air_pattern(current_tipo.clone()),
|
||||
current_tipo.clone(),
|
||||
case_air,
|
||||
AirTree::anon_func(vec![], acc, true),
|
||||
|
|
|
@ -53,18 +53,6 @@ impl ToString for Path {
|
|||
}
|
||||
}
|
||||
|
||||
// impl Display for Path {
|
||||
// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
// match self {
|
||||
// Path::Pair(i) => write!(f, "Pair({})", i),
|
||||
// Path::Tuple(i) => write!(f, "Tuple({})", i),
|
||||
// Path::Constr(_, i) => write!(f, "Constr({})", i),
|
||||
// Path::List(i) => write!(f, "List({})", i),
|
||||
// Path::ListTail(i) => write!(f, "ListTail({})", i),
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
impl PartialEq for Path {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
match (self, other) {
|
||||
|
@ -115,9 +103,15 @@ pub enum CaseTest {
|
|||
}
|
||||
|
||||
impl CaseTest {
|
||||
pub fn get_air_pattern(&self) -> AirTree {
|
||||
pub fn get_air_pattern(&self, current_type: Rc<Type>) -> AirTree {
|
||||
match self {
|
||||
CaseTest::Constr(i) => AirTree::int(i),
|
||||
CaseTest::Constr(i) => {
|
||||
if current_type.is_bool() {
|
||||
AirTree::bool(1 == *i)
|
||||
} else {
|
||||
AirTree::int(i)
|
||||
}
|
||||
}
|
||||
CaseTest::Int(i) => AirTree::int(i),
|
||||
CaseTest::Bytes(vec) => AirTree::byte_array(vec.clone()),
|
||||
CaseTest::List(_) => unreachable!(),
|
||||
|
@ -839,13 +833,14 @@ impl<'a, 'b> TreeGen<'a, 'b> {
|
|||
// Add inner patterns to existing row
|
||||
let mut new_cols = remaining_patts.into_iter().flat_map(|x| x.1).collect_vec();
|
||||
|
||||
let added_columns = new_cols.len();
|
||||
|
||||
// Pop off tail so that it aligns more easily with other list patterns
|
||||
if matches!(case, CaseTest::ListWithTail(_)) {
|
||||
new_cols.pop();
|
||||
}
|
||||
|
||||
let added_columns = new_cols.len();
|
||||
|
||||
// Pop off tail so that it aligns more easily with other list patterns
|
||||
|
||||
new_cols.extend(row.columns);
|
||||
|
||||
row.columns = new_cols;
|
||||
|
|
|
@ -23,10 +23,11 @@ pub enum Builtin {
|
|||
impl PartialEq for Builtin {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
match (self, other) {
|
||||
(Builtin::HeadList(_), Builtin::HeadList(_)) => true,
|
||||
(Builtin::TailList, Builtin::TailList) => true,
|
||||
(Builtin::UnConstrFields, Builtin::UnConstrFields) => true,
|
||||
(Builtin::SndPair(_), Builtin::SndPair(_)) => true,
|
||||
(Builtin::HeadList(_), Builtin::HeadList(_))
|
||||
| (Builtin::TailList, Builtin::TailList)
|
||||
| (Builtin::UnConstrFields, Builtin::UnConstrFields)
|
||||
| (Builtin::FstPair(_), Builtin::FstPair(_))
|
||||
| (Builtin::SndPair(_), Builtin::SndPair(_)) => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
@ -112,7 +113,7 @@ impl Builtins {
|
|||
match i {
|
||||
Path::Pair(i) => {
|
||||
if i == 0 {
|
||||
builtins.push(Builtin::HeadList(get_tipo_by_path(
|
||||
builtins.push(Builtin::FstPair(get_tipo_by_path(
|
||||
subject_tipo.clone(),
|
||||
&rebuilt_path,
|
||||
)));
|
||||
|
|
|
@ -1484,11 +1484,11 @@ fn acceptance_test_12_filter_even() {
|
|||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
))
|
||||
.apply(Term::tail_list().apply(Term::var("xs"))),
|
||||
)
|
||||
.lambda("xs")
|
||||
.lambda("filter"),
|
||||
|
@ -2154,53 +2154,41 @@ fn acceptance_test_23_to_list() {
|
|||
Term::head_list()
|
||||
.apply(Term::var("elems"))
|
||||
.as_var("elem_0", |elem_0| {
|
||||
Term::tail_list()
|
||||
.apply(Term::var("elems"))
|
||||
.as_var("rest", |rest| {
|
||||
Term::equals_bytestring()
|
||||
.apply(Term::var("k"))
|
||||
.apply(Term::var("k2"))
|
||||
.delayed_if_then_else(
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::mk_pair_data()
|
||||
.apply(Term::b_data().apply(Term::var("k")))
|
||||
.apply(Term::i_data().apply(Term::var("v"))),
|
||||
)
|
||||
.apply(Term::var("rest")),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::mk_pair_data()
|
||||
.apply(Term::b_data().apply(Term::var("k2")))
|
||||
.apply(Term::i_data().apply(Term::var("v2"))),
|
||||
)
|
||||
.apply(
|
||||
Term::var("do_insert")
|
||||
.apply(Term::var("do_insert"))
|
||||
.apply(Term::var("rest")),
|
||||
),
|
||||
)
|
||||
.lambda("rest")
|
||||
.lambda("v2")
|
||||
.lambda("k2")
|
||||
.apply(
|
||||
Term::un_b_data()
|
||||
.apply(Term::fst_pair().apply(Term::Var(elem_0.clone())))
|
||||
.as_var("k2", |k2| {
|
||||
Term::un_i_data()
|
||||
.apply(Term::snd_pair().apply(Term::Var(elem_0.clone())))
|
||||
.as_var("v2", |v2| {
|
||||
Term::equals_bytestring()
|
||||
.apply(Term::var("k"))
|
||||
.apply(Term::Var(k2.clone()))
|
||||
.delayed_if_then_else(
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::mk_pair_data()
|
||||
.apply(
|
||||
Term::b_data()
|
||||
.apply(Term::var("k")),
|
||||
)
|
||||
.apply(
|
||||
Term::i_data()
|
||||
.apply(Term::var("v")),
|
||||
),
|
||||
)
|
||||
.apply(Term::Var(rest.clone())),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::mk_pair_data()
|
||||
.apply(
|
||||
Term::b_data()
|
||||
.apply(Term::Var(k2)),
|
||||
)
|
||||
.apply(
|
||||
Term::i_data()
|
||||
.apply(Term::Var(v2)),
|
||||
),
|
||||
)
|
||||
.apply(
|
||||
Term::var("do_insert")
|
||||
.apply(Term::var("do_insert"))
|
||||
.apply(Term::Var(rest)),
|
||||
),
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
.apply(Term::fst_pair().apply(Term::Var(elem_0.clone()))),
|
||||
)
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::snd_pair().apply(Term::Var(elem_0.clone()))),
|
||||
)
|
||||
.apply(Term::tail_list().apply(Term::var("elems")))
|
||||
}),
|
||||
)
|
||||
.lambda("elems")
|
||||
|
@ -2852,9 +2840,9 @@ fn acceptance_test_28_unique_empty_list() {
|
|||
),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
.apply(Term::head_list().apply(Term::var("xs")))
|
||||
.apply(Term::tail_list().apply(Term::var("xs"))),
|
||||
)
|
||||
.lambda("xs")
|
||||
.lambda("unique"),
|
||||
|
@ -2882,9 +2870,9 @@ fn acceptance_test_28_unique_empty_list() {
|
|||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
.apply(Term::head_list().apply(Term::var("xs")))
|
||||
.apply(Term::tail_list().apply(Term::var("xs"))),
|
||||
)
|
||||
.lambda("xs")
|
||||
.lambda("filter"),
|
||||
|
@ -2960,12 +2948,12 @@ fn acceptance_test_28_unique_list() {
|
|||
),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(Term::var("xs"))),
|
||||
),
|
||||
)
|
||||
.apply(Term::tail_list().apply(Term::var("xs"))),
|
||||
)
|
||||
.lambda("xs")
|
||||
.lambda("unique"),
|
||||
|
@ -2995,11 +2983,11 @@ fn acceptance_test_28_unique_list() {
|
|||
.apply(Term::var("rest")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("xs")))
|
||||
.lambda("x")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(Term::var("xs")),
|
||||
)),
|
||||
))
|
||||
.apply(Term::tail_list().apply(Term::var("xs"))),
|
||||
)
|
||||
.lambda("xs")
|
||||
.lambda("filter"),
|
||||
|
@ -3363,19 +3351,19 @@ fn acceptance_test_29_union_tuple() {
|
|||
.apply(Term::var("k"))
|
||||
.apply(Term::var("v")),
|
||||
)
|
||||
.lambda("rest")
|
||||
.lambda("v")
|
||||
.lambda("k")
|
||||
.apply(
|
||||
Term::un_b_data()
|
||||
.apply(Term::head_list().apply(Term::var("tuple"))),
|
||||
)
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::head_list().apply(
|
||||
Term::tail_list().apply(Term::var("tuple")),
|
||||
)),
|
||||
)
|
||||
.lambda("k")
|
||||
.apply(
|
||||
Term::un_b_data()
|
||||
.apply(Term::head_list().apply(Term::var("tuple"))),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::tail_list().apply(Term::var("left")))
|
||||
.lambda("tuple")
|
||||
.apply(
|
||||
|
@ -3461,19 +3449,19 @@ fn acceptance_test_29_union_tuple() {
|
|||
.apply(Term::var("rest")),
|
||||
),
|
||||
)
|
||||
.lambda("rest")
|
||||
.lambda("v2")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(
|
||||
Term::tail_list().apply(Term::var("tuple")),
|
||||
),
|
||||
))
|
||||
.lambda("k2")
|
||||
.apply(
|
||||
Term::un_b_data().apply(
|
||||
Term::head_list().apply(Term::var("tuple")),
|
||||
),
|
||||
)
|
||||
.lambda("rest")
|
||||
.apply(Term::un_i_data().apply(
|
||||
Term::head_list().apply(
|
||||
Term::tail_list().apply(Term::var("tuple")),
|
||||
),
|
||||
))
|
||||
.apply(Term::tail_list().apply(Term::var("elems")))
|
||||
.lambda("tuple")
|
||||
.apply(Term::unlist_data().apply(
|
||||
|
|
Loading…
Reference in New Issue