webnn-graph 0.4.0

Simple DSL for WebNN graphs
Documentation
use std::fs;

use webnn_graph::parser::parse_wg_text;
use webnn_graph::serialize::{serialize_graph_to_wg_text, SerializeOptions};

#[test]
fn format_reference_round_trips_through_graph_json() {
    let path = format!(
        "{}/examples/format_reference.webnn",
        env!("CARGO_MANIFEST_DIR")
    );
    let source = fs::read_to_string(path).expect("read format reference example");
    let parsed = parse_wg_text(&source).expect("parse format reference example");

    assert_eq!(parsed.version, 2);
    assert!(parsed.quantized);
    assert!(parsed.inputs["input"].static_shape().is_none());
    assert!(parsed.consts["bias"].shape.is_empty());
    assert!(parsed.consts.contains_key("inline_mask"));
    assert!(parsed.consts.contains_key("external_weight"));
    assert_eq!(
        parsed.nodes[1].outputs.as_deref(),
        Some(&["left".into(), "right".into()][..])
    );

    let serialized = serialize_graph_to_wg_text(&parsed, SerializeOptions::default())
        .expect("serialize format reference example");
    let reparsed = parse_wg_text(&serialized).expect("reparse serialized format reference example");

    assert_eq!(
        serde_json::to_value(parsed).expect("serialize original AST"),
        serde_json::to_value(reparsed).expect("serialize round-tripped AST")
    );
}