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}