mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-26 10:40:54 +00:00
Introduce Patch::transform_old
This commit is contained in:
parent
ccc276da7a
commit
eefaa86750
1 changed files with 46 additions and 20 deletions
|
@ -199,6 +199,28 @@ where
|
|||
self.0.push(edit);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn transform_old(&self, old: T) -> T {
|
||||
let ix = match self.0.binary_search_by(|probe| probe.old.start.cmp(&old)) {
|
||||
Ok(ix) => ix,
|
||||
Err(ix) => {
|
||||
if ix == 0 {
|
||||
return old;
|
||||
} else {
|
||||
ix - 1
|
||||
}
|
||||
}
|
||||
};
|
||||
if let Some(edit) = self.0.get(ix) {
|
||||
if old >= edit.old.end {
|
||||
edit.new.end + (old - edit.old.end)
|
||||
} else {
|
||||
edit.new.start
|
||||
}
|
||||
} else {
|
||||
old
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Clone> IntoIterator for Patch<T> {
|
||||
|
@ -399,26 +421,6 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn test_compose_edits() {
|
||||
// assert_eq!(
|
||||
// compose_edits(
|
||||
// &Edit {
|
||||
// old: 3..3,
|
||||
// new: 3..6,
|
||||
// },
|
||||
// &Edit {
|
||||
// old: 2..7,
|
||||
// new: 2..4,
|
||||
// },
|
||||
// ),
|
||||
// Edit {
|
||||
// old: 2..4,
|
||||
// new: 2..4
|
||||
// }
|
||||
// );
|
||||
// }
|
||||
|
||||
#[gpui::test]
|
||||
fn test_two_new_edits_touching_one_old_edit() {
|
||||
assert_patch_composition(
|
||||
|
@ -455,6 +457,30 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
fn test_transform_old() {
|
||||
let patch = Patch(vec![
|
||||
Edit {
|
||||
old: 2..4,
|
||||
new: 2..4,
|
||||
},
|
||||
Edit {
|
||||
old: 7..8,
|
||||
new: 7..11,
|
||||
},
|
||||
]);
|
||||
assert_eq!(patch.transform_old(0), 0);
|
||||
assert_eq!(patch.transform_old(1), 1);
|
||||
assert_eq!(patch.transform_old(2), 2);
|
||||
assert_eq!(patch.transform_old(3), 2);
|
||||
assert_eq!(patch.transform_old(4), 4);
|
||||
assert_eq!(patch.transform_old(5), 5);
|
||||
assert_eq!(patch.transform_old(6), 6);
|
||||
assert_eq!(patch.transform_old(7), 7);
|
||||
assert_eq!(patch.transform_old(8), 11);
|
||||
assert_eq!(patch.transform_old(9), 12);
|
||||
}
|
||||
|
||||
#[gpui::test(iterations = 100)]
|
||||
fn test_random_patch_compositions(mut rng: StdRng) {
|
||||
let operations = env::var("OPERATIONS")
|
||||
|
|
Loading…
Reference in a new issue