| 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"); | |
| } |