4 fn test_lev_distance() {
5 use std
::char::{from_u32, MAX}
;
6 // Test bytelength agnosticity
7 for c
in (0..MAX
as u32).filter_map(from_u32
).map(|i
| i
.to_string()) {
8 assert_eq
!(lev_distance(&c
[..], &c
[..]), 0);
11 let a
= "\nMäry häd ä little lämb\n\nLittle lämb\n";
12 let b
= "\nMary häd ä little lämb\n\nLittle lämb\n";
13 let c
= "Mary häd ä little lämb\n\nLittle lämb\n";
14 assert_eq
!(lev_distance(a
, b
), 1);
15 assert_eq
!(lev_distance(b
, a
), 1);
16 assert_eq
!(lev_distance(a
, c
), 2);
17 assert_eq
!(lev_distance(c
, a
), 2);
18 assert_eq
!(lev_distance(b
, c
), 1);
19 assert_eq
!(lev_distance(c
, b
), 1);
23 fn test_find_best_match_for_name() {
24 use crate::create_default_session_globals_then
;
25 create_default_session_globals_then(|| {
26 let input
= vec
![Symbol
::intern("aaab"), Symbol
::intern("aaabc")];
28 find_best_match_for_name(&input
, Symbol
::intern("aaaa"), None
),
29 Some(Symbol
::intern("aaab"))
32 assert_eq
!(find_best_match_for_name(&input
, Symbol
::intern("1111111111"), None
), None
);
34 let input
= vec
![Symbol
::intern("aAAA")];
36 find_best_match_for_name(&input
, Symbol
::intern("AAAA"), None
),
37 Some(Symbol
::intern("aAAA"))
40 let input
= vec
![Symbol
::intern("AAAA")];
41 // Returns None because `lev_distance > max_dist / 3`
42 assert_eq
!(find_best_match_for_name(&input
, Symbol
::intern("aaaa"), None
), None
);
44 let input
= vec
![Symbol
::intern("AAAA")];
46 find_best_match_for_name(&input
, Symbol
::intern("aaaa"), Some(4)),
47 Some(Symbol
::intern("AAAA"))
50 let input
= vec
![Symbol
::intern("a_longer_variable_name")];
52 find_best_match_for_name(&input
, Symbol
::intern("a_variable_longer_name"), None
),
53 Some(Symbol
::intern("a_longer_variable_name"))