sim-nest 0.2.1

The SIM constellation umbrella facade: one crate that re-exports the runtime kernel, codecs, number domains, and libraries behind features.
Documentation
use sim::lib_control::{AdmissionLimit, WorkLimit};
use sim::lib_lang_javascript::{
    Completion, JavascriptEvalPolicy, JavascriptJobs, JavascriptPromise,
    JavascriptPromiseState, JavascriptState, JavascriptValue, javascript_fidelity_dimensions,
};

pub fn bounded_javascript_module() -> Result<(), Box<dyn std::error::Error>> {
    let tree = sim::codec_javascript::parse_module("const answer = 40 + 2; answer;")?;
    let lowered = sim::codec_javascript::lower_javascript(&tree);
    let result = JavascriptEvalPolicy::new(128)?
        .eval_lowered(&lowered, &mut JavascriptState::default())?;
    assert_eq!(result, Completion::Normal(JavascriptValue::Number(42.0)));

    let promise = JavascriptPromise::default();
    let mut jobs = JavascriptJobs::new(AdmissionLimit(1));
    promise
        .resolve(&mut jobs, JavascriptValue::Number(42.0))
        .map_err(|error| std::io::Error::other(format!("promise admission failed: {error:?}")))?;
    assert_eq!(promise.state(), JavascriptPromiseState::Pending);
    let receipt = jobs
        .microtask_checkpoint(WorkLimit(1))
        .map_err(|error| std::io::Error::other(format!("microtask drain failed: {error:?}")))?;
    assert_eq!(receipt.completed.len(), 1);
    assert_eq!(promise.state(), JavascriptPromiseState::Fulfilled(JavascriptValue::Number(42.0)));

    let gaps = javascript_fidelity_dimensions().iter()
        .find(|dimension| dimension.name == "expected-gaps")
        .expect("fidelity publishes expected gaps");
    assert!(gaps.evidence.contains("Node"));
    assert!(javascript_fidelity_dimensions().iter().any(|dimension| {
        dimension.name == "direct-evaluation" && dimension.evidence.contains("no compiler")
    }));
    Ok(())
}