levenshtein_diff/lib.rs
1pub mod distance;
2pub mod edit;
3pub mod util;
4
5pub use distance::*;
6pub use edit::*;
7use util::DistanceMatrix;
8
9/// Computes and returns the Levenshtein distance between the source and target sequences.
10///
11/// # Arguments
12///
13/// * `source` - The source sequence
14/// * `target` - The target sequence
15///
16/// # Examples
17///
18/// ```
19/// use levenshtein_diff as levenshtein;
20///
21/// let s1 = "FLAW";
22/// let s2 = "LAWN";
23///
24/// let (distance, _) = levenshtein::distance(s1.as_bytes(), s2.as_bytes());
25/// assert_eq!(distance, 2);
26///
27/// let v1 = vec![0, 1, 2];
28/// let v2 = vec![1, 2, 3, 4];
29///
30/// let (distance, _) = levenshtein::distance(&v1[..], &v2[..]); // Also works on vectors
31/// assert_eq!(distance, 3);
32/// ```
33pub fn distance<T: PartialEq>(source: &[T], target: &[T]) -> (usize, DistanceMatrix) {
34 levenshtein_memoization(source, target)
35}
36
37#[cfg(test)]
38mod tests {
39 use crate::*;
40 #[test]
41 fn default_distance_test() {
42 let s1 = "FLOWER";
43 let s2 = "FOLLOWER";
44
45 let expected_dist = 2;
46
47 let (dist, _) = distance(s1.as_bytes(), s2.as_bytes());
48
49 assert_eq!(expected_dist, dist);
50 }
51}