Compact odict (split version) by methane · Pull Request #9 · methane/cpython (original) (raw)

Expand Up

@@ -520,14 +520,23 @@ def __hash__(self):

od[key] = i

# These should not crash.

with self.assertRaises(KeyError):

# Pure Python implementation raises KeyError, C implementation not.

try:

list(od.values())

with self.assertRaises(KeyError):

except KeyError:

pass

try:

list(od.items())

with self.assertRaises(KeyError):

except KeyError:

pass

try:

repr(od)

with self.assertRaises(KeyError):

except KeyError:

pass

try:

od.copy()

except KeyError:

pass

def test_issue24348(self):

OrderedDict = self.OrderedDict

Expand Down Expand Up

@@ -578,8 +587,11 @@ def test_dict_delitem(self):

od['spam'] = 1

od['ham'] = 2

dict.__delitem__(od, 'spam')

with self.assertRaises(KeyError):

# Pure Python implementation raises KeyError, C implementation not.

try:

repr(od)

except KeyError:

pass

def test_dict_clear(self):

OrderedDict = self.OrderedDict

Expand All

@@ -595,17 +607,23 @@ def test_dict_pop(self):

od['spam'] = 1

od['ham'] = 2

dict.pop(od, 'spam')

with self.assertRaises(KeyError):

# Pure Python implementation raises KeyError, C implementation not.

try:

repr(od)

except KeyError:

pass

def test_dict_popitem(self):

OrderedDict = self.OrderedDict

od = OrderedDict()

od['spam'] = 1

od['ham'] = 2

dict.popitem(od)

with self.assertRaises(KeyError):

# Pure Python implementation raises KeyError, C implementation not.

try:

repr(od)

except KeyError:

pass

def test_dict_setdefault(self):

OrderedDict = self.OrderedDict

Expand Down Expand Up

@@ -676,26 +694,25 @@ def test_sizeof_exact(self):

size = support.calcobjsize

check = self.check_sizeof

basicsize = size('nQ2P' + '3PnPn2P') + calcsize('2nP2n')

basicsize = size('n2Q2P' + '2Pn') + calcsize('2nP2n')

entrysize = calcsize('n2P')

p = calcsize('P')

nodesize = calcsize('Pn2P')

od = OrderedDict()

check(od, basicsize + 8*p + 8 + 5*entrysize) # 8byte indicies + 8*2//3 * entry table

check(od, basicsize + 8 + 5*entrysize) # 8byte indicies + 8*2//3 * entry table

od.x = 1

check(od, basicsize + 8*p + 8 + 5*entrysize)

check(od, basicsize + 8 + 5*entrysize)

od.update([(i, i) for i in range(3)])

check(od, basicsize + 8*p + 8 + 5*entrysize + 3*nodesize)

check(od, basicsize + 8 + 5*entrysize)

od.update([(i, i) for i in range(3, 10)])

check(od, basicsize + 16*p + 16 + 10*entrysize + 10*nodesize)

check(od, basicsize + 16 + 10*entrysize)

check(od.keys(), size('P'))

check(od.items(), size('P'))

check(od.values(), size('P'))

itersize = size('iP2n2P')

itersize = size('P2nPni')

check(iter(od), itersize)

check(iter(od.keys()), itersize)

check(iter(od.items()), itersize)

Expand Down