1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
from . import mapping_tests
import blist
def CmpToKey(mycmp):
'Convert a cmp= function into a key= function'
class K(object):
def __init__(self, obj):
self.obj = obj
def __lt__(self, other):
return mycmp(self.obj, other.obj) == -1
return K
class sorteddict_test(mapping_tests.TestHashMappingProtocol):
type2test = blist.sorteddict
def _reference(self):
"""Return a dictionary of values which are invariant by storage
in the object under test."""
return {1:2, 3:4, 5:6}
def test_repr(self):
d = self._empty_mapping()
self.assertEqual(repr(d), 'sorteddict({})')
d[1] = 2
self.assertEqual(repr(d), 'sorteddict({1: 2})')
d = self._empty_mapping()
d[1] = d
self.assertEqual(repr(d), 'sorteddict({1: sorteddict({...})})')
class Exc(Exception): pass
class BadRepr(object):
def __repr__(self):
raise Exc()
d = self._full_mapping({1: BadRepr()})
self.assertRaises(Exc, repr, d)
def test_mutatingiteration(self):
pass
def test_sort(self):
u = self.type2test.fromkeys([1, 0])
self.assertEqual(list(u.keys()), [0, 1])
u = self.type2test.fromkeys([2,1,0,-1,-2])
self.assertEqual(u, self.type2test.fromkeys([-2,-1,0,1,2]))
self.assertEqual(list(u.keys()), [-2,-1,0,1,2])
a = self.type2test.fromkeys(reversed(list(range(512))))
self.assertEqual(list(a.keys()), list(range(512)))
def revcmp(a, b): # pragma: no cover
if a == b:
return 0
elif a < b:
return 1
else: # a > b
return -1
u = self.type2test.fromkeys([2,1,0,-1,-2], key=CmpToKey(revcmp))
self.assertEqual(list(u.keys()), [2,1,0,-1,-2])
# The following dumps core in unpatched Python 1.5:
def myComparison(x,y):
xmod, ymod = x%3, y%7
if xmod == ymod:
return 0
elif xmod < ymod:
return -1
else: # xmod > ymod
return 1
self.type2test.fromkeys(list(range(12)), key=CmpToKey(myComparison))
#def selfmodifyingComparison(x,y):
# z[x+y] = None
# return cmp(x, y)
#z = self.type2test(CmpToKey(selfmodifyingComparison))
#self.assertRaises(ValueError, z.update, [(i,i) for i in range(12)])
self.assertRaises(TypeError, self.type2test.fromkeys, 42, 42, 42, 42)
|