def test_popitem(self):
        # dict.popitem()
        for copymode in -1, +1:
            # -1: b has same structure as a
            # +1: b is a.copy()
            for log2size in range(12):
                size = 2**log2size
                a = LazyDict()
                b = LazyDict()
                for i in range(size):
                    a[repr(i)] = i
                    if copymode < 0:
                        b[repr(i)] = i
                if copymode > 0:
                    b = a.copy()
                for i in range(size):
                    ka, va = ta = a.popitem()
                    self.assertEqual(va, int(ka))
                    kb, vb = tb = b.popitem()
                    self.assertEqual(vb, int(kb))
                    self.assertFalse(copymode < 0 and ta != tb)
                self.assertFalse(a)
                self.assertFalse(b)

        d = LazyDict()
        self.assertRaises(KeyError, d.popitem)
 def test_lazy_copy(self):
     d = LazyDict({'1':1})
     d['2'] = 2
     x = d.copy()
     self.assertEqual(len(x), 2)
     i = {'num': 0}
     def r(key, i):
         i['num'] += 1
         return i['num']
     d.set_stub('3', r, i)
     x = d.copy()
     self.assertEqual(d['3'], 1)
     self.assertEqual(len(d._stubs), 0)
     self.assertEqual(len(x._stubs), 1)
     self.assertEqual(x['3'], 2)
     self.assertEqual(len(x._stubs), 0)
     x = d.copy()
     self.assertEqual(d['3'], 1)
     self.assertEqual(x['3'], 1)
 def test_copy(self):
     d = LazyDict({1:1, 2:2, 3:3})
     self.assertEqual(d.copy(), LazyDict({1:1, 2:2, 3:3}))
     self.assertEqual(LazyDict().copy(), LazyDict())
     self.assertRaises(TypeError, d.copy, None)