Files
anagram-generator/tests/analyzer_tests.rs
2025-11-06 22:34:21 +01:00

92 lines
2.9 KiB
Rust

use anagram_generator::{
analyzer::PronounceabilityAnalyzer,
scorer::{CharacterClassifier, ConsonantClusterRules, PronounceabilityScorer},
};
#[test]
fn test_empty_string_scores_zero() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
assert_eq!(analyzer.score("").value(), 0);
}
#[test]
fn test_good_pronounceable_words() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
assert!(analyzer.score("hello").value() > 60);
assert!(analyzer.score("world").value() > 50);
assert!(analyzer.score("create").value() > 60);
}
#[test]
fn test_poor_pronounceable_words() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
assert!(analyzer.score("bcdfg").value() < 50);
assert!(analyzer.score("xzqwk").value() < 50);
}
#[test]
fn test_many_consecutive_consonants() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
assert!(analyzer.score("strngth").value() < 60);
}
#[test]
fn test_character_classification() {
let classifier = CharacterClassifier::default_french();
assert!(classifier.is_vowel('a'));
assert!(classifier.is_vowel('e'));
assert!(classifier.is_vowel('A'));
assert!(!classifier.is_vowel('b'));
assert!(classifier.is_consonant('b'));
assert!(classifier.is_consonant('B'));
}
#[test]
fn test_common_clusters() {
let rules = ConsonantClusterRules::default_french();
assert!(rules.is_common_cluster("th"));
assert!(rules.is_common_cluster("st"));
assert!(rules.is_common_cluster("TH"));
assert!(!rules.is_common_cluster("xz"));
}
#[test]
fn test_alternating_patterns_get_bonus() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
// "banana" has good alternation (b-a-n-a-n-a)
let score_good_alternation = analyzer.score("banana").value();
// "strength" has poor alternation
let score_poor_alternation = analyzer.score("strength").value();
assert!(score_good_alternation > score_poor_alternation);
}
#[test]
fn test_words_starting_with_consonants() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
let score_consonant = analyzer.score("banana").value();
let score_vowel = analyzer.score("ananas").value();
// Words starting with consonants should get a small bonus
assert!(score_consonant >= score_vowel);
}
#[test]
fn test_only_vowels_penalized() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
assert!(analyzer.score("aeiou").value() < 80);
}
#[test]
fn test_no_vowels_heavily_penalized() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
assert!(analyzer.score("bcdfg").value() < 50);
}
#[test]
fn test_common_consonant_clusters_not_penalized() {
let analyzer = PronounceabilityAnalyzer::with_defaults();
// "three" has "th" which is a common cluster
let score_with_common = analyzer.score("three").value();
// Should have a decent score despite consecutive consonants
assert!(score_with_common > 60);
}