|
6 | 6 | import pandas as pd
|
7 | 7 | from pandas._libs.index import (Int64Engine, UInt64Engine,
|
8 | 8 | Float64Engine, ObjectEngine)
|
| 9 | +from pandas._libs.lib import is_scalar |
| 10 | +import pandas.util.testing as tm |
9 | 11 |
|
10 | 12 |
|
11 | 13 | class TestNumericEngine(object):
|
@@ -52,12 +54,39 @@ def test_is_unique(self, values, expected, num_engine):
|
52 | 54 | e = num_engine(lambda: codes, len(codes))
|
53 | 55 | assert e.is_unique is expected
|
54 | 56 |
|
| 57 | + @pytest.mark.parametrize('values, value, expected', [ |
| 58 | + ([1, 2, 3], 2, 1), |
| 59 | + ([1, 2, 2, 3], 2, slice(1, 3)), |
| 60 | + ([3, 2, 2, 1], 2, np.array([False, True, True, False])), |
| 61 | + ([1, 2, 2, 1], 2, np.array([False, True, True, False])), |
| 62 | + ([1, 3, 2], 2, 2), |
| 63 | + ]) |
| 64 | + def test_get_loc(self, values, value, expected, num_engine): |
| 65 | + codes = np.array(values, dtype=num_engine._dtype) |
| 66 | + e = num_engine(lambda: codes, len(codes)) |
| 67 | + result = e.get_loc(value) |
| 68 | + |
| 69 | + if isinstance(expected, np.ndarray): |
| 70 | + assert (result == expected).all() |
| 71 | + else: |
| 72 | + assert result == expected |
| 73 | + |
| 74 | + @pytest.mark.parametrize('values, value, error', [ |
| 75 | + ([1, 2, 3], 4, KeyError), |
| 76 | + ([1, 2, 3], '4', KeyError), |
| 77 | + ]) |
| 78 | + def test_get_loc_raises(self, values, value, error, num_engine): |
| 79 | + codes = np.array(values, dtype=num_engine._dtype) |
| 80 | + e = num_engine(lambda: codes, len(codes)) |
| 81 | + with pytest.raises(error): |
| 82 | + e.get_loc(value) |
| 83 | + |
55 | 84 |
|
56 | 85 | class TestObjectEngine(object):
|
57 | 86 |
|
58 | 87 | def setup_class(cls):
|
59 |
| - cls.Engine = ObjectEngine |
60 | 88 | cls.dtype = object
|
| 89 | + cls.Engine = ObjectEngine |
61 | 90 |
|
62 | 91 | @pytest.mark.parametrize('data', [['a', 'b', 'c']])
|
63 | 92 | def test_engine_type(self, data):
|
@@ -92,3 +121,30 @@ def test_is_unique(self, values, expected):
|
92 | 121 | codes = np.array(values, dtype=self.dtype)
|
93 | 122 | e = self.Engine(lambda: codes, len(codes))
|
94 | 123 | assert e.is_unique is expected
|
| 124 | + |
| 125 | + @pytest.mark.parametrize('values, value, expected', [ |
| 126 | + (list('abc'), 'b', 1), |
| 127 | + (list('abbc'), 'b', slice(1, 3)), |
| 128 | + (list('cbba'), 'b', np.array([False, True, True, False])), |
| 129 | + (list('abba'), 'b', np.array([False, True, True, False])), |
| 130 | + (list('acb'), 'b', 2), |
| 131 | + ]) |
| 132 | + def test_get_loc(self, values, value, expected): |
| 133 | + codes = np.array(values, dtype=self.dtype) |
| 134 | + e = self.Engine(lambda: codes, len(codes)) |
| 135 | + result = e.get_loc(value) |
| 136 | + |
| 137 | + if isinstance(expected, np.ndarray): |
| 138 | + assert (result == expected).all() |
| 139 | + else: |
| 140 | + assert result == expected |
| 141 | + |
| 142 | + @pytest.mark.parametrize('values, value, error', [ |
| 143 | + (list('abc'), 'd', KeyError), |
| 144 | + (list('abc'), 4, KeyError), |
| 145 | + ]) |
| 146 | + def test_get_loc_raises(self, values, value, error): |
| 147 | + codes = np.array(values, dtype=self.dtype) |
| 148 | + e = self.Engine(lambda: codes, len(codes)) |
| 149 | + with pytest.raises(error): |
| 150 | + e.get_loc(value) |
0 commit comments