bug1101821.js (2281B)
1 // Makes it easier for fuzzers to get max or min statements with multiple arguments. 2 function test(a, b, c, d, e, f) { 3 var r = 0 4 r += Math.max(a); 5 r += Math.max(a,b); 6 r += Math.max(a,b,c); 7 r += Math.max(a,b,c,d); 8 r += Math.max(a,b,c,d,e); 9 r += Math.max(a,b,c,d,e,f); 10 r += Math.min(a); 11 r += Math.min(a,b); 12 r += Math.min(a,b,c); 13 r += Math.min(a,b,c,d); 14 r += Math.min(a,b,c,d,e); 15 r += Math.min(a,b,c,d,e,f); 16 return r; 17 } 18 for (var i=0; i<10; i++) { 19 assertEq(test(12,5,32,6,18,2), 186); 20 assertEq(test(1,5,3,6,18,-10), 48); 21 assertEq(test(-19,5,20,6,18,1), -48); 22 } 23 24 // Test max/min result up to 5 arguments. 25 for (var i=1; i<5; i++) { 26 var args = []; 27 for (var j=0; j<i; j++) 28 args[args.length] = "arg" + j; 29 var max = new Function(args, "return Math.max("+args.join(",")+");"); 30 var min = new Function(args, "return Math.min("+args.join(",")+");"); 31 32 var input = []; 33 for (var j=0; j<i; j++) { 34 input[input.length] = j; 35 } 36 37 permutate(input, function (a) { 38 var min_value = min.apply(undefined, a); 39 var max_value = max.apply(undefined, a); 40 assertEq(min_value, minimum(a)); 41 assertEq(max_value, maximum(a)); 42 }); 43 } 44 45 function minimum(arr) { 46 var min = arr[0] 47 for (var i=1; i<arr.length; i++) { 48 if (min > arr[i]) 49 min = arr[i] 50 } 51 return min 52 } 53 function maximum(arr) { 54 var max = arr[0] 55 for (var i=1; i<arr.length; i++) { 56 if (max < arr[i]) 57 max = arr[i] 58 } 59 return max 60 } 61 62 function permutate(array, callback) { 63 function p(array, index, callback) { 64 function swap(a, i1, i2) { 65 var t = a[i1]; 66 a[i1] = a[i2]; 67 a[i2] = t; 68 } 69 70 if (index == array.length - 1) { 71 callback(array); 72 return 1; 73 } else { 74 var count = p(array, index + 1, callback); 75 for (var i = index + 1; i < array.length; i++) { 76 swap(array, i, index); 77 count += p(array, index + 1, callback); 78 swap(array, i, index); 79 } 80 return count; 81 } 82 } 83 84 if (!array || array.length == 0) { 85 return 0; 86 } 87 return p(array, 0, callback); 88 }