git_heckout/
similarity.rs1pub fn sublime(pattern: &str, string: &str) -> isize {
2 sublime_fuzzy::best_match(pattern, string).map_or(0, |result| result.score())
3}
4
5#[cfg(test)]
6mod tests {
7 #[test]
8 fn sublime_substrings_same_score() {
9 assert!(super::sublime("master", "m") == super::sublime("master", "ma"));
11 assert!(super::sublime("master", "ma") == super::sublime("master", "mas"));
12 assert!(super::sublime("master", "mas") == super::sublime("master", "mast"));
13 assert!(super::sublime("master", "mast") == super::sublime("master", "maste"));
14 assert!(super::sublime("masterz", "m") == super::sublime("master", "m"));
16 assert!(super::sublime("masterz", "ma") == super::sublime("master", "ma"));
17 assert!(super::sublime("masterz", "mas") == super::sublime("master", "mas"));
18 assert!(super::sublime("masterz", "mast") == super::sublime("master", "mast"));
19 assert!(super::sublime("masterz", "maste") == super::sublime("master", "maste"));
20 }
21
22 #[test]
23 fn sublime_substrings_lower_than_equal() {
24 assert!(super::sublime("master", "maste") < super::sublime("master", "master"));
26 }
27
28 #[test]
29 fn sublime_substrings_less_than_self_similiarity_even_for_shorter() {
30 assert!(super::sublime("master", "m") < super::sublime("m", "m"));
32 assert!(super::sublime("master", "ma") < super::sublime("ma", "ma"));
33 assert!(super::sublime("master", "mas") < super::sublime("mas", "mas"));
34 assert!(super::sublime("master", "mast") < super::sublime("mast", "mast"));
35 assert!(super::sublime("master", "maste") < super::sublime("maste", "maste"));
36 }
37
38 #[test]
39 fn sublime_self_similiarity_stronger_for_longer_strings() {
40 assert!(super::sublime("m", "m") < super::sublime("ma", "ma"));
42 assert!(super::sublime("ma", "ma") < super::sublime("mas", "mas"));
43 assert!(super::sublime("mas", "mas") < super::sublime("mast", "mast"));
44 assert!(super::sublime("mast", "mast") < super::sublime("maste", "maste"));
45 assert!(super::sublime("maste", "maste") < super::sublime("master", "master"));
46 assert!(super::sublime("master", "master") < super::sublime("masterz", "masterz"));
47 }
48}