Example #1
0
 def test_dict_items(self):
     d = SparseDict({1: 10, "a": "ABC"})
     items = d.viewitems()
     self.assertEqual(len(items), 2)
     self.assertEqual(set(items), set([(1, 10), ("a", "ABC")]))
     self.assertEqual(items, set([(1, 10), ("a", "ABC")]))
     self.assertNotEqual(items, set([(1, 10), ("a", "ABC"), "junk"]))
     self.assertNotEqual(items, set([(1, 10), ("a", "def")]))
     self.assertNotEqual(items, set([(1, 10)]))
     self.assertNotEqual(items, 42)
     self.assertIn((1, 10), items)
     self.assertIn(("a", "ABC"), items)
     self.assertNotIn((1, 11), items)
     self.assertNotIn(1, items)
     self.assertNotIn((), items)
     self.assertNotIn((1,), items)
     self.assertNotIn((1, 2, 3), items)
     self.assertEqual(d.viewitems(), d.viewitems())
     e = d.copy()
     self.assertEqual(d.viewitems(), e.viewitems())
     e["a"] = "def"
     self.assertNotEqual(d.viewitems(), e.viewitems())
Example #2
0
    def test_track_dynamic(self):
        # Test GC-optimization of dynamically-created dicts
        class MyObject(object):
            pass
        x, y, z, w, o = 1.5, "a", (1, object()), [], MyObject()

        d = SparseDict()
        self._not_tracked(d)
        d[1] = "a"
        self._not_tracked(d)
        d[y] = 2
        self._not_tracked(d)
        d[z] = 3
        self._not_tracked(d)
        self._not_tracked(d.copy())
        d[4] = w
        self._tracked(d)
        self._tracked(d.copy())
        # Unlike dict, we don't have a _PyDict_MaybeUntrack hook
        # d[4] = None
        # self._not_tracked(d)
        # self._not_tracked(d.copy())

        # dd isn't tracked right now, but it may mutate and therefore d
        # which contains it must be tracked.
        d = SparseDict()
        dd = SparseDict()
        d[1] = dd
        self._not_tracked(dd)
        self._tracked(d)
        dd[1] = d
        self._tracked(dd)

        d = SparseDict.fromkeys([x, y, z])
        self._not_tracked(d)
        dd = SparseDict()
        dd.update(d)
        self._not_tracked(dd)
        d = SparseDict.fromkeys([x, y, z, o])
        self._tracked(d)
        dd = SparseDict()
        dd.update(d)
        self._tracked(dd)

        d = SparseDict(x=x, y=y, z=z)
        self._not_tracked(d)
        d = SparseDict(x=x, y=y, z=z, w=w)
        self._tracked(d)
        d = SparseDict()
        d.update(x=x, y=y, z=z)
        self._not_tracked(d)
        d.update(w=w)
        self._tracked(d)

        d = SparseDict([(x, y), (z, 1)])
        self._not_tracked(d)
        d = SparseDict([(x, y), (z, w)])
        self._tracked(d)
        d = SparseDict()
        d.update([(x, y), (z, 1)])
        self._not_tracked(d)
        d.update([(x, y), (z, w)])
        self._tracked(d)