58 lines
1.6 KiB
JavaScript

var fs = require("fs");
var tlsf = new WebAssembly.Instance(WebAssembly.Module(fs.readFileSync(__dirname + "/../tlsf.optimized.wasm")), {
env: {
log_i: function(i) { i == -1 ? console.log("---") : console.log("log_i -> " + i); }
}
}).exports;
console.log(Object.keys(tlsf));
try {
var memSize = 0;
for (var j = 0; j < 500; ++j) {
var ptr;
var ptrs = [];
for (var i = 0; i < 256; ++i) {
var size = i * 64;
ptr = tlsf.allocate_memory(size);
console.log("allocate_memory(" + size + ") = " + ptr);
if (!(i % 4)) {
tlsf.free_memory(ptr);
console.log("free_memory(" + ptr + ")");
} else
ptrs.push(ptr);
}
while (ptrs.length) {
ptr = Math.random() < 0.5 ? ptrs.pop() : ptrs.shift();
console.log("free_memory(" + ptr + ")");
tlsf.free_memory(ptr);
}
if (memSize && memSize != tlsf.memory.length)
throw new Error("memory should not grow multiple times");
memSize = tlsf.memory.length;
}
var ptr = tlsf.allocate_memory(64);
console.log("allocate_memory(" + 64 + ") = " + ptr);
} catch (e) {
console.log(e.stack);
mem(tlsf.memory);
}
function mem(memory, offset) {
if (!offset) offset = 0;
var mem = new Uint8Array(memory.buffer, offset);
var stackTop = new Uint32Array(memory.buffer, 4, 1)[0];
var hex = [];
for (var i = 0; i < 1024; ++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(" ") + " ...");
}