bf 0.4.5

An optimizing Brainfuck interpeter and JIT compiler
Documentation
#![feature(test)]

extern crate test;
extern crate bf;

#[cfg(feature = "jit")]
mod jit_only {
    use bf::ast;

    use bf::traits::{Interpretable, JitCompilable};
    use bf::test_helpers;

    use test::Bencher;

    #[bench]
    fn compile_factor(b: &mut Bencher) {
        let program = ast::parse_program(test_helpers::FACTOR_SRC).unwrap();

        b.iter(|| {
            program.jit_compile(true)
        });
    }

    #[bench]
    fn compile_factor_unchecked(b: &mut Bencher) {
        let program = ast::parse_program(test_helpers::FACTOR_SRC).unwrap();

        b.iter(|| {
            program.jit_compile(false)
        });
    }

    #[bench]
    fn run_factor_million(b: &mut Bencher) {
        let program = ast::parse_program(test_helpers::FACTOR_SRC).unwrap();
        let program = program.jit_compile(true);

        b.iter(|| {
            program.interpret_memory(None, b"1000000\n").unwrap()
        });
    }

    #[bench]
    fn run_factor_million_unchecked(b: &mut Bencher) {
        let program = ast::parse_program(test_helpers::FACTOR_SRC).unwrap();
        let program = program.jit_compile(false);

        b.iter(|| {
            program.interpret_memory(None, b"1000000\n").unwrap()
        });
    }
}