lemma-engine 0.8.17

A language that means business.
Documentation
use std::collections::HashMap;

use lemma::DateTimeValue;
use lemma::{Engine, ValueKind};

#[test]
fn test_duration_conversion_properties() {
    let mut engine = Engine::new();
    let code = r#"
spec test
uses lemma units
data duration: 60 minutes
rule to_hours: duration as hours
"#;
    engine
        .load(
            code,
            lemma::SourceType::Path(std::sync::Arc::new(std::path::PathBuf::from("test"))),
        )
        .unwrap();

    let now = DateTimeValue::now();
    let response = engine
        .run(None, "test", Some(&now), HashMap::new(), true, None)
        .unwrap();
    let rule_result = response
        .results
        .values()
        .find(|r| r.rule.name == "to_hours")
        .unwrap();
    let val = rule_result
        .explanation
        .as_ref()
        .expect("explanation")
        .result
        .value()
        .expect("value")
        .clone();

    if let ValueKind::Quantity(_, _) = &val.value {
        assert_eq!(
            rule_result
                .quantity
                .as_ref()
                .and_then(|m| m.get("hours"))
                .map(String::as_str),
            Some("1"),
            "60 minutes as hours"
        );
    } else {
        panic!(
            "to_hours should be a Quantity after conversion, got {:?}",
            val
        );
    }
}