use super::VowelClassifier;
#[derive(Debug, Clone, Copy, Default)]
pub struct GeorgianClassifier;
impl GeorgianClassifier {
pub fn new() -> Self {
Self
}
}
static GEORGIAN_VOWELS: &[char] = &[
'ა', 'ე', 'ი', 'ო', 'უ', ];
impl VowelClassifier for GeorgianClassifier {
fn is_vowel(&self, c: char) -> bool {
let code = c as u32;
match code {
0x10D0 => true, 0x10D4 => true, 0x10D8 => true, 0x10DD => true, 0x10E3 => true,
0x10A0 => true, 0x10A4 => true, 0x10A8 => true, 0x10AD => true, 0x10B3 => true,
0x2D00 => true, 0x2D04 => true, 0x2D08 => true, 0x2D0D => true, 0x2D13 => true,
_ => false,
}
}
fn script_name(&self) -> &'static str {
"Georgian"
}
fn vowels(&self) -> &[char] {
GEORGIAN_VOWELS
}
fn is_consonant(&self, c: char) -> bool {
let code = c as u32;
match code {
0x10D1 => true, 0x10D2 => true, 0x10D3 => true,
0x10D5 => true, 0x10D6 => true, 0x10D7 => true,
0x10D9 => true, 0x10DA => true, 0x10DB => true, 0x10DC => true,
0x10DE => true, 0x10DF => true, 0x10E0 => true, 0x10E1 => true, 0x10E2 => true,
0x10E4 => true, 0x10E5 => true, 0x10E6 => true, 0x10E7 => true, 0x10E8 => true, 0x10E9 => true, 0x10EA => true, 0x10EB => true, 0x10EC => true, 0x10ED => true, 0x10EE => true, 0x10EF => true, 0x10F0 => true,
0x10F1 => true, 0x10F2 => true, 0x10F3 => true, 0x10F4 => true, 0x10F5 => true, 0x10F6 => true,
_ => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_vowels() {
let c = GeorgianClassifier::new();
assert!(c.is_vowel('ა')); assert!(c.is_vowel('ე')); assert!(c.is_vowel('ი')); assert!(c.is_vowel('ო')); assert!(c.is_vowel('უ')); }
#[test]
fn test_consonants_not_vowels() {
let c = GeorgianClassifier::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('ტ')); }
#[test]
fn test_is_consonant() {
let c = GeorgianClassifier::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('ლ')); assert!(c.is_consonant('მ')); assert!(c.is_consonant('ნ')); assert!(c.is_consonant('რ')); assert!(c.is_consonant('ს')); assert!(c.is_consonant('ჰ'));
assert!(c.is_consonant('კ')); assert!(c.is_consonant('პ')); assert!(c.is_consonant('ტ')); assert!(c.is_consonant('ყ')); assert!(c.is_consonant('წ')); 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_sibilants_and_fricatives() {
let c = GeorgianClassifier::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_affricates() {
let c = GeorgianClassifier::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_vowels_not_consonants() {
let c = GeorgianClassifier::new();
assert!(!c.is_consonant('ა')); assert!(!c.is_consonant('ე')); assert!(!c.is_consonant('ი')); assert!(!c.is_consonant('ო')); assert!(!c.is_consonant('უ')); }
#[test]
fn test_script_name() {
let c = GeorgianClassifier::new();
assert_eq!(c.script_name(), "Georgian");
}
}