//! 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}"); }