50 lines
1.5 KiB
JavaScript
Raw Normal View History

var fs = require("fs");
2018-02-01 17:35:51 +01:00
var runner = require("./runner");
2018-01-16 17:52:48 +01:00
function test(file) {
2018-02-01 17:35:51 +01:00
console.log("Testing '" + file + "' ...\n");
2018-02-01 17:35:51 +01:00
var exports = new WebAssembly.Instance(WebAssembly.Module(fs.readFileSync(__dirname + "/../" + file)), {
2018-01-16 17:52:48 +01:00
env: {
2018-02-01 17:35:51 +01:00
abort: function(msg, file, line, column) {
throw Error("Assertion failed: " + (msg ? "'" + getString(msg) + "' " : "") + "at " + getString(file) + ":" + line + ":" + column);
},
log: function(ptr) { console.log(getString(ptr)); },
logi: function(i) { console.log(i); }
}
2018-01-16 17:52:48 +01:00
}).exports;
2018-02-01 17:35:51 +01:00
function getString(ptr) {
var len = new Uint32Array(exports.memory.buffer, ptr)[0];
var str = new Uint16Array(exports.memory.buffer, ptr + 4).subarray(0, len);
return String.fromCharCode.apply(String, str);
}
2018-02-01 17:35:51 +01:00
runner(exports, 10, 20000); // picked so I/O isn't the bottleneck
console.log("mem final: " + exports.memory.buffer.byteLength);
2018-01-16 17:52:48 +01:00
console.log();
}
2018-01-16 17:52:48 +01:00
function mem(memory, offset, count) {
if (!offset) offset = 0;
2018-01-16 17:52:48 +01:00
if (!count) count = 1024;
var mem = new Uint8Array(memory.buffer, offset);
var stackTop = new Uint32Array(memory.buffer, 4, 1)[0];
var hex = [];
2018-01-16 17:52:48 +01:00
for (var i = 0; i < count; ++i) {
var o = (offset + i).toString(16);
while (o.length < 3) o = "0" + o;
if ((i & 15) === 0) {
hex.push("\n" + o + ":");
}
var h = mem[i].toString(16);
if (h.length < 2) h = "0" + h;
hex.push(h);
}
console.log(hex.join(" ") + " ...");
}
2018-01-16 17:52:48 +01:00
test("tlsf.untouched.wasm");
test("tlsf.optimized.wasm");