예제 #1
0
파일: test_mapping.py 프로젝트: jml/perseus
 def test_repackArrayNode(self):
     """
     When array nodes fall below 8 children, they're repacked into
     bitmapped nodes.
     """
     d = frozendict()
     vals = 'abcdefghijklmnopq'
     for i in range(17):
         d = d.withPair(i, vals[i])
     for i in range(10):
         d = d.without(i)
     di = FrozenDictInspector(d)
     self.assertEqual(bitcount(di.root.bitmap), 7)
     self.assertEqual(di.root.kind, "BitmapIndexedNode")
     self.assertEqual(d, frozendict(zip(itertools.count(10), list("klmnopq"))))
예제 #2
0
파일: test_mapping.py 프로젝트: teh/perseus
 def test_repackArrayNode(self):
     """
     When array nodes fall below 8 children, they're repacked into
     bitmapped nodes.
     """
     d = frozendict()
     vals = 'abcdefghijklmnopq'
     for i in range(17):
         d = d.withPair(i, vals[i])
     for i in range(10):
         d = d.without(i)
     di = FrozenDictInspector(d)
     self.assertEqual(bitcount(di.root.bitmap), 7)
     self.assertEqual(di.root.kind, "BitmapIndexedNode")
     self.assertEqual(d,
                      frozendict(zip(itertools.count(10), list("klmnopq"))))
예제 #3
0
파일: test_mapping.py 프로젝트: jml/perseus
    def test_assocFromEmptyInternals(self):
        """
        Adding an association to the empty frozendict creates a frozendict
        containing a bitmap-indexed node, which contains only the requested pair.

        Furthermore, only one bit is set in the bitmap, it's in the rightmost
        region, and is correctly positioned for the key's hash.
        """
        k, v = ('stuff', 42)
        d = frozendict()
        d2 = d.withPair(k, v)
        di = FrozenDictInspector(d2)
        self.assertEqual(di.root.kind, 'BitmapIndexedNode')
        self.assertEqual(bitcount(di.root.bitmap), 1)
        self.assertNotEqual(di.root.bitmap & bitpos(hash(k), 0), 0)
        i = index(di.root.bitmap, bitpos(hash(k), 0))
        self.assertEqual(di.root.array[2*i], k)
        self.assertEqual(di.root.array[2*i+1], v)
예제 #4
0
파일: test_mapping.py 프로젝트: teh/perseus
    def test_assocFromEmptyInternals(self):
        """
        Adding an association to the empty frozendict creates a frozendict
        containing a bitmap-indexed node, which contains only the requested pair.

        Furthermore, only one bit is set in the bitmap, it's in the rightmost
        region, and is correctly positioned for the key's hash.
        """
        k, v = ('stuff', 42)
        d = frozendict()
        d2 = d.withPair(k, v)
        di = FrozenDictInspector(d2)
        self.assertEqual(di.root.kind, 'BitmapIndexedNode')
        self.assertEqual(bitcount(di.root.bitmap), 1)
        self.assertNotEqual(di.root.bitmap & bitpos(hash(k), 0), 0)
        i = index(di.root.bitmap, bitpos(hash(k), 0))
        self.assertEqual(di.root.array[2 * i], k)
        self.assertEqual(di.root.array[2 * i + 1], v)
예제 #5
0
파일: test_mapping.py 프로젝트: jml/perseus
    def test_nearlyFullNode(self):
        """
        Up to 15 entries can go into a single bitmap-indexed node.
        """

        vals = 'abcdefghijklmnop'
        d = frozendict()
        #integers hash to themselves, so no collisions here
        for i in range(16):
            d = d.withPair(i, vals[i])
        self.assertEqual(len(d), 16)
        self.assertEqual(set(d.keys()), set(range(16)))
        self.assertEqual(set(d.values()), set(vals))
        self.assertEqual(set(d.items()), set(zip(range(16), vals)))
        di = FrozenDictInspector(d)
        self.assertEqual(di.root.kind, 'BitmapIndexedNode')
        self.assertEqual(di.count, 16)
        self.assertEqual(bitcount(di.root.bitmap), 16)
        self.assertEqual(len(di.root.array), 32)
        self.assertEqual(set(di.root.array[::2]), set(range(16)))
        self.assertEqual(set(di.root.array[1::2]), set(vals))
예제 #6
0
파일: test_mapping.py 프로젝트: teh/perseus
    def test_nearlyFullNode(self):
        """
        Up to 15 entries can go into a single bitmap-indexed node.
        """

        vals = 'abcdefghijklmnop'
        d = frozendict()
        #integers hash to themselves, so no collisions here
        for i in range(16):
            d = d.withPair(i, vals[i])
        self.assertEqual(len(d), 16)
        self.assertEqual(set(d.keys()), set(range(16)))
        self.assertEqual(set(d.values()), set(vals))
        self.assertEqual(set(d.items()), set(zip(range(16), vals)))
        di = FrozenDictInspector(d)
        self.assertEqual(di.root.kind, 'BitmapIndexedNode')
        self.assertEqual(di.count, 16)
        self.assertEqual(bitcount(di.root.bitmap), 16)
        self.assertEqual(len(di.root.array), 32)
        self.assertEqual(set(di.root.array[::2]), set(range(16)))
        self.assertEqual(set(di.root.array[1::2]), set(vals))