use super::SnapshotMap; #[test] fn basic() { let mut map = SnapshotMap::default(); map.insert(22, "twenty-two"); let snapshot = map.snapshot(); map.insert(22, "thirty-three"); assert_eq!(map[&22], "thirty-three"); map.insert(44, "forty-four"); assert_eq!(map[&44], "forty-four"); assert_eq!(map.get(&33), None); map.rollback_to(snapshot); assert_eq!(map[&22], "twenty-two"); assert_eq!(map.get(&33), None); assert_eq!(map.get(&44), None); } #[test] #[should_panic] fn out_of_order() { let mut map = SnapshotMap::default(); map.insert(22, "twenty-two"); let snapshot1 = map.snapshot(); map.insert(33, "thirty-three"); let snapshot2 = map.snapshot(); map.insert(44, "forty-four"); map.rollback_to(snapshot1); // bogus, but accepted map.rollback_to(snapshot2); // asserts } #[test] fn nested_commit_then_rollback() { let mut map = SnapshotMap::default(); map.insert(22, "twenty-two"); let snapshot1 = map.snapshot(); let snapshot2 = map.snapshot(); map.insert(22, "thirty-three"); map.commit(snapshot2); assert_eq!(map[&22], "thirty-three"); map.rollback_to(snapshot1); assert_eq!(map[&22], "twenty-two"); }