pub fn diff<'a, T>(old: &'a [T], new: &'a [T]) -> Vec<Change<&'a T>>Expand description
The difference between the two slices is calculated. The changes are in the order that constructs the new version from the old version.
let old = vec!["MUCH", "WRITING", "IS", "LIKE", "SNOW", ",",
"A", "MASS", "OF", "LONG", "WORDS", "AND",
"PHRASES", "FALLS", "UPON", "THE", "RELEVANT",
"FACTS", "COVERING", "UP", "THE", "DETAILS", "."];
let new = vec!["A", "MASS", "OF", "LATIN", "WORDS", "FALLS",
"UPON", "THE", "RELEVANT", "FACTS", "LIKE", "SOFT",
"SNOW", ",", "COVERING", "UP", "THE", "DETAILS", "."];
let answer = vec![Delete(&"MUCH", 0), Delete(&"WRITING", 1), Delete(&"IS", 2),
Unchanged(&"A",6, 0), Unchanged(&"MASS", 7, 1), Unchanged(&"OF", 8, 2),
Insert(&"LATIN", 3), Delete(&"LONG", 9), Unchanged(&"WORDS", 10, 4),
Delete(&"AND", 11), Delete(&"PHRASES", 12),Unchanged(&"FALLS", 13, 5),
Unchanged(&"UPON", 14, 6), Unchanged(&"THE", 15, 7),
Unchanged(&"RELEVANT", 16, 8), Unchanged(&"FACTS", 17, 9),
Unchanged(&"LIKE", 3, 10), Insert(&"SOFT", 11), Unchanged(&"SNOW", 4, 12),
Unchanged(&",", 5, 13), Unchanged(&"COVERING", 18, 14),
Unchanged(&"UP", 19, 15), Unchanged(&"THE", 20, 16),
Unchanged(&"DETAILS", 21, 17), Unchanged(&".", 22, 18)];
let calculated = diff(&old, &new);
let new_version: Vec<&str> =
new_version(calculated.as_slice()).into_iter().copied().collect();
let old_version: Vec<&str> =
old_version(calculated.as_slice()).into_iter().copied().collect();
assert_eq!(answer, calculated);
assert_eq!(new, new_version);
assert_eq!(old, old_version);