use blc::encoding::lambda::encode;
use blc::execution::Input;
use blc::*;
use lambda_calculus::data::num::church::{is_zero, rem};
use lambda_calculus::*;
#[test]
fn fizz_buzz() {
let fizzbuzz_single = abs(app!(
is_zero(),
app!(rem(), Var(1), 15.into_church()),
encode(b"FizzBuzz"),
app!(
is_zero(),
app!(rem(), Var(1), 3.into_church()),
encode(b"Fizz"),
app!(
is_zero(),
app!(rem(), Var(1), 5.into_church()),
encode(b"Buzz"),
Var(1)
)
)
));
let fizzbuzz_blc = to_bits(&fizzbuzz_single);
assert_eq!(
run(&fizzbuzz_blc, Input::Bits(&to_bits(&1.into_church()))).unwrap(),
"(λλ21)" );
assert_eq!(
run(&fizzbuzz_blc, Input::Bits(&to_bits(&2.into_church()))).unwrap(),
"(λλ2(21))" );
assert_eq!(
run(&fizzbuzz_blc, Input::Bits(&to_bits(&3.into_church()))).unwrap(),
"Fizz"
);
assert_eq!(
run(&fizzbuzz_blc, Input::Bits(&to_bits(&4.into_church()))).unwrap(),
"(λλ2(2(2(21))))" );
assert_eq!(
run(&fizzbuzz_blc, Input::Bits(&to_bits(&5.into_church()))).unwrap(),
"Buzz"
);
assert_eq!(
run(&fizzbuzz_blc, Input::Bits(&to_bits(&15.into_church()))).unwrap(),
"FizzBuzz"
);
}