miyagi 0.1.2

Sparse XOR adaptation and search for true binary GGUF language models
use std::path::PathBuf;
use std::process::Command;

fn binary() -> Command {
    Command::new(env!("CARGO_BIN_EXE_miyagi"))
}

#[test]
fn help_lists_the_operational_commands() {
    let output = binary().arg("--help").output().unwrap();
    assert!(output.status.success());
    let text = String::from_utf8_lossy(&output.stdout);
    for command in [
        "inspect",
        "info",
        "compose",
        "eval",
        "apply",
        "search",
        "benchmark",
    ] {
        assert!(text.contains(command), "missing {command} in help: {text}");
    }
}

#[test]
fn info_reads_checked_in_legacy_patch_without_a_model() {
    let patch = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("patches/patch_math_v1.json");
    let output = binary()
        .args(["--json", "info", "--patch"])
        .arg(patch)
        .output()
        .unwrap();
    assert!(
        output.status.success(),
        "{}",
        String::from_utf8_lossy(&output.stderr)
    );
    let report: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
    assert_eq!(report["patch"]["format"], "miyagi_row_xor_v1");
    assert_eq!(report["patch"]["flips"].as_array().unwrap().len(), 72);
}