vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
use std::str::FromStr;

use crate::meta::observe::{render_chrome, render_flamegraph, render_human, TraceFormat};

use super::sample_trace;

#[test]
fn parses_every_declared_trace_format() {
    assert_eq!(TraceFormat::from_str("none"), Ok(TraceFormat::None));
    assert_eq!(TraceFormat::from_str("human"), Ok(TraceFormat::Human));
    assert_eq!(TraceFormat::from_str("chrome"), Ok(TraceFormat::Chrome));
    assert_eq!(
        TraceFormat::from_str("flamegraph"),
        Ok(TraceFormat::Flamegraph)
    );
}

#[test]
fn renders_human_table_with_layer_op_verdict_and_duration() {
    let rendered = render_human(&sample_trace());
    assert!(rendered.contains("layer op verdict duration_us"));
    assert!(rendered.contains("L1"));
    assert!(rendered.contains("primitive.bitwise.xor"));
    assert!(rendered.contains("pass"));
}

#[test]
fn renders_chrome_trace_events_json() {
    let rendered = render_chrome(&sample_trace()).expect("chrome trace should render");
    let parsed: serde_json::Value =
        serde_json::from_str(&rendered).expect("chrome trace should be valid JSON");
    assert!(parsed["traceEvents"].is_array());
    assert_eq!(parsed["traceEvents"][0]["ph"], "X");
}

#[test]
fn renders_inferno_folded_stack_lines() {
    let rendered = render_flamegraph(&sample_trace());
    assert!(rendered.contains("vyre_conform.enforce_all;L1:primitive.bitwise.xor 25"));
}