function alloc_bytes(app, data) { let stdlib_types___alloc_bytes__ = app.instance.exports['stdlib.types.__alloc_bytes__'] if( typeof data == 'string' ) { // TODO: Unicode data = Uint8Array.from(data.split('').map(x => x.charCodeAt())); } let offset = stdlib_types___alloc_bytes__(data.length); let i8arr = new Uint8Array(app.instance.exports.memory.buffer, offset + 4, data.length); i8arr.set(data); return offset; } function run_times(times, callback, tweak) { let sum = 0; let max = 0; let min = 1000000000000000000; let values = []; for(let idx = 0; idx < times; idx += 1) { if( tweak ) { tweak(); } const t0 = performance.now(); let result = callback(); const t1 = performance.now(); let time = t1 - t0; sum += time; values.push({'time': time, 'result': result}); max = max < time ? time : max; min = min > time ? time : min; } return { 'min': min, 'avg': sum / times, 'max': max, 'sum': sum, 'values': values, } } function test_result(is_pass, data) { data = data || {}; let result_details = document.createElement('details'); let result_summary = document.createElement('summary'); result_summary.textContent = (is_pass ? 'Test passed: ' : 'Test failed: ') + (data.summary ?? '(no summary)') ; result_summary.setAttribute('style', is_pass ? 'background: green' : 'background: red'); result_details.appendChild(result_summary); if( data.attributes ) { result_table(data, result_details); } let results = document.getElementById('results'); results.appendChild(result_details); } function result_table(attributes, parent) { let table = document.createElement('table'); Object.keys(attributes).forEach(idx => { let td0 = document.createElement('td'); td0.setAttribute('style', 'vertical-align: top;'); td0.textContent = idx; let td1 = document.createElement('td'); if( typeof(attributes[idx]) == 'object' ) { let result_details = document.createElement('details'); let result_summary = document.createElement('summary'); result_summary.textContent = 'Show me'; result_details.appendChild(result_summary); result_table(attributes[idx], result_details); td1.appendChild(result_details); } else { td1.textContent = attributes[idx]; } let tr = document.createElement('tr'); tr.appendChild(td0); tr.appendChild(td1); table.appendChild(tr); }); parent.append(table); }