kana_transliteration: fix k->h , add more tests
Build and test / build-dynamic-library (push) Successful in 48s
Build and test / check (push) Failing after 47s
Build and test / build-static-library (push) Successful in 49s
Build and test / test (push) Successful in 55s

This commit is contained in:
2026-06-04 16:09:11 +09:00
parent b78c642a45
commit e0b413383c
+67 -10
View File
@@ -115,7 +115,7 @@ fn katakana_vowel_map(katakana: char) -> Option<char> {
// - Halfwidth and Fullwidth Forms: https://www.unicode.org/charts/PDF/UFF00.pdf
pub fn transliterate_katakana_to_hiragana(katakana: &str) -> String {
let first_pass = transpose_codepoints_in_range(katakana, -96, ''.into(), 'ヶ'.into());
let first_pass = transpose_codepoints_in_range(katakana, -96, ''.into(), 'ヶ'.into());
// TODO: don't create a new result, just mutate the first pass in-place.
let chars = first_pass.chars().collect::<Vec<_>>();
@@ -458,11 +458,44 @@ pub fn transliterate_fullwidth_katakana_to_halfwidth_katakana(fullwidth: &str) -
mod tests {
use super::*;
// KATAKANA TO HIRAGANA
#[test]
fn test_katakana_to_hiragana() {
assert_eq!(transliterate_katakana_to_hiragana("カタカナ"), "かたかな");
}
#[test]
fn test_katakana_to_hiragana_with_dakuten() {
assert_eq!(
transliterate_katakana_to_hiragana("ガダガナピ"),
"がだがなぴ"
);
}
#[test]
fn test_katakana_to_hiragana_with_small_tsu() {
assert_eq!(transliterate_katakana_to_hiragana("ハッパ"), "はっぱ");
}
#[test]
fn test_katakana_to_hiragana_with_small_aiueo() {
assert_eq!(
transliterate_katakana_to_hiragana("ハァヒィフゥヘェホォ"),
"はぁひぃふぅへぇほぉ"
);
}
#[test]
fn test_katakana_to_hiragana_with_small_ka_ke() {
assert_eq!(transliterate_katakana_to_hiragana("カヵヶ"), "かゕゖ");
}
#[test]
fn test_katakana_to_hiragana_wi_we() {
assert_eq!(transliterate_katakana_to_hiragana("ヰヱ"), "ゐゑ");
}
#[test]
fn test_katakana_to_hiragana_long_vocal_to_dash() {
assert_eq!(
@@ -503,14 +536,41 @@ mod tests {
assert_eq!(transliterate_katakana_to_hiragana("サヾーエ"), "さゞあえ");
}
#[test]
fn test_katakana_to_hiragana_wi_we() {
assert_eq!(transliterate_katakana_to_hiragana("ヰヱ"), "ゐゑ");
}
// HIRAGANA TO KATAKANA
#[test]
fn test_hiragana_to_katakana() {
assert_eq!(transliterate_hiragana_to_katakana("ひら"), "ヒラ");
assert_eq!(transliterate_hiragana_to_katakana("ひら"), "ヒラ");
}
#[test]
fn test_hiragana_to_katakana_with_dakuten() {
assert_eq!(
transliterate_hiragana_to_katakana("がだがなぴ"),
"ガダガナピ"
);
}
#[test]
fn test_hiragana_to_katakana_with_small_tsu() {
assert_eq!(transliterate_hiragana_to_katakana("はっぱ"), "ハッパ");
}
#[test]
fn test_hiragana_to_katakana_with_small_aiueo() {
assert_eq!(
transliterate_hiragana_to_katakana("はぁひぃふぅへぇほぉ"),
"ハァヒィフゥヘェホォ"
);
}
#[test]
fn test_hiragana_to_katakana_with_small_ka_ke() {
assert_eq!(transliterate_hiragana_to_katakana("かゕゖ"), "カヵヶ");
}
#[test]
fn test_hiragana_to_katakana_wi_we() {
assert_eq!(transliterate_hiragana_to_katakana("ゐゑ"), "ヰヱ");
}
#[test]
@@ -529,10 +589,7 @@ mod tests {
);
}
#[test]
fn test_hiragana_to_katakana_wi_we() {
assert_eq!(transliterate_hiragana_to_katakana("ゐゑ"), "ヰヱ");
}
/// FULLWIDTH/HALFWIDTH
#[test]
fn test_fullwidth_romaji_to_halfwidth_romaji() {