extern crate strsim; use strsim::{ damerau_levenshtein, hamming, jaro, jaro_winkler, levenshtein, normalized_damerau_levenshtein, normalized_levenshtein, osa_distance, }; macro_rules! assert_delta { ($x:expr, $y:expr) => { assert_delta!($x, $y, 1e-5); }; ($x:expr, $y:expr, $d:expr) => { if ($x - $y).abs() > $d { panic!( "assertion failed: actual: `{}`, expected: `{}`: \ actual not within < {} of expected", $x, $y, $d ); } }; } #[test] fn hamming_works() { match hamming("hamming", "hammers") { Ok(distance) => assert_eq!(3, distance), Err(why) => panic!("{:?}", why), } } #[test] fn levenshtein_works() { assert_eq!(3, levenshtein("kitten", "sitting")); } #[test] fn normalized_levenshtein_works() { assert_delta!(0.57142, normalized_levenshtein("kitten", "sitting")); } #[test] fn osa_distance_works() { assert_eq!(3, osa_distance("ac", "cba")); } #[test] fn damerau_levenshtein_works() { assert_eq!(2, damerau_levenshtein("ac", "cba")); } #[test] fn normalized_damerau_levenshtein_works() { assert_delta!( 0.27272, normalized_damerau_levenshtein("levenshtein", "löwenbräu") ); } #[test] fn jaro_works() { assert_delta!( 0.392, jaro("Friedrich Nietzsche", "Jean-Paul Sartre"), 0.001 ); } #[test] fn jaro_winkler_works() { assert_delta!(0.866, jaro_winkler("cheeseburger", "cheese fries"), 0.001); }