From 33da30266c535e02812096045347a49e9f9bb6e1 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Mon, 21 Dec 2015 20:10:46 -0600 Subject: [PATCH] Ensure `min` and `max` of `_.random` are swapped if `min` > `max`. --- lodash.js | 40 ++++++++++++++++++++++------------------ test/test.js | 14 ++++++++++++++ 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/lodash.js b/lodash.js index 3055baa76..1da68ed09 100644 --- a/lodash.js +++ b/lodash.js @@ -11651,29 +11651,33 @@ if (floating && typeof floating != 'boolean' && isIterateeCall(min, max, floating)) { max = floating = undefined; } - var noMin = min === undefined, - noMax = max === undefined; - if (floating === undefined) { - if (noMax && typeof min == 'boolean') { - floating = min; - min = 1; - } - else if (typeof max == 'boolean') { + if (typeof max == 'boolean') { floating = max; - noMax = true; + max = undefined; + } + else if (typeof min == 'boolean') { + floating = min; + min = undefined; } } - if (noMin && noMax) { - max = 1; - noMax = false; - } - min = toNumber(min) || 0; - if (noMax) { - max = min; + if (min === undefined && max === undefined) { min = 0; - } else { - max = toNumber(max) || 0; + max = 1; + } + else { + min = toNumber(min) || 0; + if (max === undefined) { + max = min; + min = 0; + } else { + max = toNumber(max) || 0; + } + } + if (min > max) { + var temp = min; + min = max; + max = temp; } if (floating || min % 1 || max % 1) { var rand = nativeRandom(); diff --git a/test/test.js b/test/test.js index f415c67df..175f09709 100644 --- a/test/test.js +++ b/test/test.js @@ -15407,6 +15407,20 @@ })); }); + QUnit.test('should swap `min` and `max` when `min` > `max`', function(assert) { + assert.expect(1); + + var min = 4, + max = 2, + expected = [2, 3, 4]; + + var actual = lodashStable.uniq(lodashStable.map(array, function() { + return _.random(min, max); + })).sort(); + + assert.deepEqual(actual, expected); + }); + QUnit.test('should support large integer values', function(assert) { assert.expect(2);