From be71d957e1a422a545d508f0ae3c2fb96141b59a Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 4 Jan 2011 17:00:48 -0300 Subject: [PATCH] Fixed: indexOfObject:inSortedRange: searched 1 index too far when a range was applied. --- Foundation/CPArray/CPArray.j | 2 +- Tests/Foundation/CPArrayTest.j | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Foundation/CPArray/CPArray.j b/Foundation/CPArray/CPArray.j index 11abdfeeb..00d1d6461 100755 --- a/Foundation/CPArray/CPArray.j +++ b/Foundation/CPArray/CPArray.j @@ -418,7 +418,7 @@ CPBinarySearchingInsertionIndex = 1 << 10; return (options & CPBinarySearchingInsertionIndex) ? 0 : CPNotFound; var first = aRange ? aRange.location : 0, - last = aRange ? CPMaxRange(aRange) : [self count] - 1; + last = (aRange ? CPMaxRange(aRange) : [self count]) - 1; if (first < 0) _CPRaiseRangeException(self, _cmd, first, count); diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j index 10301b0d1..d205e27f3 100644 --- a/Tests/Foundation/CPArrayTest.j +++ b/Tests/Foundation/CPArrayTest.j @@ -238,6 +238,19 @@ options:CPBinarySearchingLastEqual | CPBinarySearchingInsertionIndex usingComparator:numComparator] equals:6]; + + [self assert:[array indexOfObject:3 + inSortedRange:CPMakeRange(2, 6) // [ -, -, 1, 1, 2, 2, 3, 3, -, -, -] + options:CPBinarySearchingLastEqual | CPBinarySearchingInsertionIndex + usingComparator:numComparator] + equals:8 message:"inserting index at end of range"]; + + [self assert:[[1, 2, 2] indexOfObject:2 + inSortedRange:CPMakeRange(0, 2) // [1, 2] + options:CPBinarySearchingLastEqual | CPBinarySearchingInsertionIndex + usingComparator:numComparator] + equals:2 message:"insertion index should not be off by one when applying a range"]; + } - (void)testIndexOutOfBounds