js/src/jit-test/tests/auto-regress/bug739402.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/auto-regress/bug739402.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,142 @@
     1.4 +// |jit-test| slow;
     1.5 +
     1.6 +// Binary: cache/js-dbg-32-be41973873db-linux
     1.7 +// Flags: --ion-eager
     1.8 +//
     1.9 +function MersenneTwister19937() {
    1.10 +  N = 624;
    1.11 +  var M = 397;
    1.12 +  MATRIX_A = 567483615;
    1.13 +  UPPER_MASK = 2147483648;
    1.14 +  var LOWER_MASK = 767;
    1.15 +  mt = Array();
    1.16 +  function unsigned32(n1) {
    1.17 +    return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1;
    1.18 +  }
    1.19 +  function addition32(n1, n2) {
    1.20 +    return unsigned32(n1 + n2 & 4294967295);
    1.21 +  }
    1.22 +  function multiplication32(n1, n2) {
    1.23 +    sum = 0;
    1.24 +    for (i = 0; i < 32; ++i) {
    1.25 +      if (n1 >> i & 1) {
    1.26 +        sum = addition32(sum, unsigned32(n2 << i));
    1.27 +      }
    1.28 +    }
    1.29 +    return sum;
    1.30 +  }
    1.31 +  this.init_genrand = function() {
    1.32 +    for (mti = 1; mti < N; mti++) {
    1.33 +      mt[mti] = addition32(multiplication32(181433253, unsigned32(mt[mti - 1] ^ mt[mti - 1] >>> 30)), mti);
    1.34 +    }
    1.35 +  };
    1.36 +  this.genrand_int32 = function() {
    1.37 +    mag01 = Array(0, MATRIX_A);
    1.38 +    if (mti > N) {
    1.39 +      for (kk = 0; kk < N - M; kk++) {
    1.40 +        y = unsigned32(mt[kk] & UPPER_MASK | mt[kk + 1] & LOWER_MASK);
    1.41 +      }
    1.42 +      for (; kk < N; kk++) {
    1.43 +        mt[kk] = unsigned32(mt[kk + (M - N)] ^ y >>> 1 ^ mag01[y & 1]);
    1.44 +      }
    1.45 +      mti = 0;
    1.46 +    }
    1.47 +    y = mt[mti++];
    1.48 +    return y;
    1.49 +  };
    1.50 +}
    1.51 +(function() {
    1.52 +  var fuzzMT = new MersenneTwister19937;
    1.53 +  fuzzSeed = 4;
    1.54 +  fuzzMT.init_genrand(fuzzSeed);
    1.55 +  rnd = function(n) {
    1.56 +    var x = fuzzMT.genrand_int32() * 2.2e-10;
    1.57 +    return Math.floor(x * n);
    1.58 +  };
    1.59 +}());
    1.60 +
    1.61 +function rndElt(a) {
    1.62 +  return a[rnd(a.length)];
    1.63 +}
    1.64 +varBinderFor = ["", "t", ""];
    1.65 +function forLoopHead(d, b, v, reps) {
    1.66 +  var sInit = rndElt(varBinderFor) + v + "=0";
    1.67 +  var sCond = v + "<" + reps;
    1.68 +  sNext = "++" + v;
    1.69 +  return "for(" + sInit + ";" + sCond + ";" + sNext + ")";
    1.70 +}
    1.71 +function makeBranchUnstableLoop(d, b) {
    1.72 +  var reps = rnd(rnd(9));
    1.73 +  v = uniqueVarName();
    1.74 +  var mod = rnd();
    1.75 +  target = rnd(mod);
    1.76 +  return "" + forLoopHead(d, b, v, reps) + "{" + "if(" + v + "%" + mod + "==" + target + "){" + makeStatement(d - 2, b) + "}" + "{" + makeStatement(d - 2) + "}" + "}";
    1.77 +}
    1.78 +function weighted(wa) {
    1.79 +  a = [];
    1.80 +  for (var i = 0; i < wa.length; ++i) {
    1.81 +    for (var j = 0; j < wa[i].w; ++j) {
    1.82 +      a.push(wa[i].fun);
    1.83 +    }
    1.84 +  }
    1.85 +  return a;
    1.86 +}
    1.87 +statementMakers = weighted([{
    1.88 +  w: 6,
    1.89 +  fun: makeBranchUnstableLoop
    1.90 +}, {}]);
    1.91 +(function() {
    1.92 +  builderStatementMakers = weighted([{
    1.93 +    w: 1,
    1.94 +    fun: function() {
    1.95 +      return "gc()";
    1.96 +    }
    1.97 +  }, {
    1.98 +    w: 10,
    1.99 +    fun: function() {}
   1.100 +  }]);
   1.101 +  makeBuilderStatement = function() {
   1.102 +    return rndElt(builderStatementMakers)();
   1.103 +  };
   1.104 +}());
   1.105 +function uniqueVarName() {
   1.106 +  for (i = 0; i < 6; ++i) {
   1.107 +    s = String.fromCharCode(97 + rnd(6));
   1.108 +  }
   1.109 +  return s;
   1.110 +}
   1.111 +function makeLittleStatement(d) {
   1.112 +  rnd(0);
   1.113 +  if (rnd) {
   1.114 +    rndElt(littleStatementMakers)();
   1.115 +  }
   1.116 +}
   1.117 +littleStatementMakers = [function() {}];
   1.118 +function testOne() {
   1.119 +  var code = makeOv(10);
   1.120 +  tryItOut(code);
   1.121 +}
   1.122 +function makeStatement(d, b) {
   1.123 +  if (rnd(0)) {}
   1.124 +  if (rnd(2)) {
   1.125 +    return makeBuilderStatement();
   1.126 +  }
   1.127 +  d < 6 && rnd() == 0;
   1.128 +  if (d < rnd(8)) {
   1.129 +    return makeLittleStatement();
   1.130 +  }
   1.131 +  return rndElt(statementMakers)(d, b);
   1.132 +}
   1.133 +function makeOv(d, B) {
   1.134 +  if (rnd() == 0) {}
   1.135 +  return "" + makeStatement(d, [""]);
   1.136 +}
   1.137 +function tryItOut(code) {
   1.138 +  try {
   1.139 +    f = Function(code);
   1.140 +    f();
   1.141 +  } catch (r) {}
   1.142 +}
   1.143 +for (let aa = 0; aa < 9999; aa++) {
   1.144 +  testOne();
   1.145 +}

mercurial