Fixing unit tests
This commit is contained in:
parent
d39d70a5d8
commit
e87d7a1101
|
@ -1532,4 +1532,46 @@ mod tester {
|
|||
|
||||
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")
|
||||
.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::head_list()
|
||||
.apply(Term::var("elems"))
|
||||
.as_var("elem_0", |elem_0| {
|
||||
Term::tail_list()
|
||||
.apply(Term::var("elems"))
|
||||
.as_var("rest", |rest| {
|
||||
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| {
|
||||
let uplc =
|
||||
Term::equals_data()
|
||||
.apply(
|
||||
Term::map_data().apply(
|
||||
Term::var("union")
|
||||
.lambda("union")
|
||||
.apply(
|
||||
Term::var("do_union")
|
||||
.apply(Term::var("left"))
|
||||
.apply(Term::var("right"))
|
||||
.lambda("right")
|
||||
.lambda("left"),
|
||||
)
|
||||
.lambda("do_union")
|
||||
.apply(Term::var("do_union").apply(Term::var("do_union")))
|
||||
.lambda("do_union")
|
||||
.apply(
|
||||
Term::var("left")
|
||||
.delayed_choose_list(
|
||||
Term::var("right"),
|
||||
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()
|
||||
.apply(Term::var("k"))
|
||||
.apply(Term::Var(k2.clone()))
|
||||
.apply(Term::var("k2"))
|
||||
.delayed_if_then_else(
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
|
@ -3124,126 +3169,72 @@ fn acceptance_test_29_union_pair() {
|
|||
.apply(Term::var("v")),
|
||||
),
|
||||
)
|
||||
.apply(Term::Var(rest.clone())),
|
||||
.apply(Term::var("rest")),
|
||||
Term::mk_cons()
|
||||
.apply(
|
||||
Term::mk_pair_data()
|
||||
.apply(
|
||||
Term::b_data()
|
||||
.apply(Term::Var(k2)),
|
||||
.apply(Term::var("k2")),
|
||||
)
|
||||
.apply(
|
||||
Term::i_data()
|
||||
.apply(Term::Var(v2)),
|
||||
.apply(Term::var("v2")),
|
||||
),
|
||||
)
|
||||
.apply(
|
||||
Term::var("do_insert")
|
||||
.apply(Term::var("do_insert"))
|
||||
.apply(Term::Var(rest)),
|
||||
.apply(Term::var("rest")),
|
||||
),
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
}),
|
||||
)
|
||||
.lambda("elems")
|
||||
.lambda("do_insert");
|
||||
|
||||
let do_insert_recurse = do_insert
|
||||
.as_var("do_insert", |do_insert| {
|
||||
Term::Var(do_insert.clone())
|
||||
.apply(Term::Var(do_insert))
|
||||
.apply(Term::var("elems"))
|
||||
})
|
||||
.lambda("v")
|
||||
.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()))),
|
||||
.lambda("rest")
|
||||
.lambda("v2")
|
||||
.lambda("k2")
|
||||
.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("elems")))
|
||||
.lambda("tuple")
|
||||
.apply(Term::head_list().apply(Term::var("elems"))),
|
||||
)
|
||||
.lambda("elems")
|
||||
.lambda("do_insert"),
|
||||
)
|
||||
.apply(
|
||||
Term::un_i_data()
|
||||
.apply(Term::snd_pair().apply(Term::Var(elem_0))),
|
||||
),
|
||||
.lambda("v")
|
||||
.lambda("k")
|
||||
.lambda("elems"),
|
||||
)
|
||||
}),
|
||||
)
|
||||
.lambda("right")
|
||||
.lambda("left")
|
||||
.lambda("do_union");
|
||||
|
||||
let uplc = Term::equals_data()
|
||||
.apply(
|
||||
Term::map_data().apply(do_union.as_var("do_union", |do_union| {
|
||||
Term::Var(do_union.clone())
|
||||
.apply(Term::Var(do_union))
|
||||
.apply(fixture_unwrapped)
|
||||
.apply(empty_list)
|
||||
})),
|
||||
)
|
||||
.apply(fixture)
|
||||
.lambda("insert")
|
||||
.apply(insert)
|
||||
.lambda("do_insert")
|
||||
.apply(do_insert_recurse);
|
||||
.apply(Term::map_values(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(),
|
||||
),
|
||||
]))
|
||||
.apply(Term::empty_map()),
|
||||
),
|
||||
)
|
||||
.apply(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()),
|
||||
),
|
||||
])));
|
||||
|
||||
assert_uplc(src, uplc.clone(), false, true);
|
||||
assert_uplc(src, uplc, false, false);
|
||||
|
|
Loading…
Reference in New Issue