From e0b413383cb876153f76dd262c53cbbba1bfac09 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Thu, 4 Jun 2026 16:09:11 +0900 Subject: [PATCH] kana_transliteration: fix k->h , add more tests --- src/kana_transliteration.rs | 77 ++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/src/kana_transliteration.rs b/src/kana_transliteration.rs index a01f317..645a80f 100644 --- a/src/kana_transliteration.rs +++ b/src/kana_transliteration.rs @@ -115,7 +115,7 @@ fn katakana_vowel_map(katakana: char) -> Option { // - 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::>(); @@ -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() {