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[..], usize::MAX), Some(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, usize::MAX), Some(1));
15 assert_eq!(lev_distance(b, a, usize::MAX), Some(1));
16 assert_eq!(lev_distance(a, c, usize::MAX), Some(2));
17 assert_eq!(lev_distance(c, a, usize::MAX), Some(2));
18 assert_eq!(lev_distance(b, c, usize::MAX), Some(1));
19 assert_eq!(lev_distance(c, b, usize::MAX), Some(1));
23 fn test_lev_distance_limit() {
24 assert_eq!(lev_distance("abc", "abcd", 1), Some(1));
25 assert_eq!(lev_distance("abc", "abcd", 0), None);
26 assert_eq!(lev_distance("abc", "xyz", 3), Some(3));
27 assert_eq!(lev_distance("abc", "xyz", 2), None);
31 fn test_find_best_match_for_name() {
32 use crate::create_default_session_globals_then;
33 create_default_session_globals_then(|| {
34 let input = vec![Symbol::intern("aaab"), Symbol::intern("aaabc")];
36 find_best_match_for_name(&input, Symbol::intern("aaaa"), None),
37 Some(Symbol::intern("aaab"))
40 assert_eq!(find_best_match_for_name(&input, Symbol::intern("1111111111"), None), None);
42 let input = vec![Symbol::intern("AAAA")];
44 find_best_match_for_name(&input, Symbol::intern("aaaa"), None),
45 Some(Symbol::intern("AAAA"))
48 let input = vec![Symbol::intern("AAAA")];
50 find_best_match_for_name(&input, Symbol::intern("aaaa"), Some(4)),
51 Some(Symbol::intern("AAAA"))
54 let input = vec![Symbol::intern("a_longer_variable_name")];
56 find_best_match_for_name(&input, Symbol::intern("a_variable_longer_name"), None),
57 Some(Symbol::intern("a_longer_variable_name"))