Exemplo n.º 1
0
    def test_popitem(self):
        # dict.popitem()
        for copymode in -1, +1:
            # -1: b has same structure as a
            # +1: b is a.copy()
            for log2size in range(12):
                size = 2**log2size
                a = ordereddict()
                b = ordereddict()
                for i in range(size):
                    a[repr(i)] = i
                    if copymode < 0:
                        b[repr(i)] = i
                if copymode > 0:
                    b = a.copy()
                for i in range(size):
                    ka, va = ta = a.popitem()
                    self.assertEqual(va, int(ka))
                    kb, vb = tb = b.popitem()
                    self.assertEqual(vb, int(kb))
                    self.assert_(not (copymode < 0 and ta != tb))
                self.assert_(not a)
                self.assert_(not b)

        d = ordereddict()
        self.assertRaises(KeyError, d.popitem)
Exemplo n.º 2
0
    def test_fromkeys(self):
        od1 = ordereddict([
            ('a', None),
            ('b', None),
            ('c', None),
        ])
        self.assertEqual(ordereddict.fromkeys('abc'), od1)
        d = ordereddict()
        self.assert_(not (d.fromkeys('abc') is d))
        self.assertEqual(d.fromkeys('abc'), od1)
        self.assertEqual(d.fromkeys((4, 5), 0), ordereddict(((4, 0), (5, 0))))
        self.assertEqual(d.fromkeys([]), {})

        def g():
            yield 1

        self.assertEqual(d.fromkeys(g()), ordereddict(((1, None), )))
        self.assertRaises(TypeError, {}.fromkeys, 3)

        class dictlike(ordereddict):
            pass

        self.assertEqual(dictlike.fromkeys('a'), {'a': None})
        self.assertEqual(dictlike().fromkeys('a'), {'a': None})
        self.assert_(type(dictlike.fromkeys('a')) is dictlike)
        self.assert_(type(dictlike().fromkeys('a')) is dictlike)

        class mydict(ordereddict):
            def __new__(cls):
                return UserDict.UserDict()

        ud = mydict.fromkeys('ab')
        self.assertEqual(ud, {'a': None, 'b': None})
        self.assert_(isinstance(ud, UserDict.UserDict))
        self.assertRaises(TypeError, dict.fromkeys)

        class Exc(Exception):
            pass

        class baddict1(dict):
            def __init__(self):
                raise Exc()

        self.assertRaises(Exc, baddict1.fromkeys, [1])

        class BadSeq(object):
            def __iter__(self):
                return self

            def next(self):
                raise Exc()

        self.assertRaises(Exc, ordereddict.fromkeys, BadSeq())

        class baddict2(ordereddict):
            def __setitem__(self, key, value):
                raise Exc()

        self.assertRaises(Exc, baddict2.fromkeys, [1])
Exemplo n.º 3
0
    def test_keys(self):
        d = ordereddict()
        self.assertEqual(d.keys(), [])
        d = ordereddict([('a', 1), ('b', 2)])
        k = d.keys()
        self.assert_(d.has_key('a'))
        self.assert_(d.has_key('b'))

        self.assertRaises(TypeError, d.keys, None)
Exemplo n.º 4
0
    def test_setdefault(self):
        # ordereddict.setdefault()
        d = ordereddict()
        self.assert_(d.setdefault('key0') is None)
        d.setdefault('key0', [])
        self.assert_(d.setdefault('key0') is None)
        d.setdefault('key', []).append(3)
        self.assertEqual(d['key'][0], 3)
        d.setdefault('key', []).append(4)
        self.assertEqual(len(d['key']), 2)
        self.assertRaises(TypeError, d.setdefault)

        class Exc(Exception):
            pass

        class BadHash(object):
            fail = False

            def __hash__(self):
                if self.fail:
                    raise Exc()
                else:
                    return 42

        x = BadHash()
        d[x] = 42
        x.fail = True
        self.assertRaises(Exc, d.setdefault, x, [])
Exemplo n.º 5
0
    def test_values(self):
        d = ordereddict()
        self.assertEqual(d.values(), [])
        d[1] = 2
        self.assertEqual(d.values(), [2])

        self.assertRaises(TypeError, d.values, None)
