undoredo 0.10.21

Undo-redo for Rust using deltas, snapshots, or commands.
Documentation
// SPDX-FileCopyrightText: 2026 undoredo contributors
//
// SPDX-License-Identifier: MIT OR Apache-2.0

use bidimap::BiHashMap;
use undoredo::aliases::{HashMapDelta, HashMapHalfDelta};
use undoredo::{Recorder, UndoRedo};

fn main() {
    let mut map = BiHashMap::new();
    map.insert("A", 1);
    map.insert("BB", 2);
    map.insert("CCC", 3);

    let mut recorder: Recorder<BiHashMap<&str, usize>, HashMapHalfDelta<&str, usize>> =
        Recorder::new(map);
    let mut undoredo: UndoRedo<HashMapDelta<&str, usize>> = UndoRedo::new();

    assert_eq!(recorder.get_by_left(&"A"), Some(&1));
    assert_eq!(recorder.get_by_right(&2), Some(&"BB"));

    assert_eq!(recorder.remove_by_left(&"A"), Some(1));
    assert_eq!(recorder.remove_by_right(&3), Some("CCC"));
    undoredo.commit(&mut recorder);

    assert_eq!(recorder.get_by_left(&"A"), None);
    assert_eq!(recorder.get_by_right(&3), None);

    undoredo.undo(&mut recorder);
    assert_eq!(recorder.get_by_left(&"A"), Some(&1));
    assert_eq!(recorder.get_by_left(&"CCC"), Some(&3));

    undoredo.redo(&mut recorder);
    assert_eq!(recorder.get_by_left(&"A"), None);
    assert_eq!(recorder.get_by_right(&3), None);
}

#[test]
fn test() {
    main();
}