mri-sys 0.2.6

Rust bindings to Mat'z Ruby interpreter
Documentation
use super::*;
use crate::helpers::*;

pub fn eval(s: &str) -> Result<Value, CaughtException> {
    crate::helpers::eval(s, Binding::top_level(), None)
}

#[test]
pub fn vm_can_eval_stuff() {
    unsafe {
        ruby_init();

        assert_eq!(eval("nil"), Ok(Value::NIL));

        let number_ten = eval("10").unwrap();
        let five_plus_five = eval("5+5").unwrap();

        assert!(eval("nil").unwrap().is_nil());
        assert!(eval("1").unwrap().is_of_value_type(T_FIXNUM));
        assert!(five_plus_five.is_of_value_type(T_FIXNUM));
        assert!(eval("1.0").unwrap().is_of_value_type(T_FLOAT));
        assert_eq!(eval("true || false").unwrap(), Value::TRUE);
        assert_eq!(eval("true && false").unwrap(), Value::FALSE);

        assert_eq!(number_ten.to_s().unwrap(), "10".to_owned());
        assert_eq!(five_plus_five.to_s().unwrap(), "10".to_owned());
        assert_eq!(number_ten, five_plus_five);

        ruby_cleanup(0);
    }
}