tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }