@@ -127,25 +127,101 @@ def test_insert(self):
127
127
expected = Index ([0 , pd .NaT , 1 , 2 , 3 , 4 ], dtype = object )
128
128
tm .assert_index_equal (result , expected )
129
129
130
+ def test_insert_edges_preserves_rangeindex (self ):
131
+ idx = Index (range (4 , 9 , 2 ))
132
+
133
+ result = idx .insert (0 , 2 )
134
+ expected = Index (range (2 , 9 , 2 ))
135
+ tm .assert_index_equal (result , expected , exact = True )
136
+
137
+ result = idx .insert (3 , 10 )
138
+ expected = Index (range (4 , 11 , 2 ))
139
+ tm .assert_index_equal (result , expected , exact = True )
140
+
141
+ def test_insert_middle_preserves_rangeindex (self ):
142
+ # insert in the middle
143
+ idx = Index (range (0 , 3 , 2 ))
144
+ result = idx .insert (1 , 1 )
145
+ expected = Index (range (3 ))
146
+ tm .assert_index_equal (result , expected , exact = True )
147
+
148
+ idx = idx * 2
149
+ result = idx .insert (1 , 2 )
150
+ expected = expected * 2
151
+ tm .assert_index_equal (result , expected , exact = True )
152
+
130
153
def test_delete (self ):
131
154
132
155
idx = RangeIndex (5 , name = "Foo" )
133
- expected = idx [1 :]. astype ( int )
156
+ expected = idx [1 :]
134
157
result = idx .delete (0 )
135
- # TODO: could preserve RangeIndex at the ends
136
- tm .assert_index_equal (result , expected , exact = "equiv" )
158
+ tm .assert_index_equal (result , expected , exact = True )
137
159
assert result .name == expected .name
138
160
139
- expected = idx [:- 1 ]. astype ( int )
161
+ expected = idx [:- 1 ]
140
162
result = idx .delete (- 1 )
141
- tm .assert_index_equal (result , expected , exact = "equiv" )
163
+ tm .assert_index_equal (result , expected , exact = True )
142
164
assert result .name == expected .name
143
165
144
166
msg = "index 5 is out of bounds for axis 0 with size 5"
145
167
with pytest .raises ((IndexError , ValueError ), match = msg ):
146
168
# either depending on numpy version
147
169
result = idx .delete (len (idx ))
148
170
171
+ def test_delete_preserves_rangeindex (self ):
172
+ idx = Index (range (2 ), name = "foo" )
173
+
174
+ result = idx .delete ([1 ])
175
+ expected = Index (range (1 ), name = "foo" )
176
+ tm .assert_index_equal (result , expected , exact = True )
177
+
178
+ result = idx .delete (1 )
179
+ tm .assert_index_equal (result , expected , exact = True )
180
+
181
+ def test_delete_preserves_rangeindex_list_at_end (self ):
182
+ idx = RangeIndex (0 , 6 , 1 )
183
+
184
+ loc = [2 , 3 , 4 , 5 ]
185
+ result = idx .delete (loc )
186
+ expected = idx [:2 ]
187
+ tm .assert_index_equal (result , expected , exact = True )
188
+
189
+ result = idx .delete (loc [::- 1 ])
190
+ tm .assert_index_equal (result , expected , exact = True )
191
+
192
+ def test_delete_preserves_rangeindex_list_middle (self ):
193
+ idx = RangeIndex (0 , 6 , 1 )
194
+
195
+ loc = [1 , 2 , 3 , 4 ]
196
+ result = idx .delete (loc )
197
+ expected = RangeIndex (0 , 6 , 5 )
198
+ tm .assert_index_equal (result , expected , exact = "equiv" ) # TODO: retain!
199
+
200
+ result = idx .delete (loc [::- 1 ])
201
+ tm .assert_index_equal (result , expected , exact = "equiv" ) # TODO: retain!
202
+
203
+ def test_delete_all_preserves_rangeindex (self ):
204
+ idx = RangeIndex (0 , 6 , 1 )
205
+
206
+ loc = [0 , 1 , 2 , 3 , 4 , 5 ]
207
+ result = idx .delete (loc )
208
+ expected = idx [:0 ]
209
+ tm .assert_index_equal (result , expected , exact = True )
210
+
211
+ result = idx .delete (loc [::- 1 ])
212
+ tm .assert_index_equal (result , expected , exact = True )
213
+
214
+ def test_delete_not_preserving_rangeindex (self ):
215
+ idx = RangeIndex (0 , 6 , 1 )
216
+
217
+ loc = [0 , 3 , 5 ]
218
+ result = idx .delete (loc )
219
+ expected = Int64Index ([1 , 2 , 4 ])
220
+ tm .assert_index_equal (result , expected , exact = True )
221
+
222
+ result = idx .delete (loc [::- 1 ])
223
+ tm .assert_index_equal (result , expected , exact = True )
224
+
149
225
def test_view (self ):
150
226
i = RangeIndex (0 , name = "Foo" )
151
227
i_view = i .view ()
0 commit comments