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