extern crate editdistancewf as wf; extern crate quickcheck; use quickcheck::quickcheck; #[test] fn at_least_size_difference_property() { fn at_least_size_difference(a: String, b: String) -> bool { let size_a = a.chars().count() as isize; let size_b = b.chars().count() as isize; let diff = (size_a - size_b).abs() as usize; wf::distance(a.chars(), b.chars()) >= diff } quickcheck(at_least_size_difference as fn(a: String, b: String) -> bool); } #[test] fn at_most_length_of_longer_property() { fn at_most_size_of_longer(a: String, b: String) -> bool { let upper_bound = *[a.chars().count(), b.chars().count()] .iter() .max() .unwrap() as usize; wf::distance(a.chars(), b.chars()) <= upper_bound } quickcheck(at_most_size_of_longer as fn(a: String, b: String) -> bool); } #[test] fn zero_iff_a_equals_b_property() { fn zero_iff_a_equals_b(a: String, b: String) -> bool { let d = wf::distance(a.chars(), b.chars()); if a == b { d == 0 } else { d > 0 } } quickcheck(zero_iff_a_equals_b as fn(a: String, b: String) -> bool); } #[test] fn triangle_inequality_property() { fn triangle_inequality(a: String, b: String, c: String) -> bool { wf::distance(a.chars(), b.chars()) <= wf::distance(a.chars(), c.chars()) + wf::distance(b.chars(), c.chars()) } quickcheck(triangle_inequality as fn(a: String, b: String, c: String) -> bool); }