Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

facett-flow/tests/compositions.rs

//! Every browser composition is also checked offline, including a negative control.
#[test]
fn all_compositions_validate() {
    let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
    for row in include_str!("../src/wgsl-compositions.txt")
        .lines()
        .filter(|s| !s.trim().is_empty() && !s.starts_with('#'))
    {
        let (name, files) = row.split_once(':').unwrap();
        let source = files
            .split_whitespace()
            .map(|p| std::fs::read_to_string(root.join(p)).unwrap())
            .collect::<Vec<_>>()
            .join("\n");
        let module = naga::front::wgsl::parse_str(&source)
            .unwrap_or_else(|e| panic!("{name}: {}", e.emit_to_string(&source)));
        if name == "plain" {
            assert_eq!(
                module
                    .global_variables
                    .iter()
                    .filter(|(_, v)| v.binding.as_ref().is_some_and(|b| b.group == 0))
                    .count(),
                3
            );
            let entries = module
                .entry_points
                .iter()
                .map(|e| e.name.as_str())
                .collect::<Vec<_>>();
            assert_eq!(
                entries,
                [
                    "node_vs", "node_fs", "edge_vs", "edge_fs", "pulse_vs", "pulse_fs"
                ]
            );
        }
        naga::valid::Validator::new(
            naga::valid::ValidationFlags::all(),
            naga::valid::Capabilities::all(),
        )
        .validate(&module)
        .unwrap_or_else(|e| panic!("{name}: {e:?}"));
        assert!(naga::front::wgsl::parse_str(&(source + "\n@vertex fn broken( {")).is_err());
    }
}
#[test]
fn node_wire_keys_stay_unchanged() {
    let value = serde_json::to_value(&facett_flow::Graph::demo(1).nodes[0]).unwrap();
    let mut keys = value
        .as_object()
        .unwrap()
        .keys()
        .map(String::as_str)
        .collect::<Vec<_>>();
    keys.sort();
    assert_eq!(keys, ["group", "id", "kind", "label", "position"]);
}

#[test]
fn plain_shader_matches_latest_main_witness() {
    use sha2::{Digest, Sha256};
    assert_eq!(
        Sha256::digest(include_bytes!("../src/flow.wgsl"))
            .iter()
            .map(|byte| format!("{byte:02x}"))
            .collect::<String>(),
        "4621d557c133a6cd8e73569f1797cb3d7619dc1260416b5078afe7f651e8b548"
    );
}