use obadh_engine::{ObadhEngine, PhoneticUnitType, Tokenizer};
#[test]
fn test_basic_conjunct_formation() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("kk");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::Conjunct);
assert_eq!(units[0].text, "k,,k");
let units = tokenizer.tokenize_word("ks");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::Conjunct);
assert_eq!(units[0].text, "k,,s");
}
#[test]
fn test_explicit_conjunct_formation() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("k,,k");
assert!(!units.is_empty());
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::Conjunct);
}
#[test]
fn test_multi_letter_conjunct_formation() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("ndr");
assert!(!units.is_empty());
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::Conjunct);
let units = tokenizer.tokenize_word("ntrk");
assert!(!units.is_empty());
assert_eq!(units.len(), 2);
assert_eq!(units[0].unit_type, PhoneticUnitType::Conjunct);
assert_eq!(units[0].text, "n,,t,,r");
assert_eq!(units[1].unit_type, PhoneticUnitType::Consonant);
assert_eq!(units[1].text, "k");
}
#[test]
fn test_conjunct_with_vowel() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("kkA");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConjunctWithVowel);
let units = tokenizer.tokenize_word("kkO");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConjunctWithVowel);
}
#[test]
fn test_conjunct_with_terminator() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("kko");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConjunctWithTerminator);
}
#[test]
fn test_complex_conjunct_sequences() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("kkk");
assert_eq!(units.len(), 2);
assert_eq!(units[0].unit_type, PhoneticUnitType::Conjunct);
assert_eq!(units[0].text, "k,,k");
assert_eq!(units[1].unit_type, PhoneticUnitType::Consonant);
assert_eq!(units[1].text, "k");
let units = tokenizer.tokenize_word("nkkO");
assert_eq!(units.len(), 2);
assert_eq!(units[0].unit_type, PhoneticUnitType::Consonant);
assert_eq!(units[0].text, "n");
assert_eq!(units[1].unit_type, PhoneticUnitType::ConjunctWithVowel);
}
#[test]
fn test_comparison_auto_and_explicit_conjuncts() {
let tokenizer = Tokenizer::new();
let auto_units = tokenizer.tokenize_word("kk");
let explicit_units = tokenizer.tokenize_word("k,,k");
assert_eq!(auto_units.len(), 1);
assert_eq!(explicit_units.len(), 1);
assert_eq!(auto_units[0].unit_type, PhoneticUnitType::Conjunct);
assert_eq!(explicit_units[0].unit_type, PhoneticUnitType::Conjunct);
}
#[test]
fn test_consonant_with_conjunct_sequences() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("kkO");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConjunctWithVowel);
assert_eq!(units[0].text, "k,,kO");
let units = tokenizer.tokenize_word("kko");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConjunctWithTerminator);
assert_eq!(units[0].text, "k,,ko");
}
#[test]
fn test_vocalic_r() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("krri");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConsonantWithVowel);
assert_eq!(units[0].text, "krri");
let units = tokenizer.tokenize_word("krriShi");
assert_eq!(units.len(), 2);
assert_eq!(units[0].unit_type, PhoneticUnitType::ConsonantWithVowel);
assert_eq!(units[0].text, "krri");
assert!(
units[1].unit_type == PhoneticUnitType::ConsonantWithVowel
|| units[1].unit_type == PhoneticUnitType::ConjunctWithVowel
);
assert_eq!(units[1].text, "Shi");
}
#[test]
fn test_reph_over_consonant() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("rrm");
assert_eq!(units.len(), 1);
assert_eq!(units[0].unit_type, PhoneticUnitType::RephOverConsonant);
assert_eq!(units[0].text, "rrm");
let units = tokenizer.tokenize_word("korrm");
assert_eq!(units.len(), 2);
assert_eq!(
units[0].unit_type,
PhoneticUnitType::ConsonantWithTerminator
);
assert_eq!(units[0].text, "ko");
assert_eq!(units[1].unit_type, PhoneticUnitType::RephOverConsonant);
assert_eq!(units[1].text, "rrm");
}
#[test]
fn test_reph_over_consonant_with_vowel() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("rrmi");
assert_eq!(units.len(), 1);
assert_eq!(
units[0].unit_type,
PhoneticUnitType::RephOverConsonantWithVowel
);
assert_eq!(units[0].text, "rrmi");
let units = tokenizer.tokenize_word("korrmO");
assert_eq!(units.len(), 2);
assert_eq!(
units[0].unit_type,
PhoneticUnitType::ConsonantWithTerminator
);
assert_eq!(units[0].text, "ko");
assert_eq!(
units[1].unit_type,
PhoneticUnitType::RephOverConsonantWithVowel
);
assert_eq!(units[1].text, "rrmO");
}
#[test]
fn test_reph_over_consonant_with_terminator() {
let tokenizer = Tokenizer::new();
let units = tokenizer.tokenize_word("rrmo");
assert_eq!(units.len(), 1);
assert_eq!(
units[0].unit_type,
PhoneticUnitType::RephOverConsonantWithTerminator
);
assert_eq!(units[0].text, "rrmo");
let units = tokenizer.tokenize_word("korrmo");
assert_eq!(units.len(), 2);
assert_eq!(
units[0].unit_type,
PhoneticUnitType::ConsonantWithTerminator
);
assert_eq!(units[0].text, "ko");
assert_eq!(
units[1].unit_type,
PhoneticUnitType::RephOverConsonantWithTerminator
);
assert_eq!(units[1].text, "rrmo");
let engine = ObadhEngine::new();
assert_eq!(engine.transliterate("rrmo korrmo"), "র্ম কর্ম");
}
#[test]
fn test_comparison_normal_and_reph() {
let tokenizer = Tokenizer::new();
let normal_units = tokenizer.tokenize_word("karma");
let reph_units = tokenizer.tokenize_word("korrmo");
assert_eq!(normal_units.len(), 3);
assert_eq!(
normal_units[0].unit_type,
PhoneticUnitType::ConsonantWithVowel
);
assert_eq!(normal_units[0].text, "ka");
assert_eq!(normal_units[1].unit_type, PhoneticUnitType::Consonant);
assert_eq!(normal_units[1].text, "r");
assert_eq!(
normal_units[2].unit_type,
PhoneticUnitType::ConsonantWithVowel
);
assert_eq!(normal_units[2].text, "ma");
assert_eq!(reph_units.len(), 2);
assert_eq!(
reph_units[0].unit_type,
PhoneticUnitType::ConsonantWithTerminator
);
assert_eq!(reph_units[0].text, "ko");
assert_eq!(
reph_units[1].unit_type,
PhoneticUnitType::RephOverConsonantWithTerminator
);
assert_eq!(reph_units[1].text, "rrmo");
}