### Main code.
## Some compatibility hacks.
-import itertools as I
-def bin(x): return x
-range = xrange
-long = long
-imap = I.imap
-def byteseq(seq): return "".join(map(chr, seq))
-def iterkeys(m): return m.iterkeys()
-def itervalues(m): return m.itervalues()
-def iteritems(m): return m.iteritems()
-from cStringIO import StringIO
-MAXFIXNUM = SYS.maxint
+if SYS.version_info >= (3,):
+ PY2, PY3 = False, True
+ def bin(x): return x.encode('iso8859-1')
+ def py23(x, y): return y
+ range = range
+ byteseq = bytes
+ long = int
+ imap = map
+ def iterkeys(m): return m.keys()
+ def itervalues(m): return m.values()
+ def iteritems(m): return m.items()
+ from io import StringIO
+ MAXFIXNUM = SYS.maxsize
+else:
+ import itertools as I
+ PY2, PY3 = True, False
+ def bin(x): return x
+ def py23(x, y): return x
+ range = xrange
+ long = long
+ imap = I.imap
+ def byteseq(seq): return "".join(map(chr, seq))
+ def iterkeys(m): return m.iterkeys()
+ def itervalues(m): return m.itervalues()
+ def iteritems(m): return m.iteritems()
+ from cStringIO import StringIO
+ MAXFIXNUM = SYS.maxint
DEBUGP = hasattr(SYS, "gettotalrefcount")
any = True
if k >= limk: limk = k + 1
me.assertTrue(me._mkkey(k) in map)
- me.assertTrue(map.has_key(me._mkkey(k)))
+ if PY2: me.assertTrue(map.has_key(me._mkkey(k)))
me.assertEqual(me._getvalue(map[me._mkkey(k)]), v)
me.assertEqual(me._getvalue(map.get(me._mkkey(k))), v)
if any: me.assertTrue(me._mkkey(k) in map)
- me.assertFalse(map.has_key(me._mkkey(limk)))
+ if PY2: me.assertFalse(map.has_key(me._mkkey(limk)))
me.assertRaises(KeyError, lambda: map[me._mkkey(limk)])
me.assertEqual(map.get(me._mkkey(limk)), None)
- for listfn, getfn in [(lambda x: x.keys(), me._getkey),
- (lambda x: x.values(), me._getvalue),
- (lambda x: x.items(), me._getitem)]:
- rlist, mlist = listfn(map), listfn(model)
- me.assertEqual(type(rlist), list)
- rlist = B.map(getfn, rlist)
- rlist.sort(); mlist.sort(); me.assertEqual(rlist, mlist)
- for iterfn, getfn in [(lambda x: x.iterkeys(), me._getkey),
- (lambda x: x.itervalues(), me._getvalue),
- (lambda x: x.iteritems(), me._getitem)]:
- me.assertEqual(set(imap(getfn, iterfn(map))), set(iterfn(model)))
+
+ if PY3:
+ empty = set()
+
+ for k, v in iteritems(map):
+ me.assertTrue(k in map.keys())
+ me.assertTrue((k, v) in map.items())
+ me.assertFalse(me._mkkey(limk) in map.keys())
+
+ for viewfn, getfn in [(lambda x: x.keys(), me._getkey),
+ (lambda x: x.items(), me._getitem)]:
+ rview, rview2, mview = viewfn(map), viewfn(map), viewfn(model)
+ me.assertEqual(set(imap(getfn, rview)), set(mview))
+ me.assertEqual(rview, rview2)
+ me.assertEqual(rview, set(rview2))
+ me.assertEqual(rview | empty, set(rview))
+ me.assertEqual(rview | rview2, set(rview))
+ me.assertEqual(rview ^ empty, set(rview))
+ me.assertEqual(rview ^ rview, empty)
+ me.assertEqual(rview & empty, empty)
+ me.assertEqual(len(rview), len(model))
+
+ if any: subset = set(rview2); subset.pop()
+ superset = set(rview2); superset.add(object())
+
+ me.assertFalse(rview < rview2)
+ me.assertTrue(rview < superset)
+ me.assertFalse(superset < rview)
+ me.assertFalse(rview < empty)
+ if any:
+ me.assertTrue(empty < rview)
+ me.assertTrue(subset < rview)
+ me.assertFalse(rview < subset)
+
+ me.assertTrue(rview <= rview2)
+ me.assertTrue(rview <= superset)
+ me.assertFalse(superset <= rview)
+ if any:
+ me.assertTrue(empty <= rview)
+ me.assertFalse(rview <= empty)
+ me.assertTrue(subset <= rview)
+ me.assertFalse(rview <= subset)
+
+ me.assertTrue(rview >= rview2)
+ me.assertTrue(superset >= rview)
+ me.assertFalse(rview >= superset)
+ if any:
+ me.assertTrue(rview >= empty)
+ me.assertFalse(empty >= rview)
+ me.assertTrue(rview >= subset)
+ me.assertFalse(subset >= rview)
+
+ me.assertFalse(rview > rview2)
+ me.assertTrue(superset > rview)
+ me.assertFalse(rview > superset)
+ me.assertFalse(empty > rview)
+ if any:
+ me.assertTrue(rview > empty)
+ me.assertTrue(rview > subset)
+ me.assertFalse(subset > rview)
+
+ else:
+ for listfn, getfn in [(lambda x: x.keys(), me._getkey),
+ (lambda x: x.values(), me._getvalue),
+ (lambda x: x.items(), me._getitem)]:
+ rlist, mlist = listfn(map), listfn(model)
+ me.assertEqual(type(rlist), list)
+ rlist = B.map(getfn, rlist)
+ rlist.sort(); mlist.sort(); me.assertEqual(rlist, mlist)
+ for iterfn, getfn in [(lambda x: x.iterkeys(), me._getkey),
+ (lambda x: x.itervalues(), me._getvalue),
+ (lambda x: x.iteritems(), me._getitem)]:
+ me.assertEqual(set(imap(getfn, iterfn(map))), set(iterfn(model)))
class MutableMappingTestMixin (ImmutableMappingTextMixin):
map = emptymapfn()
me.assertEqual(len(map), 0)
- def check_views():
- me.check_immutable_mapping(map, model)
+ if not PY3:
+ def check_views():
+ me.check_immutable_mapping(map, model)
+ else:
+ kview, iview, vview = map.keys(), map.items(), map.values()
+ def check_views():
+ me.check_immutable_mapping(map, model)
+ me.assertEqual(set(imap(me._getkey, kview)), model.keys())
+ me.assertEqual(set(imap(me._getitem, iview)), model.items())
+ me.assertEqual(set(imap(me._getvalue, vview)), set(model.values()))
model = { 1: 101, 2: 202, 4: 404 }
for k, v in iteritems(model): map[me._mkkey(k)] = me._mkvalue(v)
model.update({ 2: 212, 6: 606, 7: 707 })
map.update({ me._mkkey(2): me._mkvalue(212),
- me._mkkey(6): me._mkvalue(606),
- me._mkkey(7): me._mkvalue(707) })
+ me._mkkey(6): me._mkvalue(606) },
+ **{ me._mkkey(7): me._mkvalue(707) })
check_views()
model[9] = 909