Exemplo n.º 6
0
 def test_tuple_keyerror(self):
     # SF #1576657
     d = ordereddict()
     try:
         d[(1, )]
     except KeyError, e:
         self.assertEqual(e.args, ((1, ), ))
Exemplo n.º 7
0
 def test_copy(self):
     d = ordereddict()
     d[1] = 1
     d[2] = 2
     d[3] = 3
     self.assertEqual(d.copy(), {1: 1, 2: 2, 3: 3})
     self.assertEqual({}.copy(), {})
     self.assertRaises(TypeError, d.copy, None)
Exemplo n.º 8
0
    def test_items(self):
        d = ordereddict()
        self.assertEqual(d.items(), [])

        d[1] = 2
        self.assertEqual(d.items(), [(1, 2)])

        self.assertRaises(TypeError, d.items, None)
Exemplo n.º 9
0
    def test_repr(self):
        d = ordereddict()
        self.assertEqual(repr(d), 'ordereddict([])')
        d[1] = 2
        self.assertEqual(repr(d), 'ordereddict([(1, 2)])')
        d = ordereddict()
        d[1] = d
        self.assertEqual(repr(d), 'ordereddict([(1, {...})])')

        class Exc(Exception):
            pass

        class BadRepr(object):
            def __repr__(self):
                raise Exc()

        d = {1: BadRepr()}
        self.assertRaises(Exc, repr, d)
Exemplo n.º 10
0
    def test_clear(self):
        d = ordereddict()
        d[1] = 1
        d[2] = 2
        d[3] = 3
        d.clear()
        self.assertEqual(d, {})

        self.assertRaises(TypeError, d.clear, None)
Exemplo n.º 11
0
    def test_pop(self):
        # Tests for pop with specified key
        d = ordereddict()
        k, v = 'abc', 'def'
        d[k] = v
        self.assertRaises(KeyError, d.pop, 'ghi')

        self.assertEqual(d.pop(k), v)
        self.assertEqual(len(d), 0)

        self.assertRaises(KeyError, d.pop, k)

        # verify longs/ints get same value when key > 32 bits (for 64-bit archs)
        # see SF bug #689659
        x = 4503599627370496L
        y = 4503599627370496
        h = ordereddict((
            (x, 'anything'),
            (y, 'something else'),
        ))
        self.assertEqual(h[x], h[y])

        self.assertEqual(d.pop(k, v), v)
        d[k] = v
        self.assertEqual(d.pop(k, 1), v)

        self.assertRaises(TypeError, d.pop)

        class Exc(Exception):
            pass

        class BadHash(object):
            fail = False

            def __hash__(self):
                if self.fail:
                    raise Exc()
                else:
                    return 42

        x = BadHash()
        d[x] = 42
        x.fail = True
        self.assertRaises(Exc, d.pop, x)
Exemplo n.º 12
0
    def test_has_key(self):
        d = ordereddict()
        self.assert_(not d.has_key('a'))
        d['a'] = 1
        d['b'] = 2
        k = d.keys()
        k.sort()
        self.assertEqual(k, ['a', 'b'])

        self.assertRaises(TypeError, d.has_key)
Exemplo n.º 13
0
    def test_contains(self):
        d = ordereddict()
        self.assert_(not ('a' in d))
        self.assert_('a' not in d)
        d['a'] = 1
        d['b'] = 2
        self.assert_('a' in d)
        self.assert_('b' in d)
        self.assert_('c' not in d)

        self.assertRaises(TypeError, d.__contains__)
Exemplo n.º 14
0
 def test_mutatingiteration(self):
     d = ordereddict()
     d[1] = 1
     try:
         for i in d:
             d[i + 1] = 1
     except RuntimeError:
         pass
     else:
         self.fail(
             "changing dict size during iteration doesn't raise Error")
Exemplo n.º 15
0
 def test_get(self):
     d = ordereddict()
     self.assert_(d.get('c') is None)
     self.assertEqual(d.get('c', 3), 3)
     d['a'] = 1
     d['b'] = 2
     self.assert_(d.get('c') is None)
     self.assertEqual(d.get('c', 3), 3)
     self.assertEqual(d.get('a'), 1)
     self.assertEqual(d.get('a', 3), 1)
     self.assertRaises(TypeError, d.get)
     self.assertRaises(TypeError, d.get, None, None, None)
Exemplo n.º 16
0
    def test_getitem(self):
        d = ordereddict()
        d['a'] = 1
        d['b'] = 2
        self.assertEqual(d['a'], 1)
        self.assertEqual(d['b'], 2)
        d['c'] = 3
        d['a'] = 4
        self.assertEqual(d['c'], 3)
        self.assertEqual(d['a'], 4)
        del d['b']
        self.assertEqual(d, {'a': 4, 'c': 3})

        self.assertRaises(TypeError, d.__getitem__)

        class BadEq(object):
            def __eq__(self, other):
                raise Exc()

        d = ordereddict()
        d[BadEq()] = 42
        self.assertRaises(KeyError, d.__getitem__, 23)

        class Exc(Exception):
            pass

        class BadHash(object):
            fail = False

            def __hash__(self):
                if self.fail:
                    raise Exc()
                else:
                    return 42

        x = BadHash()
        d[x] = 42
        x.fail = True
        self.assertRaises(Exc, d.__getitem__, x)
Exemplo n.º 17
0
 def test_constructor(self):
     # calling built-in types without argument must return empty
     self.assertEqual(ordereddict(), {})
     self.assert_(ordereddict() is not {})
Exemplo n.º 18
0
 def test_len(self):
     d = ordereddict()
     self.assertEqual(len(d), 0)
     d['a'] = 1
     d['b'] = 2
     self.assertEqual(len(d), 2)
Exemplo n.º 19
0
 def __init__(self):
     self.d = ordereddict()
     self.d[1] = 1
     self.d[2] = 2
     self.d[3] = 3
Exemplo n.º 20
0
    def test_update(self):
        d = ordereddict()
        d.update(ordereddict([(1, 100)]))
        d.update(ordereddict([(2, 20)]))
        d.update(ordereddict([(1, 1), (2, 2), (3, 3)]))
        # AvdN: should this fail
        self.assertEqual(d, {1: 1, 2: 2, 3: 3})

        d.update()
        self.assertEqual(d, {1: 1, 2: 2, 3: 3})

        self.assertRaises((TypeError, AttributeError), d.update, None)

        class SimpleUserDict():
            def __init__(self):
                self.d = ordereddict()
                self.d[1] = 1
                self.d[2] = 2
                self.d[3] = 3

            def keys(self):
                return self.d.keys()

            def __getitem__(self, i):
                return self.d[i]

        d.clear()
        d.update(SimpleUserDict())
        self.assertEqual(d, {1: 1, 2: 2, 3: 3})

        class Exc(Exception):
            pass

        d.clear()

        class FailingUserDict:
            def keys(self):
                raise Exc

        self.assertRaises(Exc, d.update, FailingUserDict())

        class FailingUserDict:
            def keys(self):
                class BogonIter:
                    def __init__(self):
                        self.i = 1

                    def __iter__(self):
                        return self

                    def next(self):
                        if self.i:
                            self.i = 0
                            return 'a'
                        raise Exc

                return BogonIter()

            def __getitem__(self, key):
                return key

        self.assertRaises(Exc, d.update, FailingUserDict())

        class FailingUserDict:
            def keys(self):
                class BogonIter:
                    def __init__(self):
                        self.i = ord('a')

                    def __iter__(self):
                        return self

                    def next(self):
                        if self.i <= ord('z'):
                            rtn = chr(self.i)
                            self.i += 1
                            return rtn
                        raise StopIteration

                return BogonIter()

            def __getitem__(self, key):
                raise Exc

        self.assertRaises(Exc, d.update, FailingUserDict())

        class badseq(object):
            def __iter__(self):
                return self

            def next(self):
                raise Exc()

        self.assertRaises(Exc, {}.update, badseq())

        self.assertRaises(ValueError, {}.update, [(1, 2, 3)])