thunderdome/
thunderdome.rs

1// SPDX-FileCopyrightText: 2025 undoredo contributors
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5use 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}