//! Phase-1-Meilenstein: der komplette Kompatibilitäts-Testkorpus
//! (tests/compat/*.bas) muss fehlerfrei parsen und typgeprüft werden.

use std::fs;
use std::path::Path;

#[test]
fn korpus_parst_und_wird_typgeprueft() {
    let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../tests/compat");
    let mut checked = 0;
    for entry in fs::read_dir(&dir).expect("tests/compat fehlt") {
        let path = entry.unwrap().path();
        if path.extension().and_then(|e| e.to_str()) != Some("bas") {
            continue;
        }
        let name = path.file_name().unwrap().to_string_lossy().to_string();
        let src = fs::read_to_string(&path).unwrap();
        let analysis = tb_frontend::analyze_source(&name, &src);
        assert!(
            analysis.diagnostics.is_empty(),
            "{name}: {:?}",
            analysis.diagnostics
        );
        // Phase 2: diagnose-freie Module liefern ein vollständiges HIR
        // (Hauptprogramm vorhanden, Codegen-fähig ohne erneute Auflösung).
        let hir = analysis.hir.unwrap_or_else(|| panic!("{name}: HIR fehlt"));
        assert!(!hir.procs.is_empty(), "{name}: HIR ohne Hauptprogramm");
        assert!(
            !hir.procs[0].body.is_empty(),
            "{name}: leerer HIR-Hauptrumpf"
        );
        checked += 1;
    }
    assert!(checked >= 5, "zu wenige Korpusdateien gefunden: {checked}");
}
