harn-vm 0.10.29

Async bytecode virtual machine for the Harn programming language
Documentation
use super::cost::parse_budget;
use crate::value::{intern_key, DictMap, VmValue};

#[test]
fn budget_number_shorthand_sets_max_cost_usd() {
    let options = DictMap::from_iter([(intern_key("budget"), VmValue::Float(0.25))]);
    let envelope = parse_budget(Some(&options))
        .expect("valid budget")
        .expect("non-empty envelope");
    assert_eq!(envelope.max_cost_usd, Some(0.25));
    assert_eq!(envelope.total_budget_usd, None);
}

#[test]
fn budget_dict_parses_named_fields() {
    let fields = DictMap::from_iter([
        (intern_key("max_cost_usd"), VmValue::Float(1.5)),
        (intern_key("total_budget_usd"), VmValue::Float(10.0)),
    ]);
    let options = DictMap::from_iter([(intern_key("budget"), VmValue::dict(fields))]);
    let envelope = parse_budget(Some(&options))
        .expect("valid budget")
        .expect("non-empty envelope");
    assert_eq!(envelope.max_cost_usd, Some(1.5));
    assert_eq!(envelope.total_budget_usd, Some(10.0));
}

#[test]
fn flat_top_level_budget_fields_are_not_read() {
    let options = DictMap::from_iter([(intern_key("max_cost_usd"), VmValue::Float(3.0))]);
    assert!(parse_budget(Some(&options))
        .expect("no budget key")
        .is_none());
}