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