chore: add if_else optimization test

This commit is contained in:
microproofs 2023-05-09 19:09:24 -04:00
parent 6456001cbc
commit 0c3dc0580a
1 changed files with 60 additions and 0 deletions

View File

@ -504,6 +504,7 @@ mod test {
use crate::{ use crate::{
ast::{Constant, Name, NamedDeBruijn, Program, Term}, ast::{Constant, Name, NamedDeBruijn, Program, Term},
builtins::DefaultFunction,
parser::interner::Interner, parser::interner::Interner,
}; };
@ -780,4 +781,63 @@ mod test {
assert_eq!(actual, expected); assert_eq!(actual, expected);
} }
#[test]
fn builtin_force_reduce_if_builtin() {
let program: Program<Name> = Program {
version: (1, 0, 0),
term: Term::equals_integer()
.apply(Term::var("x"))
.apply(
Term::add_integer()
.apply(Term::integer(2.into()))
.apply(Term::var("y")),
)
.delayed_if_else(
Term::length_of_bytearray().apply(Term::byte_string(vec![])),
Term::Error,
)
.lambda("x")
.lambda("y"),
};
let mut expected = Program {
version: (1, 0, 0),
term: Term::var("__if_then_else_wrapped")
.apply(
Term::equals_integer().apply(Term::var("x")).apply(
Term::add_integer()
.apply(Term::integer(2.into()))
.apply(Term::var("y")),
),
)
.apply(
Term::length_of_bytearray()
.apply(Term::byte_string(vec![]))
.delay(),
)
.apply(Term::Error.delay())
.force()
.lambda("x")
.lambda("y")
.lambda("__if_then_else_wrapped")
.apply(Term::Builtin(DefaultFunction::IfThenElse).force()),
};
let mut interner = Interner::new();
interner.program(&mut expected);
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
let mut actual = program.builtin_force_reduce();
let mut interner = Interner::new();
interner.program(&mut actual);
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
assert_eq!(actual, expected);
}
} }