1 extern crate strsim;
2 
3 use strsim::{
4     damerau_levenshtein, hamming, jaro, jaro_winkler, levenshtein, normalized_damerau_levenshtein,
5     normalized_levenshtein, osa_distance,
6 };
7 
8 macro_rules! assert_delta {
9     ($x:expr, $y:expr) => {
10         assert_delta!($x, $y, 1e-5);
11     };
12     ($x:expr, $y:expr, $d:expr) => {
13         if ($x - $y).abs() > $d {
14             panic!(
15                 "assertion failed: actual: `{}`, expected: `{}`: \
16                 actual not within < {} of expected",
17                 $x, $y, $d
18             );
19         }
20     };
21 }
22 
23 #[test]
hamming_works()24 fn hamming_works() {
25     match hamming("hamming", "hammers") {
26         Ok(distance) => assert_eq!(3, distance),
27         Err(why) => panic!("{:?}", why),
28     }
29 }
30 
31 #[test]
levenshtein_works()32 fn levenshtein_works() {
33     assert_eq!(3, levenshtein("kitten", "sitting"));
34 }
35 
36 #[test]
normalized_levenshtein_works()37 fn normalized_levenshtein_works() {
38     assert_delta!(0.57142, normalized_levenshtein("kitten", "sitting"));
39 }
40 
41 #[test]
osa_distance_works()42 fn osa_distance_works() {
43     assert_eq!(3, osa_distance("ac", "cba"));
44 }
45 
46 #[test]
damerau_levenshtein_works()47 fn damerau_levenshtein_works() {
48     assert_eq!(2, damerau_levenshtein("ac", "cba"));
49 }
50 
51 #[test]
normalized_damerau_levenshtein_works()52 fn normalized_damerau_levenshtein_works() {
53     assert_delta!(
54         0.27272,
55         normalized_damerau_levenshtein("levenshtein", "löwenbräu")
56     );
57 }
58 
59 #[test]
jaro_works()60 fn jaro_works() {
61     assert_delta!(
62         0.392,
63         jaro("Friedrich Nietzsche", "Jean-Paul Sartre"),
64         0.001
65     );
66 }
67 
68 #[test]
jaro_winkler_works()69 fn jaro_winkler_works() {
70     assert_delta!(0.866, jaro_winkler("cheeseburger", "cheese fries"), 0.001);
71 }
72