use super::VowelClassifier;
#[derive(Debug, Clone, Copy, Default)]
pub struct BengaliClassifier;
impl BengaliClassifier {
pub fn new() -> Self {
Self
}
}
static BENGALI_VOWELS: &[char] = &[
'অ', 'আ', 'ই', 'ঈ', 'উ', 'ঊ', 'ঋ', 'এ', 'ঐ', 'ও', 'ঔ', 'া', 'ি', 'ী', 'ু', 'ূ', 'ৃ', 'ে', 'ৈ', 'ো', 'ৌ', ];
impl VowelClassifier for BengaliClassifier {
fn is_vowel(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0985..=0x0994 => true,
0x09BE..=0x09CC => true,
0x09E0..=0x09E3 => true,
_ => false,
}
}
fn script_name(&self) -> &'static str {
"Bengali"
}
fn vowels(&self) -> &[char] {
BENGALI_VOWELS
}
fn is_consonant(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0995..=0x09B9 => true,
0x09DC..=0x09DF => true,
0x09CD => false,
0x0981..=0x0983 => false,
_ => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_independent_vowels() {
let c = BengaliClassifier::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_dependent_vowels() {
let c = BengaliClassifier::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_consonants() {
let c = BengaliClassifier::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_is_consonant() {
let c = BengaliClassifier::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_special_consonants() {
let c = BengaliClassifier::new();
assert!(c.is_consonant('\u{09A1}')); assert!(c.is_consonant('\u{09A2}')); assert!(c.is_consonant('\u{09AF}')); assert!(!c.is_consonant('\u{09BC}')); }
#[test]
fn test_hasanta_not_vowel() {
let c = BengaliClassifier::new();
assert!(!c.is_vowel('্')); assert!(!c.is_consonant('্')); }
#[test]
fn test_diacritics() {
let c = BengaliClassifier::new();
assert!(!c.is_vowel('ঁ')); assert!(!c.is_vowel('ং')); assert!(!c.is_vowel('ঃ')); assert!(!c.is_consonant('ঁ'));
assert!(!c.is_consonant('ং'));
assert!(!c.is_consonant('ঃ'));
}
}