devalang 0.2.0

Write music with code. Devalang is a domain-specific language (DSL) for sound designers and music hackers. Compose, automate, and control sound — in plain text.
Documentation
use super::*;

#[test]
fn test_resolve_identifier() {
    let mut vars = HashMap::new();
    vars.insert("x".to_string(), Value::Number(42.0));

    let result = resolve_value(&Value::Identifier("x".to_string()), &vars, 0);
    assert!(matches!(result, Value::Number(n) if (n - 42.0).abs() < f32::EPSILON));
}

#[test]
fn test_resolve_chained_identifier() {
    let mut vars = HashMap::new();
    vars.insert("x".to_string(), Value::Identifier("y".to_string()));
    vars.insert("y".to_string(), Value::Number(100.0));

    let result = resolve_value(&Value::Identifier("x".to_string()), &vars, 0);
    assert!(matches!(result, Value::Number(n) if (n - 100.0).abs() < f32::EPSILON));
}

#[test]
fn test_resolve_map() {
    let mut vars = HashMap::new();
    vars.insert("gain".to_string(), Value::Number(0.8));

    let mut input_map = HashMap::new();
    input_map.insert("vol".to_string(), Value::Identifier("gain".to_string()));

    let result = resolve_value(&Value::Map(input_map), &vars, 0);
    if let Value::Map(m) = result {
        if let Some(Value::Number(n)) = m.get("vol") {
            assert!((n - 0.8).abs() < f32::EPSILON);
            return;
        }
    }
    panic!("Expected resolved map with vol=0.8");
}