test/script/basic/run-octane.js

changeset 1034
5d41c7482d54
parent 1028
d79265f2fa92
child 1205
4112748288bb
     1.1 --- a/test/script/basic/run-octane.js	Wed Oct 08 11:28:13 2014 +0200
     1.2 +++ b/test/script/basic/run-octane.js	Thu Oct 09 11:55:52 2014 +0200
     1.3 @@ -24,8 +24,8 @@
     1.4  /**
     1.5   * @subtest
     1.6   */
     1.7 -var payload = __DIR__ + "octane-payload.js";
     1.8 -load(payload);
     1.9 +var dir = typeof(__DIR__) == 'undefined' ? "test/script/basic/" : __DIR__;
    1.10 +load(dir + "octane-payload.js");
    1.11  
    1.12  var runtime = undefined;
    1.13  var verbose = false;
    1.14 @@ -43,27 +43,27 @@
    1.15  function load_bench(arg) {
    1.16  
    1.17      for (var idx = 0; idx < arg.files.length; idx++) {
    1.18 -    var f = arg.files[idx];
    1.19 -    var file = f.split('/');
    1.20 -    var file_name = path + file[file.length - 1];
    1.21 +        var f = arg.files[idx];
    1.22 +        var file = f.split('/');
    1.23 +        var file_name = path + file[file.length - 1];
    1.24  
    1.25 -    var compile_and_return = should_compile_only(file_name);
    1.26 -    if (compile_and_return) {
    1.27 -        if (typeof compile_only === 'undefined') { //for a run, skip compile onlies, don't even compile them
    1.28 -        return true;
    1.29 +        var compile_and_return = should_compile_only(file_name);
    1.30 +        if (compile_and_return) {
    1.31 +            if (typeof compile_only === 'undefined') { //for a run, skip compile onlies, don't even compile them
    1.32 +                return true;
    1.33 +            }
    1.34          }
    1.35 -    }
    1.36  
    1.37 -    print_verbose(arg, "loading '" + arg.name + "' [" + f + "]... " + file_name);
    1.38 -    load(file_name);
    1.39 +        print_verbose(arg, "loading '" + arg.name + "' [" + f + "]... " + file_name);
    1.40 +        load(file_name);
    1.41      }
    1.42  
    1.43      if (typeof arg.before !== 'undefined') {
    1.44 -    arg.before();
    1.45 +        arg.before();
    1.46      }
    1.47  
    1.48      if (compile_and_return) {
    1.49 -    print_always(arg, "Compiled OK");
    1.50 +        print_always(arg, "Compiled OK");
    1.51      }
    1.52      return !compile_and_return;
    1.53  
    1.54 @@ -73,16 +73,16 @@
    1.55  function run_one_benchmark(arg, iters) {
    1.56  
    1.57      if (!load_bench(arg)) {
    1.58 -    return;
    1.59 +        return;
    1.60      }
    1.61  
    1.62      var success = true;
    1.63      var current_name;
    1.64  
    1.65      if (iters == undefined) {
    1.66 -    iters = numberOfIterations;
    1.67 +        iters = numberOfIterations;
    1.68      } else {
    1.69 -    numberOfIterations = iters;
    1.70 +        numberOfIterations = iters;
    1.71      }
    1.72  
    1.73      var benchmarks = eval(arg.suite + ".benchmarks");
    1.74 @@ -91,64 +91,69 @@
    1.75      var mean_score = 0;
    1.76  
    1.77      try {
    1.78 -    for (var x = 0; x < benchmarks.length ; x++) {
    1.79 -        //do warmup run
    1.80 -        //reset random number generator needed as of octane 9 before each run
    1.81 +        for (var x = 0; x < benchmarks.length ; x++) {
    1.82 +            //do warmup run
    1.83 +            //reset random number generator needed as of octane 9 before each run
    1.84 +            BenchmarkSuite.ResetRNG();
    1.85 +            benchmarks[x].Setup();
    1.86 +        }
    1.87          BenchmarkSuite.ResetRNG();
    1.88 -        benchmarks[x].Setup();
    1.89 -    }
    1.90 -    BenchmarkSuite.ResetRNG();
    1.91 -    print_verbose(arg, "running '" + arg.name + "' for " + iters + " iterations of no less than " + min_time + " seconds");
    1.92 +        print_verbose(arg, "running '" + arg.name + "' for " + iters + " iterations of no less than " + min_time + " seconds");
    1.93  
    1.94 -    var scores = [];
    1.95 +        var scores = [];
    1.96  
    1.97 -    var min_time_ms = min_time * 1000;
    1.98 -    var len = benchmarks.length;
    1.99 +        var min_time_ms = min_time * 1000;
   1.100 +        var len = benchmarks.length;
   1.101  
   1.102 -    for (var it = 0; it < iters + 1; it++) {
   1.103 -        //every iteration must take a minimum of 10 secs
   1.104 -        var ops = 0;
   1.105 -        var elapsed = 0;
   1.106 -        var start = new Date;
   1.107 -        do {
   1.108 -        for (var i = 0; i < len; i++) {
   1.109 -            benchmarks[i].run();
   1.110 -            //important - no timing here like elapsed = new Date() - start, as in the
   1.111 -            //original harness. This will make timing very non-deterministic.
   1.112 -            //NOTHING else must live in this loop
   1.113 +        for (var it = 0; it < iters + 1; it++) {
   1.114 +            //every iteration must take a minimum of 10 secs
   1.115 +            var ops = 0;
   1.116 +            var elapsed = 0;
   1.117 +            var start = new Date;
   1.118 +            do {
   1.119 +                for (var i = 0; i < len; i++) {
   1.120 +                    benchmarks[i].run();
   1.121 +                    //important - no timing here like elapsed = new Date() - start, as in the
   1.122 +                    //original harness. This will make timing very non-deterministic.
   1.123 +                    //NOTHING else must live in this loop
   1.124 +                }
   1.125 +                ops += len;
   1.126 +                elapsed = new Date - start;
   1.127 +            } while (elapsed < min_time * 1000);
   1.128 +
   1.129 +            var score = ops / elapsed * 1000 * 60;
   1.130 +            scores.push(score);
   1.131 +            var name = it == 0 ? "warmup" : "iteration " + it;
   1.132 +            print_verbose(arg, name + " finished " + score.toFixed(0) + " ops/minute");
   1.133 +
   1.134 +            // optional per-iteration cleanup hook
   1.135 +            if (typeof arg.cleanUpIteration == "function") {
   1.136 +                arg.cleanUpIteration();
   1.137 +            }
   1.138          }
   1.139 -        ops += len;
   1.140 -        elapsed = new Date - start;
   1.141 -        } while (elapsed < min_time * 1000);
   1.142  
   1.143 -        var score = ops / elapsed * 1000 * 60;
   1.144 -        scores.push(score);
   1.145 -        var name = it == 0 ? "warmup" : "iteration " + it;
   1.146 -        print_verbose(arg, name + " finished " + score.toFixed(0) + " ops/minute");
   1.147 -    }
   1.148 +        for (var x = 0; x < benchmarks.length ; x++) {
   1.149 +            benchmarks[x].TearDown();
   1.150 +        }
   1.151  
   1.152 -    for (var x = 0; x < benchmarks.length ; x++) {
   1.153 -        benchmarks[x].TearDown();
   1.154 -    }
   1.155 -
   1.156 -    for (var x = 1; x < iters + 1 ; x++) {
   1.157 -        mean_score += scores[x];
   1.158 -        min_score = Math.min(min_score, scores[x]);
   1.159 -        max_score = Math.max(max_score, scores[x]);
   1.160 -    }
   1.161 -    mean_score /= iters;
   1.162 +        for (var x = 1; x < iters + 1 ; x++) {
   1.163 +            mean_score += scores[x];
   1.164 +            min_score = Math.min(min_score, scores[x]);
   1.165 +            max_score = Math.max(max_score, scores[x]);
   1.166 +        }
   1.167 +        mean_score /= iters;
   1.168      } catch (e) {
   1.169 -    print_always(arg, "*** Aborted and setting score to zero. Reason: " + e);
   1.170 -    if (is_this_nashorn() && e instanceof java.lang.Throwable) {
   1.171 -        e.printStackTrace();
   1.172 -    }
   1.173 -    mean_score = min_score = max_score = 0;
   1.174 -    scores = [0];
   1.175 +        print_always(arg, "*** Aborted and setting score to zero. Reason: " + e);
   1.176 +        if (is_this_nashorn() && e instanceof java.lang.Throwable) {
   1.177 +            e.printStackTrace();
   1.178 +        }
   1.179 +        mean_score = min_score = max_score = 0;
   1.180 +        scores = [0];
   1.181      }
   1.182  
   1.183      var res = mean_score.toFixed(0);
   1.184      if (verbose) {
   1.185 -	res += " ops/minute (" + min_score.toFixed(0) + "-" + max_score.toFixed(0) + "), warmup=" + scores[0].toFixed(0);
   1.186 +        res += " ops/minute (" + min_score.toFixed(0) + "-" + max_score.toFixed(0) + "), warmup=" + scores[0].toFixed(0);
   1.187      }
   1.188      print_always(arg, res);
   1.189  }
   1.190 @@ -163,13 +168,13 @@
   1.191  
   1.192  function print_verbose(arg, x) {
   1.193      if (verbose) {
   1.194 -    print_always(arg, x)
   1.195 +        print_always(arg, x)
   1.196      }
   1.197  }
   1.198  
   1.199  function run_suite(tests, iters) {
   1.200      for (var idx = 0; idx < tests.length; idx++) {
   1.201 -    run_one_benchmark(tests[idx], iters);
   1.202 +        run_one_benchmark(tests[idx], iters);
   1.203      }
   1.204  }
   1.205  
   1.206 @@ -184,13 +189,13 @@
   1.207  var new_args = [];
   1.208  for (i in args) {
   1.209      if (args[i].toString().indexOf(' ') != -1) {
   1.210 -    args[i] = args[i].replace(/\/$/, '');
   1.211 -    var s = args[i].split(' ');
   1.212 -    for (j in s) {
   1.213 -        new_args.push(s[j]);
   1.214 -    }
   1.215 +        args[i] = args[i].replace(/\/$/, '');
   1.216 +        var s = args[i].split(' ');
   1.217 +        for (j in s) {
   1.218 +            new_args.push(s[j]);
   1.219 +        }
   1.220      } else {
   1.221 -    new_args.push(args[i]);
   1.222 +        new_args.push(args[i]);
   1.223      }
   1.224  }
   1.225  
   1.226 @@ -205,46 +210,46 @@
   1.227  for (var i = 0; i < args.length; i++) {
   1.228      arg = args[i];
   1.229      if (arg == "--iterations") {
   1.230 -    iters = +args[++i];
   1.231 -    if (isNaN(iters)) {
   1.232 -        throw "'--iterations' must be followed by integer";
   1.233 -    }
   1.234 +        iters = +args[++i];
   1.235 +        if (isNaN(iters)) {
   1.236 +            throw "'--iterations' must be followed by integer";
   1.237 +        }
   1.238      } else if (arg == "--runtime") {
   1.239 -    runtime = args[++i];
   1.240 +        runtime = args[++i];
   1.241      } else if (arg == "--verbose") {
   1.242 -    verbose = true;
   1.243 +        verbose = true;
   1.244      } else if (arg == "--min-time") {
   1.245 -    min_time = +args[++i];
   1.246 -    if (isNaN(iters)) {
   1.247 -        throw "'--min-time' must be followed by integer";
   1.248 -    }
   1.249 +        min_time = +args[++i];
   1.250 +        if (isNaN(iters)) {
   1.251 +            throw "'--min-time' must be followed by integer";
   1.252 +        }
   1.253      } else if (arg == "") {
   1.254 -    continue; //skip
   1.255 +        continue; //skip
   1.256      } else {
   1.257 -    var found = false;
   1.258 -    for (j in tests) {
   1.259 -        if (tests[j].name === arg) {
   1.260 -        tests_found.push(tests[j]);
   1.261 -        found = true;
   1.262 -        break;
   1.263 +        var found = false;
   1.264 +        for (j in tests) {
   1.265 +            if (tests[j].name === arg) {
   1.266 +                tests_found.push(tests[j]);
   1.267 +                found = true;
   1.268 +                break;
   1.269 +            }
   1.270          }
   1.271 -    }
   1.272 -    if (!found) {
   1.273 -        var str = "unknown test name: '" + arg + "' -- valid names are: ";
   1.274 -        for (j in tests) {
   1.275 -        if (j != 0) {
   1.276 -            str += ", ";
   1.277 +        if (!found) {
   1.278 +            var str = "unknown test name: '" + arg + "' -- valid names are: ";
   1.279 +            for (j in tests) {
   1.280 +                if (j != 0) {
   1.281 +                    str += ", ";
   1.282 +                }
   1.283 +                str += "'" + tests[j].name + "'";
   1.284 +            }
   1.285 +            throw str;
   1.286          }
   1.287 -        str += "'" + tests[j].name + "'";
   1.288 -        }
   1.289 -        throw str;
   1.290 -    }
   1.291      }
   1.292  }
   1.293  
   1.294  if (tests_found.length == 0) {
   1.295      for (i in tests) {
   1.296 -    tests_found.push(tests[i]);
   1.297 +        tests_found.push(tests[i]);
   1.298      }
   1.299  }
   1.300  
   1.301 @@ -255,21 +260,21 @@
   1.302  
   1.303  if (is_this_nashorn()) {
   1.304      try {
   1.305 -    read = readFully;
   1.306 +        read = readFully;
   1.307      } catch (e) {
   1.308 -    print("ABORTING: Cannot find 'readFully'. You must have scripting enabled to use this test harness. (-scripting)");
   1.309 -    throw e;
   1.310 +        print("ABORTING: Cannot find 'readFully'. You must have scripting enabled to use this test harness. (-scripting)");
   1.311 +        throw e;
   1.312      }
   1.313  }
   1.314  
   1.315  // run tests in alphabetical order by name
   1.316  tests_found.sort(function(a, b) {
   1.317      if (a.name < b.name) {
   1.318 -    return -1;
   1.319 +        return -1;
   1.320      } else if (a.name > b.name) {
   1.321 -    return 1;
   1.322 +        return 1;
   1.323      } else {
   1.324 -    return 0;
   1.325 +        return 0;
   1.326      }
   1.327  });
   1.328  

mercurial