forked from greyblake/whatlang-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cyrillic.rs
87 lines (70 loc) · 2.42 KB
/
cyrillic.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use super::RawOutcome;
use crate::alphabets::generic;
use crate::core::{FilterList, LowercaseText};
use crate::Script;
pub fn alphabet_calculate_scores(text: &LowercaseText, filter_list: &FilterList) -> RawOutcome {
let all_langs = Script::Cyrillic.langs();
generic::alphabet_calculate_scores_generic(text, filter_list, all_langs)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::Lang;
fn fetch<T: Copy>(lang: &Lang, scores: &[(Lang, T)]) -> T {
scores.iter().find(|(l, _)| l == lang).unwrap().1
}
#[test]
fn test_when_latin_is_given() {
let cyrillic_langs: &[Lang] = Script::Cyrillic.langs();
let text = LowercaseText::new("Foobar, hoh");
let RawOutcome {
count,
raw_scores,
scores,
} = alphabet_calculate_scores(&text, &FilterList::default());
assert_eq!(count, 0);
assert_eq!(raw_scores.len(), cyrillic_langs.len());
assert_eq!(scores.len(), cyrillic_langs.len());
for lang in cyrillic_langs {
let raw_score = fetch(lang, &raw_scores);
assert_eq!(raw_score, 0);
}
for lang in cyrillic_langs {
let score = fetch(lang, &scores);
assert_eq!(score, 0.0);
}
}
#[test]
fn test_when_common_cyrllic_is_given() {
let cyrillic_langs: &[Lang] = Script::Cyrillic.langs();
let text = LowercaseText::new("абвг ww");
let RawOutcome {
count,
raw_scores,
scores,
} = alphabet_calculate_scores(&text, &FilterList::default());
assert_eq!(count, 4);
for lang in cyrillic_langs {
let raw_score = fetch(lang, &raw_scores);
assert_eq!(raw_score, 4);
}
for lang in cyrillic_langs {
let score = fetch(lang, &scores);
assert_eq!(score, 1.0);
}
}
#[test]
fn test_when_ukrainian_specific_chars_given() {
let text = LowercaseText::new("Дуже цікаво");
let RawOutcome {
count,
raw_scores,
scores,
} = alphabet_calculate_scores(&text, &FilterList::default());
assert_eq!(count, 10);
assert_eq!(fetch(&Lang::Ukr, &raw_scores), 10);
assert_eq!(fetch(&Lang::Rus, &raw_scores), 8);
assert_eq!(fetch(&Lang::Ukr, &scores), 1.0);
assert_eq!(fetch(&Lang::Rus, &scores), 0.8);
}
}