From 6fedc57848da2735b89a777574211472d0ba9366 Mon Sep 17 00:00:00 2001 From: Zachary Pierce Date: Fri, 9 Aug 2019 15:55:33 -0700 Subject: [PATCH] Add generative test cases --- Cargo.toml | 3 +++ tests/lib.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index df18a09..64e7a0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,3 +16,6 @@ exclude = ["/.travis.yml", "/dev"] [badges] travis-ci = { repository = "dguo/strsim-rs" } + +[dev-dependencies] +proptest = "0.9.4" diff --git a/tests/lib.rs b/tests/lib.rs index ad7af51..9553756 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -1,4 +1,6 @@ extern crate strsim; +extern crate proptest; +use proptest::prelude::*; use strsim::{hamming, levenshtein, normalized_levenshtein, osa_distance,damerau_levenshtein, normalized_damerau_levenshtein, jaro, jaro_winkler}; @@ -47,3 +49,64 @@ fn jaro_winkler_works() { assert!((0.911 - jaro_winkler("cheeseburger", "cheese fries")).abs() < 0.001); } + +proptest! { + #[test] + fn hamming_arbitrary_strings_work(a in ".*", b in ".*") { + match hamming(a.as_str(), b.as_str()) { + Ok(v) => { + assert!(v <= a.len().max(b.len())); + }, + Err(_) => { + assert_ne!(a.chars().count(), b.chars().count()); + } + } + } + #[test] + fn jaro_arbitrary_strings_work(a in ".*", b in ".*") { + let v = jaro(a.as_str(), b.as_str()); + assert!(v >= 0.0 && v <= 1.0); + if v == 1.0 { + assert_eq!(a, b); + } + } + #[test] + fn jaro_winkler_arbitrary_strings_work(a in ".*", b in ".*") { + let v = jaro_winkler(a.as_str(), b.as_str()); + assert!(v >= 0.0 && v <= 1.0); + if v == 1.0 { + assert_eq!(a, b); + } + } + #[test] + fn levenshtein_arbitrary_strings_work(a in ".*", b in ".*") { + let v = levenshtein(a.as_str(), b.as_str()); + assert!(v <= a.chars().count().max(b.chars().count())); + } + #[test] + fn normalized_levenshtein_arbitrary_strings_work(a in ".*", b in ".*") { + let v = normalized_levenshtein(a.as_str(), b.as_str()); + assert!(v >= 0.0 && v <= 1.0); + if v == 1.0 { + assert_eq!(a, b); + } + } + #[test] + fn osa_distance_arbitrary_strings_work(a in ".*", b in ".*") { + let v = osa_distance(a.as_str(), b.as_str()); + assert!(v <= a.chars().count().max(b.chars().count())); + } + #[test] + fn damerau_levenshtein_arbitrary_strings_work(a in ".*", b in ".*") { + let v = damerau_levenshtein(a.as_str(), b.as_str()); + assert!(v <= a.chars().count().max(b.chars().count())); + } + #[test] + fn normalized_damerau_levenshtein_arbitrary_strings_work(a in ".*", b in ".*") { + let v = normalized_damerau_levenshtein(a.as_str(), b.as_str()); + assert!(v >= 0.0 && v <= 1.0); + if v == 1.0 { + assert_eq!(a, b); + } + } +}