diff --git a/backup/src/delta.rs b/backup/src/delta.rs index cc831ac..993dd3a 100644 --- a/backup/src/delta.rs +++ b/backup/src/delta.rs @@ -242,4 +242,56 @@ mod tests { let expected = Delta::default().with_added("dir_1", ["file1", "file2"]); assert_eq!(expected, b.union(&a)); } + + #[test] + fn test_difference() { + let a = Delta::default() + .with_added("dir1", ["file1", "file2"]) + .with_removed("dir1", ["file3", "file4"]); + let b = Delta::default() + .with_added("dir1", ["file1"]) + .with_removed("dir1", ["file3"]); + let expected = Delta::default() + .with_added("dir1", ["file2"]) + .with_removed("dir1", ["file4"]); + + assert_eq!(a.difference(&b), expected); + assert_eq!(b.difference(&a), Delta::default()); + } + + #[test] + fn test_strict_difference() { + let a = Delta::default() + .with_added("dir1", ["file1", "file2"]) + .with_removed("dir1", ["file3", "file4"]); + let b = Delta::default() + .with_added("dir1", ["file1", "file4"]) + .with_removed("dir1", ["file3"]); + let expected = Delta::default().with_added("dir1", ["file2"]); + + assert_eq!(a.strict_difference(&b), expected); + assert_eq!(b.strict_difference(&a), Delta::default()); + } + + #[test] + fn test_contributions() { + let deltas = [ + Delta::default().with_added("dir1", ["file4"]), + Delta::default().with_added("dir1", ["file1", "file2"]), + Delta::default() + .with_added("dir1", ["file1"]) + .with_added("dir2", ["file3"]), + Delta::default() + .with_added("dir1", ["file2"]) + .with_removed("dir2", ["file3"]), + ]; + let expected = [ + State::default().with_dir("dir1", ["file2"]), + State::default().with_dir("dir1", ["file1"]), + State::default(), + State::default().with_dir("dir1", ["file4"]), + ]; + + assert_eq!(Delta::contributions(deltas.iter().rev()), expected); + } }