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

nordisk/gunnar

crates/gunnar-recipe/tests/dev_media_profile.rs

//! ★ **DEV media build fast, release media build whole** (owner 2026-10-12: "full LTO only for
//! release media"). The `*-narrate` variants — test2's and the mock's media, never a release —
//! build with `[profile.dev-media]` (release's optimisation level, codegen-units 16, no LTO).
//! MEASURED on dwarf, `gunnar-server-narrate` after a touch of gunnar-server: release 194 s,
//! dev-media 112 s. Every other variant keeps its own profile.

use gunnar_recipe::variants::VARIANTS;

#[test]
fn the_narrate_variants_build_dev_media_and_nothing_else_does() {
    let narrate: Vec<_> = VARIANTS
        .iter()
        .filter(|v| v.name.ends_with("-narrate"))
        .collect();
    assert!(!narrate.is_empty());
    for v in &narrate {
        assert_eq!(
            v.profile, "dev-media",
            "{} is a DEV medium's binary",
            v.name
        );
    }
    for v in VARIANTS.iter().filter(|v| !v.name.ends_with("-narrate")) {
        assert_ne!(
            v.profile, "dev-media",
            "{} is not a dev medium's binary",
            v.name
        );
    }
    let cargo =
        std::fs::read_to_string(concat!(env!("CARGO_MANIFEST_DIR"), "/../../Cargo.toml")).unwrap();
    let block = |name: &str| -> String {
        cargo
            .split(&format!("[profile.{name}]\n"))
            .nth(1)
            .map(|b| b.split("\n[").next().unwrap_or("").to_string())
            .unwrap_or_default()
    };
    let dm = block("dev-media");
    for line in [
        "inherits = \"release\"",
        "lto = false",
        "codegen-units = 16",
    ] {
        assert!(
            dm.lines().any(|l| l.trim() == line),
            "[profile.dev-media] says {line}: {dm}"
        );
    }
    assert!(
        block("release")
            .lines()
            .any(|l| l.trim() == "lto = \"thin\""),
        "release keeps its LTO"
    );
}