// These and the below tests are taken from StringCaseTest::TestCaseConversion in ICU4C. #[test] fn test_full_mappings() { let case_mapping = CaseMapper::new(); let root = langid!("und"); let tr = langid!("tr"); let lt = langid!("lt");
let lowercase_turkish_1 = "istanbul, not constantınople"; let uppercase_turkish_1 = "İSTANBUL, NOT CONSTANTINOPLE";
assert_eq!(
case_mapping.lowercase_to_string(uppercase_turkish_1, &root), "i\u{307}stanbul, not constantinople"
);
assert_eq!(
case_mapping.lowercase_to_string(uppercase_turkish_1, &tr),
lowercase_turkish_1
);
let initial_german = "Süßmayrstraße"; let uppercase_german = "SÜSSMAYRSTRASSE";
assert_eq!(
case_mapping.uppercase_to_string(initial_german, &root),
uppercase_german
);
let before = "aBIΣßΣ/\u{5ffff}"; let after = "abiσßς/\u{5ffff}"; let after_turkish = "abıσßς/\u{5ffff}";
assert_eq!(case_mapping.lowercase_to_string(before, &root), after);
assert_eq!(case_mapping.lowercase_to_string(before, &tr), after_turkish);
let before = "aBiςßσ/\u{fb03}\u{fb03}\u{fb03}\u{5ffff}"; let after = "ABIΣSSΣ/FFIFFIFFI\u{5ffff}"; let after_turkish = "ABİΣSSΣ/FFIFFIFFI\u{5ffff}";
assert_eq!(case_mapping.uppercase_to_string(before, &root), after);
assert_eq!(case_mapping.uppercase_to_string(before, &tr), after_turkish);
let before = "ßa"; let after = "SSA";
assert_eq!(case_mapping.uppercase_to_string(before, &root), after);
let initial_deseret = "\u{1043c}\u{10414}"; let upper_deseret = "\u{10414}\u{10414}"; let lower_deseret = "\u{1043c}\u{1043c}";
assert_eq!(
case_mapping.uppercase_to_string(initial_deseret, &root),
upper_deseret
);
assert_eq!(
case_mapping.lowercase_to_string(initial_deseret, &root),
lower_deseret
);
// lj ligature let initial_ligature = "\u{1c7}\u{1c8}\u{1c9}"; let lower_ligature = "\u{1c9}\u{1c9}\u{1c9}"; let upper_ligature = "\u{1c7}\u{1c7}\u{1c7}";
assert_eq!(
case_mapping.uppercase_to_string(initial_ligature, &root),
upper_ligature
);
assert_eq!(
case_mapping.lowercase_to_string(initial_ligature, &root),
lower_ligature
);
// Sigmas preceded and/or followed by cased letters let initial_sigmas = "i\u{307}\u{3a3}\u{308}j \u{307}\u{3a3}\u{308}j i\u{ad}\u{3a3}\u{308} \u{307}\u{3a3}\u{308}"; let lower_sigmas = "i\u{307}\u{3c3}\u{308}j \u{307}\u{3c3}\u{308}j i\u{ad}\u{3c2}\u{308} \u{307}\u{3c3}\u{308}"; let upper_sigmas = "I\u{307}\u{3a3}\u{308}J \u{307}\u{3a3}\u{308}J I\u{ad}\u{3a3}\u{308} \u{307}\u{3a3}\u{308}";
assert_eq!(
case_mapping.uppercase_to_string(initial_sigmas, &root),
upper_sigmas
);
assert_eq!(
case_mapping.lowercase_to_string(initial_sigmas, &root),
lower_sigmas
);
// Turkish & Azerbaijani dotless i & dotted I: // Remove dot above if there was a capital I before and there are no more accents above. let initial_dots = "I İ I\u{307} I\u{327}\u{307} I\u{301}\u{307} I\u{327}\u{307}\u{301}"; let after = "i i\u{307} i\u{307} i\u{327}\u{307} i\u{301}\u{307} i\u{327}\u{307}\u{301}"; let after_turkish = "ı i i i\u{327} ı\u{301}\u{307} i\u{327}\u{301}";
assert_eq!(case_mapping.lowercase_to_string(initial_dots, &root), after);
assert_eq!(
case_mapping.lowercase_to_string(initial_dots, &tr),
after_turkish
);
// Lithuanian dot above in uppercasing let initial_dots = "a\u{307} \u{307} i\u{307} j\u{327}\u{307} j\u{301}\u{307}"; let after = "A\u{307} \u{307} I\u{307} J\u{327}\u{307} J\u{301}\u{307}"; let after_lithuanian = "A\u{307} \u{307} I J\u{327} J\u{301}\u{307}";
assert_eq!(case_mapping.uppercase_to_string(initial_dots, &root), after);
assert_eq!(
case_mapping.uppercase_to_string(initial_dots, <),
after_lithuanian
);
// Lithuanian adds dot above to i in lowercasing if there are more above accents let initial_dots = "I I\u{301} J J\u{301} \u{12e} \u{12e}\u{301} \u{cc}\u{cd}\u{128}"; let after = "i i\u{301} j j\u{301} \u{12f} \u{12f}\u{301} \u{ec}\u{ed}\u{129}"; let after_lithuanian = "i i\u{307}\u{301} j j\u{307}\u{301} \u{12f} \u{12f}\u{307}\u{301} i\u{307}\u{300}i\u{307}\u{301}i\u{307}\u{303}";
assert_eq!(case_mapping.lowercase_to_string(initial_dots, &root), after);
assert_eq!(
case_mapping.lowercase_to_string(initial_dots, <),
after_lithuanian
);
// Test case folding let initial = "Aßµ\u{fb03}\u{1040c}İı"; let simple = "assμffi\u{10434}i\u{307}ı"; let turkic = "assμffi\u{10434}iı";
assert_eq!(case_mapping.fold_string(initial), simple);
assert_eq!(case_mapping.fold_turkic_string(initial), turkic);
}
#[test] fn test_armenian() { let cm = CaseMapper::new(); let root = langid!("und"); let east = langid!("hy"); let west = langid!("hyw"); let default_options = Default::default();
// https://unicode-org.atlassian.net/browse/ICU-5456
assert_greek_uppercase("άδικος, κείμενο, ίριδα", "ΑΔΙΚΟΣ, ΚΕΙΜΕΝΟ, ΙΡΙΔΑ"); // https://bugzilla.mozilla.org/show_bug.cgi?id=307039 // https://bug307039.bmoattachments.org/attachment.cgi?id=194893
assert_greek_uppercase("Πατάτα", "ΠΑΤΑΤΑ");
assert_greek_uppercase("Αέρας, Μυστήριο, Ωραίο", "ΑΕΡΑΣ, ΜΥΣΤΗΡΙΟ, ΩΡΑΙΟ");
assert_greek_uppercase("Μαΐου, Πόρος, Ρύθμιση", "ΜΑΪΟΥ, ΠΟΡΟΣ, ΡΥΘΜΙΣΗ");
assert_greek_uppercase("ΰ, Τηρώ, Μάιος", "Ϋ, ΤΗΡΩ, ΜΑΪΟΣ");
assert_greek_uppercase("άυλος", "ΑΫΛΟΣ");
assert_greek_uppercase("ΑΫΛΟΣ", "ΑΫΛΟΣ");
assert_greek_uppercase( "Άκλιτα ρήματα ή άκλιτες μετοχές", "ΑΚΛΙΤΑ ΡΗΜΑΤΑ Ή ΑΚΛΙΤΕΣ ΜΕΤΟΧΕΣ",
); // http://www.unicode.org/udhr/d/udhr_ell_monotonic.html
assert_greek_uppercase( "Επειδή η αναγνώριση της αξιοπρέπειας", "ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ ΤΗΣ ΑΞΙΟΠΡΕΠΕΙΑΣ",
);
assert_greek_uppercase("νομικού ή διεθνούς", "ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ"); // http://unicode.org/udhr/d/udhr_ell_polytonic.html
assert_greek_uppercase("Ἐπειδὴ ἡ ἀναγνώριση", "ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ");
assert_greek_uppercase("νομικοῦ ἢ διεθνοῦς", "ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ"); // From Google bug report
assert_greek_uppercase("Νέο, Δημιουργία", "ΝΕΟ, ΔΗΜΙΟΥΡΓΙΑ"); // http://crbug.com/234797
assert_greek_uppercase( "Ελάτε να φάτε τα καλύτερα παϊδάκια!", "ΕΛΑΤΕ ΝΑ ΦΑΤΕ ΤΑ ΚΑΛΥΤΕΡΑ ΠΑΪΔΑΚΙΑ!",
);
assert_greek_uppercase("Μαΐου, τρόλεϊ", "ΜΑΪΟΥ, ΤΡΟΛΕΪ");
assert_greek_uppercase("Το ένα ή το άλλο.", "ΤΟ ΕΝΑ Ή ΤΟ ΑΛΛΟ."); // http://multilingualtypesetting.co.uk/blog/greek-typesetting-tips/
assert_greek_uppercase("ρωμέικα", "ΡΩΜΕΪΚΑ");
assert_greek_uppercase("ή.", "Ή.");
// The ὑπογεγραμμέναι become Ι as in default case conversion, but they are // specially handled by the implementation.
assert_greek_uppercase("ᾠδή, -ήν, -ῆς, -ῇ", "ΩΙΔΗ, -ΗΝ, -ΗΣ, -ΗΙ");
assert_greek_uppercase("ᾍδης", "ΑΙΔΗΣ");
// Handle breathing marks on rho
assert_greek_uppercase("ῥήματα ῤήματα", "ΡΗΜΑΤΑ ΡΗΜΑΤΑ");
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.