5
from pandas.core.indexes.frozen import FrozenList
10
unicode_container = FrozenList(["\u05d0", "\u05d1", "c"])
12
def setup_method(self, _):
13
self.lst = [1, 2, 3, 4, 5]
14
self.container = FrozenList(self.lst)
16
def check_mutable_error(self, *args, **kwargs):
17
# Pass whatever function you normally would to pytest.raises
18
# (after the Exception kind).
19
mutable_regex = re.compile("does not support mutable operations")
20
msg = "'(_s)?re.(SRE_)?Pattern' object is not callable"
21
with pytest.raises(TypeError, match=msg):
22
mutable_regex(*args, **kwargs)
24
def test_no_mutable_funcs(self):
28
self.check_mutable_error(setitem)
31
self.container[1:2] = 3
33
self.check_mutable_error(setslice)
38
self.check_mutable_error(delitem)
41
del self.container[0:3]
43
self.check_mutable_error(delslice)
45
mutable_methods = ("extend", "pop", "remove", "insert")
47
for meth in mutable_methods:
48
self.check_mutable_error(getattr(self.container, meth))
50
def test_slicing_maintains_type(self):
51
result = self.container[1:2]
52
expected = self.lst[1:2]
53
self.check_result(result, expected)
55
def check_result(self, result, expected):
56
assert isinstance(result, FrozenList)
57
assert result == expected
59
def test_string_methods_dont_fail(self):
64
def test_tricky_container(self):
65
repr(self.unicode_container)
66
str(self.unicode_container)
69
result = self.container + (1, 2, 3)
70
expected = FrozenList(self.lst + [1, 2, 3])
71
self.check_result(result, expected)
73
result = (1, 2, 3) + self.container
74
expected = FrozenList([1, 2, 3] + self.lst)
75
self.check_result(result, expected)
78
q = r = self.container
81
self.check_result(q, self.lst + [5])
83
# Other shouldn't be mutated.
84
self.check_result(r, self.lst)
87
result = self.container.union((1, 2, 3))
88
expected = FrozenList(self.lst + [1, 2, 3])
89
self.check_result(result, expected)
91
def test_difference(self):
92
result = self.container.difference([2])
93
expected = FrozenList([1, 3, 4, 5])
94
self.check_result(result, expected)
96
def test_difference_dupe(self):
97
result = FrozenList([1, 2, 3, 2]).difference([2])
98
expected = FrozenList([1, 3])
99
self.check_result(result, expected)
101
def test_tricky_container_to_bytes_raises(self):
103
msg = "^'str' object cannot be interpreted as an integer$"
104
with pytest.raises(TypeError, match=msg):
105
bytes(self.unicode_container)