/
main.js
1 lines (1 loc) · 5.18 KB
/
main.js
1
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,r),s.l=!0,s.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(n,s,function(t){return e[t]}.bind(null,s));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(e,t){let r,n,s;for(r=0;r<t;r++)for(n=0;n<t-1;n++)e[n+1]<e[n]&&(s=e[n],e[n]=e[n+1],e[n+1]=s);return e};var s=function(e,t,r){for(let n=t-1;n>=0;n--)r[t-(n+1)]=e[n]};var o=function(e){let t=1,r=1,n=0;for(;e>1;)n=r,r+=t,t=n,--e;return t};let i;const a={arrayreverse:class{static get args(){return{size:{default:5e5,min:1,max:5e6},iterations:{default:50,min:1,max:1e7}}}static get links(){return{c:"https://github.com/tom-james-watson/c-js-benchmarks/blob/master/src/benchmarks/array-reverse/array-reverse.c",js:"https://github.com/tom-james-watson/c-js-benchmarks/blob/master/src/benchmarks/array-reverse/array-reverse.js"}}constructor(e){this.iterations=e.iterations,this.size=e.size,this.values=Uint8Array.from({length:this.size},()=>Math.floor(255*Math.random()))}c(){const e=Module._malloc(this.size);let t;Module.HEAPU8.set(this.values,e);for(let r=0;r<this.iterations;r++){const r=Module._malloc(this.size);Module.ccall("array_reverse","number",["number","number","number"],[e,this.size,r]),t=Module.HEAPU8.subarray(r,r+this.size),Module._free(r)}return Module._free(e),t}js(){let e;for(let t=0;t<this.iterations;t++){const t=Uint8Array.from({length:this.size});s(this.values,this.size,t),e=t}return e}compare(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}},bubblesort:class{static get args(){return{size:{default:1e3,min:1,max:1e4},iterations:{default:100,min:1,max:1e7}}}static get links(){return{c:"https://github.com/tom-james-watson/c-js-benchmarks/blob/master/src/benchmarks/bubblesort/bubblesort.c",js:"https://github.com/tom-james-watson/c-js-benchmarks/blob/master/src/benchmarks/bubblesort/bubblesort.js"}}constructor(e){this.iterations=e.iterations,this.size=e.size,this.values=Uint8Array.from({length:this.size},()=>Math.floor(255*Math.random()))}c(){let e;for(let t=0;t<this.iterations;t++){const t=this.values.slice(0),r=Module._malloc(this.size);Module.HEAPU8.set(t,r),Module.ccall("bubblesort","number",["number","number"],[r,this.size]),e=Module.HEAPU8.subarray(r,r+this.size),Module._free(r)}return e}js(){let e;for(let t=0;t<this.iterations;t++){const t=this.values.slice(0);e=n(t,this.size)}return e}compare(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}},fibonacci:class{static get args(){return{number:{default:40,min:1,max:46},iterations:{default:1e6,min:1,max:1e8}}}static get links(){return{c:"https://github.com/tom-james-watson/c-js-benchmarks/blob/master/src/benchmarks/fibonacci/fibonacci.c",js:"https://github.com/tom-james-watson/c-js-benchmarks/blob/master/src/benchmarks/fibonacci/fibonacci.js"}}constructor(e){this.iterations=e.iterations,this.number=e.number}c(){let e;for(let t=0;t<this.iterations;t++)e=Module.ccall("fibonacci","number",["number","number"],[this.number,this.iterations]);return e}js(){let e;for(let t=0;t<this.iterations;t++)e=o(this.number);return e}compare(e,t){return e===t}}};function u(e){const t=performance.now();return[e(),performance.now()-t]}async function c(){document.getElementById("run").disabled=!0,document.getElementById("run").innerHTML="...",document.getElementById("c-result").innerHTML="...",document.getElementById("js-result").innerHTML="...",setTimeout(()=>{const e=a[i],t={};for(const r of Object.keys(e.args))t[r]=Number(document.getElementById(r).value);const r=new e(t),[n,s]=u(r.c.bind(r)),[o,c]=u(r.js.bind(r));r.compare(n,o)||alert("Test failed - results not equal"),document.getElementById("c-result").innerHTML=`${Math.round(s)}ms`,document.getElementById("js-result").innerHTML=`${Math.round(c)}ms`,document.getElementById("run").disabled=!1,document.getElementById("run").innerHTML="Run"},100)}function l(e){m(e.target.value)}function m(e){i=e;const t=a[e];let r="";for(const e of Object.keys(t.args)){const n=t.args[e];r+=`\n <div>\n <label for="${e}">${e}</label>\n <input id="${e}" type="number" value="${n.default}" min="${n.min}" max="${n.max}" />\n </div>\n `}document.getElementById("args").innerHTML=r,document.getElementById("c-link").href=t.links.c,document.getElementById("js-link").href=t.links.js}document.addEventListener("DOMContentLoaded",function(){document.getElementById("run").addEventListener("click",c),document.getElementById("benchmark").onchange=l,m(document.getElementById("benchmark").value)})}]);