use uor_addr::xml::{address, canonicalize, AddressFailure};
fn main() {
println!("uor-addr — XML realization (W3C XML-C14N 1.1 subset)\n");
let outcome = address(b"<root/>").expect("κ-label");
println!("1. Basic minting");
println!(" raw: <root/>");
println!(" κ-label: {}\n", outcome.address);
let a = address(b"<doc><child/></doc>").expect("κ-label").address;
let b = address(b"<doc><child/></doc>").expect("κ-label").address;
assert_eq!(a, b);
println!("2. Determinism");
println!(" <doc><child/></doc> κ-label (run 1): {a}");
println!(" <doc><child/></doc> κ-label (run 2): {b}");
println!(" match: {}\n", a == b);
let attr_ascending = address(br#"<el a="1" b="2" c="3"/>"#)
.expect("κ-label")
.address;
let attr_reversed = address(br#"<el c="3" b="2" a="1"/>"#)
.expect("κ-label")
.address;
assert_eq!(attr_ascending, attr_reversed);
println!("3. Attribute-order invariance (§1.1 rule 3)");
println!(" <el a=\"1\" b=\"2\" c=\"3\"/> κ-label: {attr_ascending}");
println!(" <el c=\"3\" b=\"2\" a=\"1\"/> κ-label: {attr_reversed}");
println!(" match: {}\n", attr_ascending == attr_reversed);
let cdata = address(b"<r><![CDATA[<v>]]></r>").expect("κ-label").address;
let escaped = address(b"<r><v></r>").expect("κ-label").address;
assert_eq!(cdata, escaped);
println!("4. CDATA-to-Text collapse (§1.1)");
println!(" <r><![CDATA[<v>]]></r> κ-label: {cdata}");
println!(" <r><v></r> κ-label: {escaped}");
println!(" match: {}\n", cdata == escaped);
let canon = canonicalize(br#"<el b="2" a="1" />"#).expect("valid");
println!("5. Canonical-form output");
println!(" raw: <el b=\"2\" a=\"1\" />");
println!(
" canonical: {}",
core::str::from_utf8(&canon).unwrap_or("<binary>")
);
println!();
let elem = address(b"<a/>").expect("κ-label").address;
let text = address(b"<a>x</a>").expect("κ-label").address;
let nested = address(b"<a><b/></a>").expect("κ-label").address;
assert_ne!(elem, text);
assert_ne!(elem, nested);
assert_ne!(text, nested);
println!("6. Typed distinction");
println!(" <a/> → {elem}");
println!(" <a>x</a> → {text}");
println!(" <a><b/></a> → {nested}");
println!();
println!("7. Failure modes");
match address(b"<a></b>") {
Err(AddressFailure::InvalidXml) => {
println!(" mismatched-close-tag rejected as InvalidXml ✓")
}
other => panic!("expected InvalidXml: {other:?}"),
}
match address(b"not-xml") {
Err(AddressFailure::InvalidXml) => println!(" non-XML input rejected as InvalidXml ✓"),
other => panic!("expected InvalidXml: {other:?}"),
}
println!("\nOK — XML realization conforms to W3C XML-C14N 1.1 (subset).");
}