@@ -393,19 +393,51 @@ def test_iloc_exceeds_bounds(self):
393393 self .assertRaises (IndexError , lambda : df .iloc [- 30 ])
394394
395395 # slices are ok
396- result = df .iloc [:,4 :10 ]
396+ result = df .iloc [:,4 :10 ] # 0 < start < len < stop
397397 expected = df .iloc [:,4 :]
398398 assert_frame_equal (result ,expected )
399399
400- result = df .iloc [:,- 4 :- 10 ]
401- expected = df .iloc [:,- 4 :]
400+ result = df .iloc [:,- 4 :- 10 ] # stop < 0 < start < len
401+ expected = df .iloc [:,:0 ]
402+ assert_frame_equal (result ,expected )
403+
404+ result = df .iloc [:,10 :4 :- 1 ] # 0 < stop < len < start (down)
405+ expected = df .iloc [:,:4 :- 1 ]
406+ assert_frame_equal (result ,expected )
407+
408+ result = df .iloc [:,4 :- 10 :- 1 ] # stop < 0 < start < len (down)
409+ expected = df .iloc [:,4 ::- 1 ]
410+ assert_frame_equal (result ,expected )
411+
412+ result = df .iloc [:,- 10 :4 ] # start < 0 < stop < len
413+ expected = df .iloc [:,:4 ]
414+ assert_frame_equal (result ,expected )
415+
416+ result = df .iloc [:,10 :4 ] # 0 < stop < len < start
417+ expected = df .iloc [:,:0 ]
418+ assert_frame_equal (result ,expected )
419+
420+ result = df .iloc [:,- 10 :- 11 :- 1 ] # stop < start < 0 < len (down)
421+ expected = df .iloc [:,:0 ]
422+ assert_frame_equal (result ,expected )
423+
424+ result = df .iloc [:,10 :11 ] # 0 < len < start < stop
425+ expected = df .iloc [:,:0 ]
402426 assert_frame_equal (result ,expected )
403427
404428 # slice bounds exceeding is ok
405429 result = s .iloc [18 :30 ]
406430 expected = s .iloc [18 :]
407431 assert_series_equal (result ,expected )
408432
433+ result = s .iloc [30 :]
434+ expected = s .iloc [:0 ]
435+ assert_series_equal (result ,expected )
436+
437+ result = s .iloc [30 ::- 1 ]
438+ expected = s .iloc [::- 1 ]
439+ assert_series_equal (result ,expected )
440+
409441 # doc example
410442 def check (result ,expected ):
411443 str (result )
0 commit comments