// bench_object.js — object/string/call benchmark (QuickJS) const iterations = 200000; function bench_record_create() { let r; for (let i = 0; i < iterations; i++) { r = {x: i, y: i + 1, z: i + 2}; } return r.z; } function bench_prop_read() { const obj = {x: 10, y: 20, z: 30, w: 40}; let s = 0; for (let i = 0; i < iterations; i++) { s = s + obj.x + obj.y + obj.z + obj.w; } return s; } function bench_dynamic_prop() { const obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; const keys = ["a", "b", "c", "d", "e"]; let s = 0; for (let i = 0; i < iterations; i++) { for (let j = 0; j < 5; j++) { s = s + obj[keys[j]]; } } return s; } function bench_string_concat() { let s = ""; const n = 10000; for (let i = 0; i < n; i++) { s = s + "x"; } return s.length; } function bench_interpolation() { let s = ""; const n = 50000; for (let i = 0; i < n; i++) { s = `item_${i}`; } return s; } function make_point(x, y) { return { x: x, y: y, sum: function(self) { return self.x + self.y; } }; } function bench_method_call() { const p = make_point(3, 4); let s = 0; for (let i = 0; i < iterations; i++) { s = s + p.sum(p); } return s; } function fib(n) { if (n <= 1) return n; return fib(n - 1) + fib(n - 2); } function bench_fncall() { let s = 0; for (let i = 0; i < 20; i++) { s = s + fib(25); } return s; } function run(name, fn) { const start = performance.now(); const result = fn(); const elapsed = performance.now() - start; console.log(` ${name}: ${elapsed.toFixed(2)} ms (result: ${result})`); } console.log("=== Object / String / Call Benchmark ==="); console.log(` iterations: ${iterations}`); run("record_create ", bench_record_create); run("prop_read ", bench_prop_read); run("dynamic_prop ", bench_dynamic_prop); run("string_concat ", bench_string_concat); run("interpolation ", bench_interpolation); run("method_call ", bench_method_call); run("fncall_fib25 ", bench_fncall);