use super::VowelClassifier;
#[derive(Debug, Clone, Copy, Default)]
pub struct TamilClassifier;
impl TamilClassifier {
pub fn new() -> Self {
Self
}
}
static TAMIL_VOWELS: &[char] = &[
'அ', 'ஆ', 'இ', 'ஈ', 'உ', 'ஊ', 'எ', 'ஏ', 'ஐ', 'ஒ', 'ஓ', 'ஔ', 'ா', 'ி', 'ீ', 'ு', 'ூ', 'ெ', 'ே', 'ை', 'ொ', 'ோ', 'ௌ', ];
impl VowelClassifier for TamilClassifier {
fn is_vowel(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0B85..=0x0B94 => true,
0x0BBE..=0x0BC8 => true, 0x0BCA..=0x0BCC => true,
0x0BD7 => true,
_ => false,
}
}
fn script_name(&self) -> &'static str {
"Tamil"
}
fn vowels(&self) -> &[char] {
TAMIL_VOWELS
}
fn is_consonant(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0B95 => true, 0x0B99 => true, 0x0B9A => true, 0x0B9C => true, 0x0B9E => true, 0x0B9F => true, 0x0BA3 => true, 0x0BA4 => true, 0x0BA8 => true, 0x0BAA => true, 0x0BAE => true, 0x0BAF => true, 0x0BB0 => true, 0x0BB1 => true, 0x0BB2 => true, 0x0BB3 => true, 0x0BB4 => true, 0x0BB5 => true, 0x0BB6 => true, 0x0BB7 => true, 0x0BB8 => true, 0x0BB9 => true, 0x0BA9 => true,
0x0BCD => false,
0x0B82..=0x0B83 => false,
_ => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_independent_vowels() {
let c = TamilClassifier::new();
assert!(c.is_vowel('அ')); assert!(c.is_vowel('ஆ')); assert!(c.is_vowel('இ')); assert!(c.is_vowel('ஈ')); assert!(c.is_vowel('உ')); assert!(c.is_vowel('ஊ')); assert!(c.is_vowel('எ')); assert!(c.is_vowel('ஏ')); assert!(c.is_vowel('ஐ')); assert!(c.is_vowel('ஒ')); assert!(c.is_vowel('ஓ')); assert!(c.is_vowel('ஔ')); }
#[test]
fn test_dependent_vowels() {
let c = TamilClassifier::new();
assert!(c.is_vowel('ா')); assert!(c.is_vowel('ி')); assert!(c.is_vowel('ீ')); assert!(c.is_vowel('ு')); assert!(c.is_vowel('ூ')); assert!(c.is_vowel('ெ')); assert!(c.is_vowel('ே')); assert!(c.is_vowel('ை')); }
#[test]
fn test_native_consonants() {
let c = TamilClassifier::new();
assert!(!c.is_vowel('க')); assert!(!c.is_vowel('ங')); assert!(!c.is_vowel('ச')); assert!(!c.is_vowel('ட')); assert!(!c.is_vowel('த')); assert!(!c.is_vowel('ப')); assert!(!c.is_vowel('ம')); assert!(!c.is_vowel('ய')); assert!(!c.is_vowel('ர')); assert!(!c.is_vowel('ல')); assert!(!c.is_vowel('வ')); }
#[test]
fn test_unique_tamil_consonants() {
let c = TamilClassifier::new();
assert!(!c.is_vowel('ழ')); assert!(!c.is_vowel('ற')); assert!(!c.is_vowel('ன')); assert!(!c.is_vowel('ள')); }
#[test]
fn test_grantha_consonants() {
let c = TamilClassifier::new();
assert!(!c.is_vowel('ஜ')); assert!(!c.is_vowel('ஶ')); assert!(!c.is_vowel('ஷ')); assert!(!c.is_vowel('ஸ')); assert!(!c.is_vowel('ஹ')); }
#[test]
fn test_is_consonant() {
let c = TamilClassifier::new();
assert!(c.is_consonant('க')); assert!(c.is_consonant('த')); assert!(c.is_consonant('ம')); assert!(c.is_consonant('ழ')); assert!(c.is_consonant('ற')); assert!(c.is_consonant('ன')); }
#[test]
fn test_virama_not_vowel() {
let c = TamilClassifier::new();
assert!(!c.is_vowel('்')); assert!(!c.is_consonant('்')); }
#[test]
fn test_diacritics() {
let c = TamilClassifier::new();
assert!(!c.is_vowel('ஂ')); assert!(!c.is_vowel('ஃ')); assert!(!c.is_consonant('ஂ'));
assert!(!c.is_consonant('ஃ'));
}
}