fn verify_all_upper_or_all_lower_or_is_capitalized(word: &str) -> bool {
let mut upper = 0;
let mut lower = 0;
for ch in word.chars() {
if ch.is_ascii_lowercase() {
lower += 1;
} else if ch.is_ascii_uppercase() {
upper += 1;
}
}
// Case 1: all lowercase
if upper == 0 {
return true;
}
// Case 2: all uppercase
if lower == 0 {
return true;
}
// Case 3: capitalized (only first letter uppercase)
if upper == 1 && word.chars().next().map_or(false, |c| c.is_ascii_uppercase()) {
return true;
}
// Otherwise, mixed casing
false
}
fn run_test(word: &str) {
println!("Testing word: \"{}\"", word);
if verify_all_upper_or_all_lower_or_is_capitalized(word) {
println!("OK\n");
} else {
println!("Error\n");
}
}
fn main() {
run_test("PROGRAMMING");
run_test("programming");
run_test("Programming");
run_test("ProGramMing");
}
/*
run:
Testing word: "PROGRAMMING"
OK
Testing word: "programming"
OK
Testing word: "Programming"
OK
Testing word: "ProGramMing"
Error
*/