Fixing unit tests
This commit is contained in:
parent
d39d70a5d8
commit
e87d7a1101
|
@ -1532,4 +1532,46 @@ mod tester {
|
||||||
|
|
||||||
println!("{}", tree);
|
println!("{}", tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn thing6() {
|
||||||
|
let source_code = r#"
|
||||||
|
test thing(){
|
||||||
|
when [] is {
|
||||||
|
[] -> 4 == 4
|
||||||
|
[a, 1, ..c] -> True
|
||||||
|
[a, b, c, d, 5, ..f] -> False
|
||||||
|
_ -> 1 == 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let (_, ast) = check(parse(source_code)).unwrap();
|
||||||
|
|
||||||
|
let Definition::Test(function) = &ast.definitions[0] else {
|
||||||
|
panic!()
|
||||||
|
};
|
||||||
|
|
||||||
|
let TypedExpr::When {
|
||||||
|
clauses, subject, ..
|
||||||
|
} = &function.body
|
||||||
|
else {
|
||||||
|
panic!()
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut air_interner = AirInterner::new();
|
||||||
|
|
||||||
|
let data_types = IndexMap::new();
|
||||||
|
|
||||||
|
let pattern = TypedPattern::Discard {
|
||||||
|
name: "_".to_string(),
|
||||||
|
location: Span::empty(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let tree_gen = TreeGen::new(&mut air_interner, &data_types, &pattern);
|
||||||
|
|
||||||
|
let tree = tree_gen.build_tree(&subject.tipo(), clauses);
|
||||||
|
|
||||||
|
println!("{}", tree);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3087,30 +3087,75 @@ fn acceptance_test_29_union_pair() {
|
||||||
|
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
let do_insert = Term::var("elems")
|
let uplc =
|
||||||
.delayed_choose_list(
|
Term::equals_data()
|
||||||
Term::mk_cons()
|
.apply(
|
||||||
.apply(
|
Term::map_data().apply(
|
||||||
Term::mk_pair_data()
|
Term::var("union")
|
||||||
.apply(Term::b_data().apply(Term::var("k")))
|
.lambda("union")
|
||||||
.apply(Term::i_data().apply(Term::var("v"))),
|
.apply(
|
||||||
)
|
Term::var("do_union")
|
||||||
.apply(Term::empty_map()),
|
.apply(Term::var("left"))
|
||||||
Term::head_list()
|
.apply(Term::var("right"))
|
||||||
.apply(Term::var("elems"))
|
.lambda("right")
|
||||||
.as_var("elem_0", |elem_0| {
|
.lambda("left"),
|
||||||
Term::tail_list()
|
)
|
||||||
.apply(Term::var("elems"))
|
.lambda("do_union")
|
||||||
.as_var("rest", |rest| {
|
.apply(Term::var("do_union").apply(Term::var("do_union")))
|
||||||
Term::un_b_data()
|
.lambda("do_union")
|
||||||
.apply(Term::fst_pair().apply(Term::Var(elem_0.clone())))
|
.apply(
|
||||||
.as_var("k2", |k2| {
|
Term::var("left")
|
||||||
Term::un_i_data()
|
.delayed_choose_list(
|
||||||
.apply(Term::snd_pair().apply(Term::Var(elem_0.clone())))
|
Term::var("right"),
|
||||||
.as_var("v2", |v2| {
|
Term::var("do_union")
|
||||||
|
.apply(Term::var("do_union"))
|
||||||
|
.apply(Term::var("rest"))
|
||||||
|
.apply(
|
||||||
|
Term::var("do_insert")
|
||||||
|
.apply(Term::var("right"))
|
||||||
|
.apply(Term::var("k"))
|
||||||
|
.apply(Term::var("v")),
|
||||||
|
)
|
||||||
|
.lambda("rest")
|
||||||
|
.lambda("v")
|
||||||
|
.lambda("k")
|
||||||
|
.apply(
|
||||||
|
Term::un_b_data()
|
||||||
|
.apply(Term::fst_pair().apply(Term::var("tuple"))),
|
||||||
|
)
|
||||||
|
.apply(
|
||||||
|
Term::un_i_data()
|
||||||
|
.apply(Term::snd_pair().apply(Term::var("tuple"))),
|
||||||
|
)
|
||||||
|
.apply(Term::tail_list().apply(Term::var("left")))
|
||||||
|
.lambda("tuple")
|
||||||
|
.apply(Term::head_list().apply(Term::var("left"))),
|
||||||
|
)
|
||||||
|
.lambda("right")
|
||||||
|
.lambda("left")
|
||||||
|
.lambda("do_union"),
|
||||||
|
)
|
||||||
|
.lambda("do_insert")
|
||||||
|
.apply(
|
||||||
|
Term::var("do_insert")
|
||||||
|
.apply(Term::var("do_insert"))
|
||||||
|
.apply(Term::var("elems"))
|
||||||
|
.lambda("do_insert")
|
||||||
|
.apply(
|
||||||
|
Term::var("elems")
|
||||||
|
.delayed_choose_list(
|
||||||
|
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::empty_map()),
|
||||||
Term::equals_bytestring()
|
Term::equals_bytestring()
|
||||||
.apply(Term::var("k"))
|
.apply(Term::var("k"))
|
||||||
.apply(Term::Var(k2.clone()))
|
.apply(Term::var("k2"))
|
||||||
.delayed_if_then_else(
|
.delayed_if_then_else(
|
||||||
Term::mk_cons()
|
Term::mk_cons()
|
||||||
.apply(
|
.apply(
|
||||||
|
@ -3124,126 +3169,72 @@ fn acceptance_test_29_union_pair() {
|
||||||
.apply(Term::var("v")),
|
.apply(Term::var("v")),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.apply(Term::Var(rest.clone())),
|
.apply(Term::var("rest")),
|
||||||
Term::mk_cons()
|
Term::mk_cons()
|
||||||
.apply(
|
.apply(
|
||||||
Term::mk_pair_data()
|
Term::mk_pair_data()
|
||||||
.apply(
|
.apply(
|
||||||
Term::b_data()
|
Term::b_data()
|
||||||
.apply(Term::Var(k2)),
|
.apply(Term::var("k2")),
|
||||||
)
|
)
|
||||||
.apply(
|
.apply(
|
||||||
Term::i_data()
|
Term::i_data()
|
||||||
.apply(Term::Var(v2)),
|
.apply(Term::var("v2")),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.apply(
|
.apply(
|
||||||
Term::var("do_insert")
|
Term::var("do_insert")
|
||||||
.apply(Term::var("do_insert"))
|
.apply(Term::var("do_insert"))
|
||||||
.apply(Term::Var(rest)),
|
.apply(Term::var("rest")),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
})
|
.lambda("rest")
|
||||||
})
|
.lambda("v2")
|
||||||
})
|
.lambda("k2")
|
||||||
}),
|
.apply(Term::un_b_data().apply(
|
||||||
)
|
Term::fst_pair().apply(Term::var("tuple")),
|
||||||
.lambda("elems")
|
))
|
||||||
.lambda("do_insert");
|
.apply(Term::un_i_data().apply(
|
||||||
|
Term::snd_pair().apply(Term::var("tuple")),
|
||||||
let do_insert_recurse = do_insert
|
))
|
||||||
.as_var("do_insert", |do_insert| {
|
.apply(Term::tail_list().apply(Term::var("elems")))
|
||||||
Term::Var(do_insert.clone())
|
.lambda("tuple")
|
||||||
.apply(Term::Var(do_insert))
|
.apply(Term::head_list().apply(Term::var("elems"))),
|
||||||
.apply(Term::var("elems"))
|
)
|
||||||
})
|
.lambda("elems")
|
||||||
.lambda("v")
|
.lambda("do_insert"),
|
||||||
.lambda("k")
|
|
||||||
.lambda("elems");
|
|
||||||
|
|
||||||
let insert = Term::var("do_insert")
|
|
||||||
.apply(Term::var("m"))
|
|
||||||
.apply(Term::var("k"))
|
|
||||||
.apply(Term::var("v"))
|
|
||||||
.lambda("v")
|
|
||||||
.lambda("k")
|
|
||||||
.lambda("m");
|
|
||||||
|
|
||||||
let empty_list = Term::empty_map();
|
|
||||||
|
|
||||||
let fixture = Term::data(Data::map(vec![
|
|
||||||
(
|
|
||||||
Data::bytestring(vec![0x66, 0x6f, 0x6f]),
|
|
||||||
Data::integer(42.into()),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
Data::bytestring(vec![0x62, 0x61, 0x72]),
|
|
||||||
Data::integer(14.into()),
|
|
||||||
),
|
|
||||||
]));
|
|
||||||
|
|
||||||
let fixture_unwrapped = Term::Constant(
|
|
||||||
Constant::ProtoList(
|
|
||||||
Type::Pair(Type::Data.into(), Type::Data.into()),
|
|
||||||
vec![
|
|
||||||
Constant::ProtoPair(
|
|
||||||
Type::Data,
|
|
||||||
Type::Data,
|
|
||||||
Constant::Data(Data::bytestring(vec![0x66, 0x6f, 0x6f])).into(),
|
|
||||||
Constant::Data(Data::integer(42.into())).into(),
|
|
||||||
),
|
|
||||||
Constant::ProtoPair(
|
|
||||||
Type::Data,
|
|
||||||
Type::Data,
|
|
||||||
Constant::Data(Data::bytestring(vec![0x62, 0x61, 0x72])).into(),
|
|
||||||
Constant::Data(Data::integer(14.into())).into(),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
.into(),
|
|
||||||
);
|
|
||||||
|
|
||||||
let do_union = Term::var("left")
|
|
||||||
.delayed_choose_list(
|
|
||||||
Term::var("right"),
|
|
||||||
Term::head_list()
|
|
||||||
.apply(Term::var("left"))
|
|
||||||
.as_var("elem_0", |elem_0| {
|
|
||||||
Term::var("do_union")
|
|
||||||
.apply(Term::var("do_union"))
|
|
||||||
.apply(Term::tail_list().apply(Term::var("left")))
|
|
||||||
.apply(
|
|
||||||
Term::var("do_insert")
|
|
||||||
.apply(Term::var("right"))
|
|
||||||
.apply(
|
|
||||||
Term::un_b_data()
|
|
||||||
.apply(Term::fst_pair().apply(Term::Var(elem_0.clone()))),
|
|
||||||
)
|
)
|
||||||
.apply(
|
.lambda("v")
|
||||||
Term::un_i_data()
|
.lambda("k")
|
||||||
.apply(Term::snd_pair().apply(Term::Var(elem_0))),
|
.lambda("elems"),
|
||||||
),
|
|
||||||
)
|
)
|
||||||
}),
|
.apply(Term::map_values(vec![
|
||||||
)
|
Constant::ProtoPair(
|
||||||
.lambda("right")
|
Type::Data,
|
||||||
.lambda("left")
|
Type::Data,
|
||||||
.lambda("do_union");
|
Constant::Data(Data::bytestring(vec![0x66, 0x6f, 0x6f])).into(),
|
||||||
|
Constant::Data(Data::integer(42.into())).into(),
|
||||||
let uplc = Term::equals_data()
|
),
|
||||||
.apply(
|
Constant::ProtoPair(
|
||||||
Term::map_data().apply(do_union.as_var("do_union", |do_union| {
|
Type::Data,
|
||||||
Term::Var(do_union.clone())
|
Type::Data,
|
||||||
.apply(Term::Var(do_union))
|
Constant::Data(Data::bytestring(vec![0x62, 0x61, 0x72])).into(),
|
||||||
.apply(fixture_unwrapped)
|
Constant::Data(Data::integer(14.into())).into(),
|
||||||
.apply(empty_list)
|
),
|
||||||
})),
|
]))
|
||||||
)
|
.apply(Term::empty_map()),
|
||||||
.apply(fixture)
|
),
|
||||||
.lambda("insert")
|
)
|
||||||
.apply(insert)
|
.apply(Term::data(Data::map(vec![
|
||||||
.lambda("do_insert")
|
(
|
||||||
.apply(do_insert_recurse);
|
Data::bytestring(vec![0x66, 0x6f, 0x6f]),
|
||||||
|
Data::integer(42.into()),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Data::bytestring(vec![0x62, 0x61, 0x72]),
|
||||||
|
Data::integer(14.into()),
|
||||||
|
),
|
||||||
|
])));
|
||||||
|
|
||||||
assert_uplc(src, uplc.clone(), false, true);
|
assert_uplc(src, uplc.clone(), false, true);
|
||||||
assert_uplc(src, uplc, false, false);
|
assert_uplc(src, uplc, false, false);
|
||||||
|
|
Loading…
Reference in New Issue