sapphire-lang 0.8.0

Gradually typed scripting language where every value is an object and types are optional, checked at runtime
Documentation
use super::{VmValue, eval};

#[test]
fn size() {
    assert_eq!(eval("m = {a: 1, b: 2}\nm.size()"), VmValue::Int(2));
    assert_eq!(eval("{}.size()"), VmValue::Int(0));
}

#[test]
fn has_key() {
    assert_eq!(eval("m = {a: 1}\nm.has_key?(\"a\")"), VmValue::Bool(true));
    assert_eq!(eval("m = {a: 1}\nm.has_key?(\"z\")"), VmValue::Bool(false));
}

#[test]
fn delete() {
    assert_eq!(eval("m = {a: 1}\nm.delete(\"a\")"), VmValue::Int(1));
    assert_eq!(
        eval("m = {a: 1}\nm.delete(\"a\")\nm.size()"),
        VmValue::Int(0)
    );
}

#[test]
fn merge() {
    let src = r#"a = { x: 1 }
b = { y: 2 }
c = a.merge(b)
c.size()"#;
    assert_eq!(eval(src), VmValue::Int(2));

    let src2 = r#"a = { x: 1 }
b = { y: 2 }
c = a.merge(b)
c["x"]"#;
    assert_eq!(eval(src2), VmValue::Int(1));
}