119 lines
2.4 KiB
Plaintext
119 lines
2.4 KiB
Plaintext
// bench_object.ce — object/record and string benchmark
|
|
// Tests: property read/write, string concat, string interpolation, method-like dispatch
|
|
|
|
var time = use('time')
|
|
|
|
def iterations = 200000
|
|
|
|
// 1. Record create + property write
|
|
function bench_record_create() {
|
|
var i = 0
|
|
var r = null
|
|
for (i = 0; i < iterations; i++) {
|
|
r = {x: i, y: i + 1, z: i + 2}
|
|
}
|
|
return r.z
|
|
}
|
|
|
|
// 2. Property read in loop
|
|
function bench_prop_read() {
|
|
var obj = {x: 10, y: 20, z: 30, w: 40}
|
|
var i = 0
|
|
var s = 0
|
|
for (i = 0; i < iterations; i++) {
|
|
s = s + obj.x + obj.y + obj.z + obj.w
|
|
}
|
|
return s
|
|
}
|
|
|
|
// 3. Dynamic property access (computed keys)
|
|
function bench_dynamic_prop() {
|
|
var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}
|
|
var keys = ["a", "b", "c", "d", "e"]
|
|
var i = 0
|
|
var j = 0
|
|
var s = 0
|
|
for (i = 0; i < iterations; i++) {
|
|
for (j = 0; j < 5; j++) {
|
|
s = s + obj[keys[j]]
|
|
}
|
|
}
|
|
return s
|
|
}
|
|
|
|
// 4. String concatenation
|
|
function bench_string_concat() {
|
|
var i = 0
|
|
var s = ""
|
|
def n = 10000
|
|
for (i = 0; i < n; i++) {
|
|
s = s + "x"
|
|
}
|
|
return length(s)
|
|
}
|
|
|
|
// 5. String interpolation
|
|
function bench_interpolation() {
|
|
var i = 0
|
|
var s = ""
|
|
def n = 50000
|
|
for (i = 0; i < n; i++) {
|
|
s = `item_${i}`
|
|
}
|
|
return s
|
|
}
|
|
|
|
// 6. Prototype chain / method-like call
|
|
function make_point(x, y) {
|
|
return {
|
|
x: x,
|
|
y: y,
|
|
sum: function(self) {
|
|
return self.x + self.y
|
|
}
|
|
}
|
|
}
|
|
|
|
function bench_method_call() {
|
|
var p = make_point(3, 4)
|
|
var i = 0
|
|
var s = 0
|
|
for (i = 0; i < iterations; i++) {
|
|
s = s + p.sum(p)
|
|
}
|
|
return s
|
|
}
|
|
|
|
// 7. Function call overhead (simple recursion depth)
|
|
function fib(n) {
|
|
if (n <= 1) return n
|
|
return fib(n - 1) + fib(n - 2)
|
|
}
|
|
|
|
function bench_fncall() {
|
|
var i = 0
|
|
var s = 0
|
|
for (i = 0; i < 20; i++) {
|
|
s = s + fib(25)
|
|
}
|
|
return s
|
|
}
|
|
|
|
function run(name, fn) {
|
|
var start = time.number()
|
|
var result = fn()
|
|
var elapsed = time.number() - start
|
|
var ms = whole(elapsed * 100000) / 100
|
|
log.console(` ${name}: ${ms} ms (result: ${result})`)
|
|
}
|
|
|
|
log.console("=== Object / String / Call Benchmark ===")
|
|
log.console(` 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)
|