jit 0.9.1

Just-In-Time Compilation in Rust using LibJIT bindings
#![feature(core, std_misc, plugin)]
#![plugin(jit_macros)]
#[no_link] #[macro_use]
extern crate jit_macros;
extern crate jit;
use jit::*;

#[test]
fn test_sqrt() {
    let mut ctx = Context::<()>::new();
    assert_eq!(ctx.functions().count(), 0);
    jit!(&mut ctx, |num: usize| -> usize {
        (num as f32).sqrt() as usize
    }, |sqrt: extern fn(usize) -> usize| {
        assert_eq!(sqrt(64), 8);
        assert_eq!(sqrt(16), 4);
        assert_eq!(sqrt(9), 3);
        assert_eq!(sqrt(4), 2);
        assert_eq!(sqrt(1), 1);
    });
}

#[test]
fn test_alt_sqrt() {
    let mut ctx = Context::<()>::new();
    assert_eq!(ctx.functions().count(), 0);
    jit!(&mut ctx, |num: f32| -> f32 {
        num.sqrt()
    }, |sqrt: extern fn(f32) -> f32| {
        assert_eq!(sqrt(64.0), 8.0);
        assert_eq!(sqrt(16.0), 4.0);
        assert_eq!(sqrt(9.0), 3.0);
        assert_eq!(sqrt(4.0), 2.0);
        assert_eq!(sqrt(2.25), 1.5);
        assert_eq!(sqrt(1.0), 1.0);
    });
    assert_eq!(ctx.functions().count(), 1);
}