8th day of python challenges 111-117
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from pandas.core.indexes.frozen import FrozenList, FrozenNDArray
|
||||
from pandas.tests.test_base import CheckImmutable, CheckStringMixin
|
||||
from pandas.util import testing as tm
|
||||
|
||||
|
||||
class TestFrozenList(CheckImmutable, CheckStringMixin):
|
||||
mutable_methods = ("extend", "pop", "remove", "insert")
|
||||
unicode_container = FrozenList(["\u05d0", "\u05d1", "c"])
|
||||
|
||||
def setup_method(self, _):
|
||||
self.lst = [1, 2, 3, 4, 5]
|
||||
self.container = FrozenList(self.lst)
|
||||
self.klass = FrozenList
|
||||
|
||||
def test_add(self):
|
||||
result = self.container + (1, 2, 3)
|
||||
expected = FrozenList(self.lst + [1, 2, 3])
|
||||
self.check_result(result, expected)
|
||||
|
||||
result = (1, 2, 3) + self.container
|
||||
expected = FrozenList([1, 2, 3] + self.lst)
|
||||
self.check_result(result, expected)
|
||||
|
||||
def test_iadd(self):
|
||||
q = r = self.container
|
||||
|
||||
q += [5]
|
||||
self.check_result(q, self.lst + [5])
|
||||
|
||||
# Other shouldn't be mutated.
|
||||
self.check_result(r, self.lst)
|
||||
|
||||
def test_union(self):
|
||||
result = self.container.union((1, 2, 3))
|
||||
expected = FrozenList(self.lst + [1, 2, 3])
|
||||
self.check_result(result, expected)
|
||||
|
||||
def test_difference(self):
|
||||
result = self.container.difference([2])
|
||||
expected = FrozenList([1, 3, 4, 5])
|
||||
self.check_result(result, expected)
|
||||
|
||||
def test_difference_dupe(self):
|
||||
result = FrozenList([1, 2, 3, 2]).difference([2])
|
||||
expected = FrozenList([1, 3])
|
||||
self.check_result(result, expected)
|
||||
|
||||
def test_tricky_container_to_bytes_raises(self):
|
||||
# GH 26447
|
||||
msg = "^'str' object cannot be interpreted as an integer$"
|
||||
with pytest.raises(TypeError, match=msg):
|
||||
bytes(self.unicode_container)
|
||||
|
||||
|
||||
class TestFrozenNDArray(CheckImmutable, CheckStringMixin):
|
||||
mutable_methods = ("put", "itemset", "fill")
|
||||
|
||||
def setup_method(self, _):
|
||||
self.lst = [3, 5, 7, -2]
|
||||
self.klass = FrozenNDArray
|
||||
|
||||
with warnings.catch_warnings(record=True):
|
||||
warnings.simplefilter("ignore", FutureWarning)
|
||||
|
||||
self.container = FrozenNDArray(self.lst)
|
||||
self.unicode_container = FrozenNDArray(["\u05d0", "\u05d1", "c"])
|
||||
|
||||
def test_constructor_warns(self):
|
||||
# see gh-9031
|
||||
with tm.assert_produces_warning(FutureWarning):
|
||||
FrozenNDArray([1, 2, 3])
|
||||
|
||||
def test_tricky_container_to_bytes(self):
|
||||
bytes(self.unicode_container)
|
||||
|
||||
def test_shallow_copying(self):
|
||||
original = self.container.copy()
|
||||
assert isinstance(self.container.view(), FrozenNDArray)
|
||||
assert not isinstance(self.container.view(np.ndarray), FrozenNDArray)
|
||||
assert self.container.view() is not self.container
|
||||
tm.assert_numpy_array_equal(self.container, original)
|
||||
|
||||
# Shallow copy should be the same too
|
||||
assert isinstance(self.container._shallow_copy(), FrozenNDArray)
|
||||
|
||||
# setting should not be allowed
|
||||
def testit(container):
|
||||
container[0] = 16
|
||||
|
||||
self.check_mutable_error(testit, self.container)
|
||||
|
||||
def test_values(self):
|
||||
original = self.container.view(np.ndarray).copy()
|
||||
n = original[0] + 15
|
||||
|
||||
vals = self.container.values()
|
||||
tm.assert_numpy_array_equal(original, vals)
|
||||
|
||||
assert original is not vals
|
||||
vals[0] = n
|
||||
|
||||
assert isinstance(self.container, FrozenNDArray)
|
||||
tm.assert_numpy_array_equal(self.container.values(), original)
|
||||
assert vals[0] == n
|
||||
|
||||
def test_searchsorted(self):
|
||||
expected = 2
|
||||
assert self.container.searchsorted(7) == expected
|
||||
|
||||
with tm.assert_produces_warning(FutureWarning):
|
||||
assert self.container.searchsorted(v=7) == expected
|
||||
Reference in New Issue
Block a user