thunderdome/
thunderdome.rs1use thunderdome::{Arena, Index};
6use undoredo::{Push, Recorder, Remove, UndoRedo};
7
8fn main() {
9 let mut recorder: Recorder<Index, char, Arena<char>> = Recorder::new(Arena::new());
10 let mut undoredo: UndoRedo<Arena<char>> = UndoRedo::new();
11
12 recorder.push('A');
13 undoredo.commit(recorder.flush());
14
15 recorder.push('B');
16 recorder.push('B');
17 undoredo.commit(recorder.flush());
18
19 let key = recorder.push('X');
20 recorder.remove(&key);
21 recorder.push('C');
22 undoredo.commit(recorder.flush());
23
24 let (_, values): (Vec<_>, Vec<char>) = recorder.collection().clone().into_iter().unzip();
25 assert!(values == vec!['A', 'B', 'B', 'C']);
26
27 undoredo.undo(&mut recorder);
28 let (_, values): (Vec<_>, Vec<char>) = recorder.collection().clone().into_iter().unzip();
29 assert!(values == vec!['A', 'B', 'B']);
30
31 undoredo.undo(&mut recorder);
32 let (_, values): (Vec<_>, Vec<char>) = recorder.collection().clone().into_iter().unzip();
33 assert!(values == vec!['A']);
34
35 undoredo.redo(&mut recorder);
36 let (_, values): (Vec<_>, Vec<char>) = recorder.collection().clone().into_iter().unzip();
37 assert!(values == vec!['A', 'B', 'B']);
38
39 undoredo.redo(&mut recorder);
40 let (_, values): (Vec<_>, Vec<char>) = recorder.collection().clone().into_iter().unzip();
41 assert!(values == vec!['A', 'B', 'B', 'C']);
42}
43
44#[test]
45fn test() {
46 main();
47}