From 0c3dc0580a640db52a59da57d6903bb32eeb3462 Mon Sep 17 00:00:00 2001 From: microproofs Date: Tue, 9 May 2023 19:09:24 -0400 Subject: [PATCH] chore: add if_else optimization test --- crates/uplc/src/optimize/shrinker.rs | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index 13114169..0ee462a3 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -504,6 +504,7 @@ mod test { use crate::{ ast::{Constant, Name, NamedDeBruijn, Program, Term}, + builtins::DefaultFunction, parser::interner::Interner, }; @@ -780,4 +781,63 @@ mod test { assert_eq!(actual, expected); } + + #[test] + fn builtin_force_reduce_if_builtin() { + let program: Program = 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 = expected.try_into().unwrap(); + + let mut actual = program.builtin_force_reduce(); + + let mut interner = Interner::new(); + + interner.program(&mut actual); + + let actual: Program = actual.try_into().unwrap(); + + assert_eq!(actual, expected); + } }