btreeset/
btreeset.rs

1// SPDX-FileCopyrightText: 2025 undoredo contributors
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5use std::collections::BTreeSet;
6
7use undoredo::{Insert, Recorder, UndoRedo};
8
9fn main() {
10    let mut recorder: Recorder<char, (), BTreeSet<char>> = Recorder::new(BTreeSet::new());
11    let mut undoredo: UndoRedo<BTreeSet<char>> = UndoRedo::new();
12
13    recorder.insert('A', ());
14    undoredo.commit(recorder.flush());
15
16    recorder.insert('B', ());
17    // Inserting to a set is idempotent: repeating the same insert does nothing.
18    // It is, however, a logic error if the recorded collection is a multiset,
19    // e.g. `rstar::RTree`.
20    recorder.insert('B', ());
21    undoredo.commit(recorder.flush());
22
23    recorder.insert('C', ());
24    undoredo.commit(recorder.flush());
25
26    assert_eq!(*recorder.collection(), BTreeSet::from(['A', 'B', 'C']));
27
28    undoredo.undo(&mut recorder);
29    assert_eq!(*recorder.collection(), BTreeSet::from(['A', 'B']));
30
31    undoredo.undo(&mut recorder);
32    assert_eq!(*recorder.collection(), BTreeSet::from(['A']));
33
34    undoredo.redo(&mut recorder);
35    assert_eq!(*recorder.collection(), BTreeSet::from(['A', 'B']));
36
37    undoredo.redo(&mut recorder);
38    assert_eq!(*recorder.collection(), BTreeSet::from(['A', 'B', 'C']));
39}
40
41#[test]
42fn test() {
43    main();
44}