Skip to main content

vec/
vec.rs

1// SPDX-FileCopyrightText: 2026 undoredo contributors
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5use undoredo::aliases::VecDelta;
6use undoredo::{Recorder, UndoRedo};
7
8fn main() {
9    let mut recorder: Recorder<Vec<char>> = Recorder::new(Vec::new());
10    let mut undoredo: UndoRedo<VecDelta<char>> = UndoRedo::new();
11
12    recorder.push('A');
13    recorder.push('B');
14    recorder.push('C');
15    recorder.push('D');
16    undoredo.commit(&mut recorder);
17
18    assert_eq!(*recorder.container(), vec!['A', 'B', 'C', 'D']);
19
20    // `Vec` has no stable remove, i.e. remove that does not invalidate indices.
21    // So we use the `.swap_remove()` method instead, which swaps the removee
22    // with the last element and pops.
23    recorder.swap_remove(&1);
24    undoredo.commit(&mut recorder);
25
26    // 'B' at index 1 was removed; previously last 'D' took its place.
27    assert_eq!(*recorder.container(), vec!['A', 'D', 'C']);
28
29    undoredo.undo(&mut recorder);
30    assert_eq!(*recorder.container(), vec!['A', 'B', 'C', 'D']);
31
32    undoredo.redo(&mut recorder);
33    assert_eq!(*recorder.container(), vec!['A', 'D', 'C']);
34
35    // Removing the last element is just a pop; no swap takes place.
36    recorder.swap_remove(&2);
37    undoredo.commit(&mut recorder);
38    assert_eq!(*recorder.container(), vec!['A', 'D']);
39
40    undoredo.undo(&mut recorder);
41    assert_eq!(*recorder.container(), vec!['A', 'D', 'C']);
42
43    undoredo.redo(&mut recorder);
44    assert_eq!(*recorder.container(), vec!['A', 'D']);
45}
46
47#[test]
48fn test() {
49    main();
50}