// Makes it easier for fuzzers to get max or min statements with multiple arguments. function test(a, b, c, d, e, f) { var r = 0 r += Math.max(a); r += Math.max(a,b); r += Math.max(a,b,c); r += Math.max(a,b,c,d); r += Math.max(a,b,c,d,e); r += Math.max(a,b,c,d,e,f); r += Math.min(a); r += Math.min(a,b); r += Math.min(a,b,c); r += Math.min(a,b,c,d); r += Math.min(a,b,c,d,e); r += Math.min(a,b,c,d,e,f); return r; } for (var i=0; i<10; i++) { assertEq(test(12,5,32,6,18,2), 186); assertEq(test(1,5,3,6,18,-10), 48); assertEq(test(-19,5,20,6,18,1), -48); } // Test max/min result up to 5 arguments. for (var i=1; i<5; i++) { var args = []; for (var j=0; j<i; j++) args[args.length] = "arg" + j; var max = new Function(args, "return Math.max("+args.join(",")+");"); var min = new Function(args, "return Math.min("+args.join(",")+");"); var input = []; for (var j=0; j<i; j++) { input[input.length] = j; } permutate(input, function (a) { var min_value = min.apply(undefined, a); var max_value = max.apply(undefined, a); assertEq(min_value, minimum(a)); assertEq(max_value, maximum(a)); }); } function minimum(arr) { var min = arr[0] for (var i=1; i<arr.length; i++) { if (min > arr[i]) min = arr[i] } return min } function maximum(arr) { var max = arr[0] for (var i=1; i<arr.length; i++) { if (max < arr[i]) max = arr[i] } return max } function permutate(array, callback) { function p(array, index, callback) { function swap(a, i1, i2) { var t = a[i1]; a[i1] = a[i2]; a[i2] = t; } if (index == array.length - 1) { callback(array); return 1; } else { var count = p(array, index + 1, callback); for (var i = index + 1; i < array.length; i++) { swap(array, i, index); count += p(array, index + 1, callback); swap(array, i, index); } return count; } } if (!array || array.length == 0) { return 0; } return p(array, 0, callback); }