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