def test_stacked_dict(): from xoutil.collections import StackedDict sd = StackedDict(a='level-0') assert sd.peek() == dict(a='level-0') sd.push(a=1, b=2, c=10) assert sd.level == 1 assert sd.peek() == dict(a=1, b=2, c=10) sd.push(b=4, c=5) assert sd.peek() == dict(b=4, c=5) assert sd.level == 2 assert sd['b'] == 4 assert sd['a'] == 1 assert sd['c'] == 5 assert len(sd) == 3 del sd['c'] try: del sd['c'] assert False, 'Should have raise KeyError' except KeyError: pass except: assert False, 'Should have raise KeyError' assert sd.pop() == {'b': 4} assert sd['b'] == 2 assert sd['a'] == 1 assert len(sd) == 3 sd.pop() assert sd['a'] == 'level-0' try: sd.pop() assert False, 'Level 0 cannot be poped. It should have raised a TypeError' except TypeError: pass except: assert False, 'Level 0 cannot be poped. It should have raised a TypeError'