Fixing unit tests

This commit is contained in:
microproofs 2024-11-01 01:24:41 -04:00
parent d39d70a5d8
commit e87d7a1101
No known key found for this signature in database
GPG Key ID: 14F93C84DE6AFD17
2 changed files with 158 additions and 125 deletions

View File

@ -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);
}
}

View File

@ -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);