js/src/jit-test/tests/parallel/math-fcns.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // |jit-test| slow;
     2 load(libdir + "parallelarray-helpers.js");
     4 // The MathCache has 4096 entries, so ensure we overwrite at least one
     5 // entry by using > 4096 distinct inputs.
     7 var len = 5000;
     8 var iters = 100;
    10 // The problem we are trying to expose (Bugzilla 901000) is
    11 // a data-race on the MathCache; such a bug is inherently
    12 // non-deterministic.  On a 4 core Mac laptop:
    13 //
    14 // len == 10000 iters==1  replicates the problem on 2/10 runs,
    15 // len == 10000 iters==2  replicates the problem on 3/10 runs,
    16 // len == 10000 iters==5  replicates the problem on 6/10 runs,
    17 // len == 10000 iters==10 replicates the problem on 9/10 runs.
    18 //
    19 // len == 5000  iters==1  replicates the problem on 1/10 runs,
    20 // len == 5000  iters==2  replicates the problem on 4/10 runs,
    21 // len == 5000  iters==5  replicates the problem on 5/10 runs,
    22 // len == 5000  iters==10 replicates the problem on 9/10 runs.
    23 //
    24 // len == 2000  iters==1  replicates the problem on 0/10 runs,
    25 // len == 2000  iters==2  replicates the problem on 0/10 runs,
    26 // len == 2000  iters==5  replicates the problem on 0/10 runs,
    27 // len == 2000  iters==10 replicates the problem on 3/10 runs
    29 function check(fill) {
    30   var seq = Array.build(len, fill);
    31   for (var i = 0; i < iters; i++) {
    32     var par = Array.buildPar(len, fill);
    33     assertStructuralEq(par, seq);
    34   }
    35 }
    37 function checkAbs(a)   { check(function (i) { return Math.abs(a[i]);   }); }
    38 function checkAcos(a)  { check(function (i) { return Math.acos(a[i]);  }); }
    39 function checkAsin(a)  { check(function (i) { return Math.asin(a[i]);  }); }
    40 function checkAtan(a)  { check(function (i) { return Math.atan(a[i]);  }); }
    41 function checkAtan2(a) { check(function (i) { return Math.atan2(a[i]); }); }
    42 function checkCeil(a)  { check(function (i) { return Math.ceil(a[i]);  }); }
    43 function checkCos(a)   { check(function (i) { return Math.cos(a[i]);   }); }
    44 function checkExp(a)   { check(function (i) { return Math.exp(a[i]);   }); }
    45 function checkFloor(a) { check(function (i) { return Math.floor(a[i]); }); }
    46 function checkLog(a)   { check(function (i) { return Math.log(a[i]);   }); }
    47 function checkRound(a) { check(function (i) { return Math.round(a[i]); }); }
    48 function checkSin(a)   { check(function (i) { return Math.sin(a[i]);   }); }
    49 function checkSqrt(a)  { check(function (i) { return Math.sqrt(a[i]);  }); }
    50 function checkTan(a)   { check(function (i) { return Math.tan(a[i]);   }); }
    52 function callVariousUnaryMathFunctions() {
    53   // We might want to consider making this test adopt seedrandom.js
    54   // and call Math.seedrandom("seed") here ...
    55   // function fill(i) { return (2*Math.random())-1; }
    56   // function fill(i) { return (20*Math.random())-10; }
    57   //
    58   // ... but its easiest to just drop the pseudo-random input entirely.
    59   function fill(i) { return 10/i; }
    60   var input = Array.build(len, fill);
    62   checkAbs(input);    //print("abs");
    63   checkAcos(input);   //print("acos");
    64   checkAsin(input);   //print("asin");
    65   checkAtan(input);   //print("atan");
    67   checkAtan2(input);  //print("atan2");
    68   checkCeil(input);   //print("ceil");
    69   checkCos(input);    //print("cos");
    70   checkExp(input);    //print("exp");
    72   checkFloor(input);  //print("floor");
    73   checkLog(input);    //print("log");
    74   checkRound(input);  //print("round");
    75   checkSin(input);    //print("sin");
    77   checkSqrt(input);   //print("sqrt");
    78   checkTan(input);    //print("tan");
    79 }
    81 if (getBuildConfiguration().parallelJS)
    82   callVariousUnaryMathFunctions();

mercurial