File: apptest_defaultdict.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (121 lines) | stat: -rw-r--r-- 3,040 bytes parent folder | download | duplicates (2)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# spaceconfig = {"usemodules" : ["_collections"]}

from _collections import defaultdict
from pytest import raises

def test_basics():
    d = defaultdict(list)
    assert d.default_factory is list
    assert defaultdict.default_factory.__get__(d) is list
    l = d[5]
    d[5].append(42)
    d[5].append(43)
    assert l == [42, 43]
    l2 = []
    d[5] = l2
    d[5].append(44)
    assert l == [42, 43] and l2 == [44]

def test_module():
    assert repr(defaultdict) in (
        "<class 'collections.defaultdict'>",   # on PyPy
        "<type 'collections.defaultdict'>")    # on CPython

def test_keyerror_without_factory():
    for d1 in [defaultdict(), defaultdict(None)]:
        for key in ['foo', (1,)]:
            try:
                d1[key]
            except KeyError as err:
                assert err.args[0] == key
            else:
                assert 0, "expected KeyError"

def test_noncallable():
    raises(TypeError, defaultdict, [('a', 5)])
    d = defaultdict(None, [('a', 5)])
    assert list(d.items()) == [('a', 5)]

def test_kwds():
    d = defaultdict(default_factory=5)
    assert list(d.keys()) == ['default_factory']

def test_copy():
    def f():
        return 42
    d = defaultdict(f, {2: 3})
    #
    d1 = d.copy()
    assert type(d1) is defaultdict
    assert len(d1) == 1
    assert d1[2] == 3
    assert d1[3] == 42
    #
    import copy
    d2 = copy.deepcopy(d)
    assert type(d2) is defaultdict
    assert len(d2) == 1
    assert d2[2] == 3
    assert d2[3] == 42

def test_no_dict():
    assert not hasattr(defaultdict(), '__dict__')

def test_no_setattr():
    class D(defaultdict):
        def __setattr__(self, attr, name):
            raise AssertionError
    d = D(int)
    assert d['5'] == 0
    d['6'] += 3
    assert d['6'] == 3

def test_default_factory():
    f = lambda: 42
    d = defaultdict(f)
    assert d.default_factory is f
    d.default_factory = lambda: 43
    assert d['5'] == 43

def test_reduce():
    d = defaultdict(None, {3: 4})
    dict_iter = d.__reduce__()[4]
    assert type(dict_iter) is type(iter(d.items()))

def test_rec_repr():
    class X(defaultdict):
        def mydefault(self):
            pass
    d = X.__new__(X)
    d.__init__(d.mydefault)
    assert repr(d).endswith('X(..., {})>, {})')

def test_subclass_repr():
    class subclass(defaultdict):
        pass
    assert repr(subclass()) == 'subclass(None, {})'

def test_generic_alias():
    import _collections
    ga = _collections.defaultdict[int]
    assert ga.__origin__ is _collections.defaultdict
    assert ga.__args__ == (int, )

def test_union():
    import _collections
    d1 = _collections.defaultdict(int)
    d1[1], d1[2]
    d2 = _collections.defaultdict(str)
    d2[2], d2[3]
    d = d1 | d2
    assert d.default_factory is int
    assert d == {1: 0, 2: "", 3: ""}

    d = dict(d1) | d2
    assert d.default_factory is str
    assert d == {1: 0, 2: "", 3: ""}

    with raises(TypeError):
        d1 | list(d2.items())
    with raises(TypeError):
        list(d2.items()) | d1