use relon_codegen_llvm::LlvmAotEvaluator;
const UNICODE_SRCS: &[(&str, &str)] = &[
("upper", "#main(String s) -> String\ns.upper()"),
("lower", "#main(String s) -> String\ns.lower()"),
("title", "#main(String s) -> String\ns.title()"),
("nfd", "#main(String s) -> String\ns.nfd()"),
("nfc", "#main(String s) -> String\ns.nfc()"),
("nfkd", "#main(String s) -> String\ns.nfkd()"),
("nfkc", "#main(String s) -> String\ns.nfkc()"),
(
"upper_locale",
"#main(String s) -> String\ns.upper_locale(\"tr\")",
),
(
"lower_locale",
"#main(String s) -> String\ns.lower_locale(\"tr\")",
),
(
"title_locale",
"#main(String s) -> String\ns.title_locale(\"tr\")",
),
];
const UNICODE_SEAM_MARKER: &str = "Phase 0b unicode seam";
#[test]
fn unicode_table_addr_ops_no_longer_hit_the_phase0b_seam() {
for (name, src) in UNICODE_SRCS {
match LlvmAotEvaluator::from_source(src) {
Ok(_) => {
}
Err(e) => {
let msg = format!("{e:?}");
assert!(
!msg.contains(UNICODE_SEAM_MARKER),
"`{name}` build hit the Unicode `*TableAddr` Phase-0b \
seam, which Phase 0b was supposed to fill. The \
`*TableAddr` lowering must handle the op rather than \
return the stub error.\n error: {msg}"
);
}
}
}
}