use xmlschema::pattern::Pattern;
fn main() {
let part_number = Pattern::compile("[A-Z]{2}-[0-9]{4}[A-Z]?")
.expect("a well-formed pattern");
println!("pattern: {}", part_number.source());
assert_eq!(part_number.source(), "[A-Z]{2}-[0-9]{4}[A-Z]?");
for value in ["XY-0042", "AB-1234C"] {
println!("{value}: {}", part_number.matches(value));
assert!(part_number.matches(value));
}
println!("`part XY-0042`: {}", part_number.matches("part XY-0042"));
assert!(!part_number.matches("part XY-0042"));
assert!(
!part_number.matches("xy-0042"),
"the character classes are upper case"
);
assert!(
!part_number.matches("XY-042"),
"the digit count is exact, not a minimum"
);
let bad = Pattern::compile("[A-Z");
println!("`[A-Z`: {bad:?}");
assert!(bad.is_err());
}