Ensure _.sortedIndex and _.sortedLastIndex align with _.sortBy.

This commit is contained in:
John-David Dalton
2014-07-27 19:40:10 -07:00
parent 9cc8f5dd07
commit 1580453f4b
2 changed files with 25 additions and 5 deletions

View File

@@ -428,7 +428,7 @@
* @returns {number} Returns the sort order indicator for `object`. * @returns {number} Returns the sort order indicator for `object`.
*/ */
function compareAscending(object, other) { function compareAscending(object, other) {
return baseCompareAscending(object.criteria, other.criteria) || object.index - other.index; return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
} }
/** /**
@@ -2404,12 +2404,14 @@
while (low < high) { while (low < high) {
var mid = (low + high) >>> 1, var mid = (low + high) >>> 1,
computed = iterator(array[mid]); computed = iterator(array[mid]),
setLow = retHighest ? computed <= value : computed < value;
if (hintNum && typeof computed != 'undefined') { if (hintNum && typeof computed != 'undefined') {
computed = +computed || 0; computed = +computed;
setLow = computed != computed || setLow;
} }
if (retHighest ? computed <= value : computed < value) { if (setLow) {
low = mid + 1; low = mid + 1;
} else { } else {
high = mid; high = mid;

View File

@@ -9684,7 +9684,25 @@
strictEqual(actual, 1); strictEqual(actual, 1);
}); });
test('`_.' + methodName + '` supports arrays with lengths larger than `Math.pow(2, 31) - 1`', 1, function() { test('`_.' + methodName + '` should align with `_.sortBy`', 8, function() {
var array = [NaN, {}, NaN, 1, 2, undefined];
deepEqual(_.sortBy(array), array);
strictEqual(func(array, 3), 5);
array = [1, 2, NaN, {}, NaN, undefined];
deepEqual(_.sortBy(array), array);
strictEqual(func(array, 3), 5);
array = [NaN, {}, NaN, '1', '2', undefined];
deepEqual(_.sortBy(array), array);
strictEqual(func(array, '3'), 5);
array = ['1', '2', NaN, {}, NaN, undefined];
deepEqual(_.sortBy(array), array);
strictEqual(func(array, '3'), 2);
});
test('`_.' + methodName + '` should support arrays larger than `Math.pow(2, 31) - 1`', 1, function() {
var length = Math.pow(2, 32) - 1, var length = Math.pow(2, 32) - 1,
index = length - 1, index = length - 1,
array = Array(length), array = Array(length),