Skip to content

Commit 699824b

Browse files
BCSharpslozier
authored andcommitted
Fix downward slices for positive base arrays
1 parent 84de081 commit 699824b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Src/IronPython/Runtime/Operations/ArrayOps.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ private static void FixSlice(Slice slice, Array a, out int ostart, out int ostop
495495
if (ostop < 0 && lb >= 0) {
496496
ostop += ub + 1;
497497
}
498-
if (ostop < 0) {
498+
if (ostop < lb) {
499499
ostop = ostep > 0 ? lb : lb - 1;
500500
}
501501
} else if (ostop > ub) {

Tests/test_array.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,4 +497,20 @@ def test_equality_rank(self):
497497
self.assertTrue(c != d)
498498
self.assertFalse(d != d1)
499499

500+
def test_slice_down(self):
501+
#arr = System.Array[int]((2, 3, 4), base=2)
502+
arr = System.Array.CreateInstance(int, (3,), (2,))
503+
for i in range(2, 2 + 3):
504+
arr[i] = i
505+
506+
self.assertEqual(arr[-1:-4:-1], System.Array[int]((4, 3, 2)))
507+
self.assertEqual(arr[-1:-5:-1], System.Array[int]((4, 3, 2)))
508+
self.assertEqual(arr[-1:-6:-1], System.Array[int]((4, 3, 2)))
509+
510+
self.assertEqual(arr[2:1:-1], System.Array[int]((2,)))
511+
self.assertEqual(arr[2:-5:-1], System.Array[int]((2,)))
512+
self.assertEqual(arr[2:-6:-1], System.Array[int]((2,)))
513+
self.assertEqual(arr[1:-5:-1], System.Array[int](()))
514+
self.assertEqual(arr[0:-5:-1], System.Array[int](()))
515+
500516
run_test(__name__)

0 commit comments

Comments
 (0)