blc 0.7.0

An implementation of the binary lambda calculus.
Documentation
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)" // Church-encoded 1
    );

    assert_eq!(
        run(&fizzbuzz_blc, Input::Bits(&to_bits(&2.into_church()))).unwrap(),
        "(λλ2(21))" // Church-encoded 2
    );
    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))))" // Church-encoded 4
    );

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