pax-language 0.39.1

Pax language parser
Documentation
use pax_language::interpreter::property_resolution::IdentifierResolver;
use pax_runtime_api::{Numeric, PaxValue};
use std::collections::HashMap;

#[test]
#[cfg(feature = "parser")]
fn standalone_expression_uses_map_values_without_entering_a_shared_graph() {
    use pax_language::interpreter::compute_paxel;
    use pax_runtime_api::Functions;
    use std::rc::Rc;

    Functions::register_all_functions();
    let values = HashMap::from([("count".to_string(), PaxValue::Numeric(Numeric::I64(3)))]);
    let result = compute_paxel("count * 2", Rc::new(values)).unwrap();
    assert_eq!(result, PaxValue::Numeric(Numeric::I64(6)));
}

#[test]
fn resolved_variables_keep_their_snapshot_after_the_map_changes_or_drops() {
    let mut values = HashMap::from([("count".to_string(), PaxValue::Numeric(Numeric::I64(3)))]);
    let original = values.resolve("count".to_string()).unwrap();
    values.insert("count".to_string(), PaxValue::Numeric(Numeric::I64(5)));
    let updated = values.resolve("count".to_string()).unwrap();
    assert!(matches!(
        values.resolve("missing".to_string()),
        Err(message) if message == "Identifier not found: missing"
    ));
    drop(values);

    assert_eq!(
        original.get_as_pax_value(),
        PaxValue::Numeric(Numeric::I64(3))
    );
    assert_eq!(
        updated.get_as_pax_value(),
        PaxValue::Numeric(Numeric::I64(5))
    );
}