diff --git a/crates/oxide_cli/src/bench/js_stress.rs b/crates/oxide_cli/src/bench/js_stress.rs index 22227c3..5468d8c 100644 --- a/crates/oxide_cli/src/bench/js_stress.rs +++ b/crates/oxide_cli/src/bench/js_stress.rs @@ -46,7 +46,7 @@ pub fn run_js_stress_bench(config: &BenchConfig, kernel: &Arc, pool: for path in &files { let test_name = path.file_stem().unwrap_or_default().to_string_lossy().to_string(); - let mut js = match fs::read_to_string(path) { + let js = match fs::read_to_string(path) { Ok(s) => s, Err(e) => { eprintln!("Failed to read {:?}: {}", path, e); @@ -54,10 +54,6 @@ pub fn run_js_stress_bench(config: &BenchConfig, kernel: &Arc, pool: } }; - if config.iterations > 0 { - js = override_iterations(&js, config.iterations); - } - let allocator = Allocator::default(); let program = match oxide_parser::parse(&allocator, &js) { Ok(p) => p, @@ -196,15 +192,3 @@ fn average_metrics(metrics: &[MetricCollection]) -> MetricCollection { } } -fn override_iterations(js: &str, iters: u32) -> String { - js.lines() - .map(|line| { - if line.trim_start().starts_with("var ITERATIONS ") { - format!("var ITERATIONS = {};", iters) - } else { - line.to_string() - } - }) - .collect::>() - .join("\n") -} diff --git a/tests/stress/arith_ops.js b/tests/stress/arith_ops.js new file mode 100644 index 0000000..9a83483 --- /dev/null +++ b/tests/stress/arith_ops.js @@ -0,0 +1,10 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += i * 2 + 3 - 1 / 2; + sum += (i % 7) * 3; + sum += i & 255; + sum += i >> 2; +} +sum diff --git a/tests/stress/array_filter.js b/tests/stress/array_filter.js new file mode 100644 index 0000000..0b7d041 --- /dev/null +++ b/tests/stress/array_filter.js @@ -0,0 +1,12 @@ +var ITERATIONS = 2000; + +var base = []; +for (var i = 0; i < 100; i++) { + base.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + var out = base.filter(function (x) { return x % 2 === 0; }); + sum += out.length; +} +sum diff --git a/tests/stress/array_for_each.js b/tests/stress/array_for_each.js new file mode 100644 index 0000000..a315b62 --- /dev/null +++ b/tests/stress/array_for_each.js @@ -0,0 +1,11 @@ +var ITERATIONS = 2000; + +var base = []; +for (var i = 0; i < 100; i++) { + base.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + base.forEach(function (x) { sum += x; }); +} +sum diff --git a/tests/stress/array_index_get.js b/tests/stress/array_index_get.js new file mode 100644 index 0000000..0d7ef7b --- /dev/null +++ b/tests/stress/array_index_get.js @@ -0,0 +1,11 @@ +var ITERATIONS = 100000; + +var arr = []; +for (var i = 0; i < 1000; i++) { + arr.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + sum += arr[500]; +} +sum diff --git a/tests/stress/array_index_set.js b/tests/stress/array_index_set.js new file mode 100644 index 0000000..d03d738 --- /dev/null +++ b/tests/stress/array_index_set.js @@ -0,0 +1,10 @@ +var ITERATIONS = 100000; + +var arr = []; +for (var i = 0; i < 1000; i++) { + arr.push(0); +} +for (var j = 0; j < ITERATIONS; j++) { + arr[500] = j; +} +arr[500] diff --git a/tests/stress/array_join.js b/tests/stress/array_join.js new file mode 100644 index 0000000..5291d69 --- /dev/null +++ b/tests/stress/array_join.js @@ -0,0 +1,12 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var arr = []; + for (var j = 0; j < 10; j++) { + arr.push(j); + } + var joined = arr.join(","); + sum += joined.length; +} +sum diff --git a/tests/stress/coercion.js b/tests/stress/array_literal.js similarity index 65% rename from tests/stress/coercion.js rename to tests/stress/array_literal.js index 494e082..3af98cf 100644 --- a/tests/stress/coercion.js +++ b/tests/stress/array_literal.js @@ -2,6 +2,7 @@ var ITERATIONS = 50000; var sum = 0; for (var i = 0; i < ITERATIONS; i++) { - sum += (+"42") + (+"3.14") + (+"0"); + var arr = [1, 2, 3]; + sum += arr.length; } sum diff --git a/tests/stress/array_map.js b/tests/stress/array_map.js new file mode 100644 index 0000000..02a87ed --- /dev/null +++ b/tests/stress/array_map.js @@ -0,0 +1,12 @@ +var ITERATIONS = 2000; + +var base = []; +for (var i = 0; i < 100; i++) { + base.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + var out = base.map(function (x) { return x + 1; }); + sum += out[0]; +} +sum diff --git a/tests/stress/array_push_pop.js b/tests/stress/array_push_pop.js new file mode 100644 index 0000000..18ccac7 --- /dev/null +++ b/tests/stress/array_push_pop.js @@ -0,0 +1,12 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var arr = []; + for (var j = 0; j < 10; j++) { + arr.push(j); + } + var popped = arr.pop(); + sum += popped; +} +sum diff --git a/tests/stress/array_reduce.js b/tests/stress/array_reduce.js new file mode 100644 index 0000000..361fc66 --- /dev/null +++ b/tests/stress/array_reduce.js @@ -0,0 +1,12 @@ +var ITERATIONS = 2000; + +var base = []; +for (var i = 0; i < 100; i++) { + base.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + var out = base.reduce(function (acc, x) { return acc + x; }, 0); + sum += out; +} +sum diff --git a/tests/stress/array_slice.js b/tests/stress/array_slice.js new file mode 100644 index 0000000..2f0c9dc --- /dev/null +++ b/tests/stress/array_slice.js @@ -0,0 +1,12 @@ +var ITERATIONS = 3000; + +var base = []; +for (var i = 0; i < 100; i++) { + base.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + var out = base.slice(); + sum += out.length; +} +sum diff --git a/tests/stress/array_sort.js b/tests/stress/array_sort.js new file mode 100644 index 0000000..4bd46a8 --- /dev/null +++ b/tests/stress/array_sort.js @@ -0,0 +1,13 @@ +var ITERATIONS = 500; + +var base = []; +for (var i = 0; i < 100; i++) { + base.push(100 - i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + var out = base.slice(); + out.sort(function (a, b) { return a - b; }); + sum += out[0]; +} +sum diff --git a/tests/stress/branch_if.js b/tests/stress/branch_if.js new file mode 100644 index 0000000..652e909 --- /dev/null +++ b/tests/stress/branch_if.js @@ -0,0 +1,13 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + if (i % 2 === 0) { + sum += 1; + } else if (i % 3 === 0) { + sum += 2; + } else { + sum += 3; + } +} +sum diff --git a/tests/stress/branch_switch.js b/tests/stress/branch_switch.js new file mode 100644 index 0000000..3a6f9d6 --- /dev/null +++ b/tests/stress/branch_switch.js @@ -0,0 +1,12 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + switch (i % 4) { + case 0: sum += 0; break; + case 1: sum += 1; break; + case 2: sum += 2; break; + default: sum += 3; break; + } +} +sum diff --git a/tests/stress/call.js b/tests/stress/call.js deleted file mode 100644 index 8002001..0000000 --- a/tests/stress/call.js +++ /dev/null @@ -1,7 +0,0 @@ -var ITERATIONS = 200; - -function sumTo(n) { - if (n <= 0) return 0; - return n + sumTo(n - 1); -} -sumTo(ITERATIONS) diff --git a/tests/stress/call_args.js b/tests/stress/call_args.js new file mode 100644 index 0000000..76edd34 --- /dev/null +++ b/tests/stress/call_args.js @@ -0,0 +1,10 @@ +var ITERATIONS = 20000; + +function add(a, b, c, d) { + return a + b + c + d; +} +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += add(i, i + 1, i + 2, i + 3); +} +sum diff --git a/tests/stress/call_closure.js b/tests/stress/call_closure.js new file mode 100644 index 0000000..f9a8cfc --- /dev/null +++ b/tests/stress/call_closure.js @@ -0,0 +1,14 @@ +var ITERATIONS = 20000; + +function outer() { + var x = 1; + return function (n) { + return x + n; + }; +} +var inner = outer(); +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += inner(i); +} +sum diff --git a/tests/stress/call_method.js b/tests/stress/call_method.js new file mode 100644 index 0000000..70378b2 --- /dev/null +++ b/tests/stress/call_method.js @@ -0,0 +1,8 @@ +var ITERATIONS = 20000; + +var obj = { value: 1, add: function (n) { return this.value + n; } }; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += obj.add(i); +} +sum diff --git a/tests/stress/call_new_proto.js b/tests/stress/call_new_proto.js new file mode 100644 index 0000000..9abfdb5 --- /dev/null +++ b/tests/stress/call_new_proto.js @@ -0,0 +1,14 @@ +var ITERATIONS = 20000; + +function Animal(name) { + this.name = name; +} +Animal.prototype.getName = function () { + return this.name; +}; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var a = new Animal("x"); + sum += a.getName().length; +} +sum diff --git a/tests/stress/call_recursion.js b/tests/stress/call_recursion.js new file mode 100644 index 0000000..51a0d11 --- /dev/null +++ b/tests/stress/call_recursion.js @@ -0,0 +1,11 @@ +var ITERATIONS = 200; + +function fib(n) { + if (n <= 1) return n; + return fib(n - 1) + fib(n - 2); +} +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += fib(15) % 10; +} +sum diff --git a/tests/stress/call_this.js b/tests/stress/call_this.js new file mode 100644 index 0000000..28788cc --- /dev/null +++ b/tests/stress/call_this.js @@ -0,0 +1,13 @@ +var ITERATIONS = 20000; + +var obj = { + value: 10, + getValue: function () { return this.value; }, + setValue: function (v) { this.value = v; return this; } +}; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + obj.setValue(i); + sum += obj.getValue(); +} +sum diff --git a/tests/stress/cmp_ops.js b/tests/stress/cmp_ops.js new file mode 100644 index 0000000..61172fd --- /dev/null +++ b/tests/stress/cmp_ops.js @@ -0,0 +1,13 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var n = i & 1; + sum += n == 0; + sum += n != 1; + sum += n === 0; + sum += n !== 1; + sum += n < 2; + sum += n >= 0; +} +sum diff --git a/tests/stress/coercion_boolean.js b/tests/stress/coercion_boolean.js new file mode 100644 index 0000000..46ba3de --- /dev/null +++ b/tests/stress/coercion_boolean.js @@ -0,0 +1,9 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += (i % 2 === 0) ? true : false; + sum += i === 0 ? 0 : 1; + sum += i > 0 ? 1 : 0; +} +sum diff --git a/tests/stress/coercion_concat.js b/tests/stress/coercion_concat.js new file mode 100644 index 0000000..4882170 --- /dev/null +++ b/tests/stress/coercion_concat.js @@ -0,0 +1,7 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += "42" + i; +} +sum diff --git a/tests/stress/coercion_nullish.js b/tests/stress/coercion_nullish.js new file mode 100644 index 0000000..486ac07 --- /dev/null +++ b/tests/stress/coercion_nullish.js @@ -0,0 +1,11 @@ +var ITERATIONS = 100000; + +var obj = { value: 5 }; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += obj.value ?? 0; + sum += obj.missing ?? 42; + var x = (i % 2 === 0) ? 1 : null; + sum += x ?? 7; +} +sum diff --git a/tests/stress/coercion_tonumber.js b/tests/stress/coercion_tonumber.js new file mode 100644 index 0000000..284ebeb --- /dev/null +++ b/tests/stress/coercion_tonumber.js @@ -0,0 +1,7 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += +"42" + +"3.14" + +"0" + +"0.5" + +"1e3"; +} +sum diff --git a/tests/stress/coercion_toprimitive.js b/tests/stress/coercion_toprimitive.js new file mode 100644 index 0000000..feffa0b --- /dev/null +++ b/tests/stress/coercion_toprimitive.js @@ -0,0 +1,8 @@ +var ITERATIONS = 20000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var obj = { valueOf: function () { return 42; }, toString: function () { return "42"; } }; + sum += obj + 1; +} +sum diff --git a/tests/stress/coercion_tostring.js b/tests/stress/coercion_tostring.js new file mode 100644 index 0000000..4424baa --- /dev/null +++ b/tests/stress/coercion_tostring.js @@ -0,0 +1,7 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += String(42) + String(3.14) + String(0) + String(true) + String(null); +} +sum diff --git a/tests/stress/gc_array.js b/tests/stress/gc_array.js new file mode 100644 index 0000000..4ccbc3e --- /dev/null +++ b/tests/stress/gc_array.js @@ -0,0 +1,11 @@ +var ITERATIONS = 5000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var arr = []; + for (var j = 0; j < 50; j++) { + arr.push(j); + } + sum += arr.length; +} +sum diff --git a/tests/stress/array.js b/tests/stress/gc_object.js similarity index 52% rename from tests/stress/array.js rename to tests/stress/gc_object.js index d626617..fcced18 100644 --- a/tests/stress/array.js +++ b/tests/stress/gc_object.js @@ -1,11 +1,8 @@ var ITERATIONS = 50000; -var arr = []; -for (var i = 0; i < ITERATIONS; i++) { - arr.push(i); -} var sum = 0; -while (arr.length > 0) { - sum += arr.pop(); +for (var i = 0; i < ITERATIONS; i++) { + var obj = { a: i, b: i * 2 }; + sum += obj.a + obj.b; } sum diff --git a/tests/stress/gc_string.js b/tests/stress/gc_string.js new file mode 100644 index 0000000..c3ad358 --- /dev/null +++ b/tests/stress/gc_string.js @@ -0,0 +1,8 @@ +var ITERATIONS = 20000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var s = "str" + i; + sum += s.length; +} +sum diff --git a/tests/stress/ic_polymorphic.js b/tests/stress/ic_polymorphic.js new file mode 100644 index 0000000..089106f --- /dev/null +++ b/tests/stress/ic_polymorphic.js @@ -0,0 +1,11 @@ +var ITERATIONS = 100000; + +var a = { x: 1, y: 2, z: 3 }; +var b = { x: 4, y: 5, z: 6 }; +var c = { x: 7, y: 8, z: 9 }; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var t = (i % 3 === 0) ? a : (i % 3 === 1) ? b : c; + sum += t.x + t.y + t.z; +} +sum diff --git a/tests/stress/loop_do_while.js b/tests/stress/loop_do_while.js new file mode 100644 index 0000000..2128396 --- /dev/null +++ b/tests/stress/loop_do_while.js @@ -0,0 +1,9 @@ +var ITERATIONS = 200000; + +var sum = 0; +var i = 0; +do { + sum += i; + i++; +} while (i < ITERATIONS); +sum diff --git a/tests/stress/loop_for.js b/tests/stress/loop_for.js new file mode 100644 index 0000000..2fc7005 --- /dev/null +++ b/tests/stress/loop_for.js @@ -0,0 +1,7 @@ +var ITERATIONS = 1000000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += i; +} +sum diff --git a/tests/stress/loop_for_in.js b/tests/stress/loop_for_in.js new file mode 100644 index 0000000..55f31b6 --- /dev/null +++ b/tests/stress/loop_for_in.js @@ -0,0 +1,13 @@ +var ITERATIONS = 5000; + +var obj = {}; +for (var i = 0; i < 100; i++) { + obj["k" + i] = i; +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + for (var k in obj) { + sum += obj[k]; + } +} +sum diff --git a/tests/stress/loop_for_of.js b/tests/stress/loop_for_of.js new file mode 100644 index 0000000..45608c5 --- /dev/null +++ b/tests/stress/loop_for_of.js @@ -0,0 +1,13 @@ +var ITERATIONS = 3000; + +var arr = []; +for (var i = 0; i < 100; i++) { + arr.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + for (var k of arr) { + sum += k; + } +} +sum diff --git a/tests/stress/loop_for_of_string.js b/tests/stress/loop_for_of_string.js new file mode 100644 index 0000000..7b96135 --- /dev/null +++ b/tests/stress/loop_for_of_string.js @@ -0,0 +1,13 @@ +var ITERATIONS = 1500; + +var s = ""; +for (var i = 0; i < 50; i++) { + s += "ab"; +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + for (var k of s) { + sum += k.charCodeAt(0); + } +} +sum diff --git a/tests/stress/loop_index.js b/tests/stress/loop_index.js new file mode 100644 index 0000000..91bc7c4 --- /dev/null +++ b/tests/stress/loop_index.js @@ -0,0 +1,13 @@ +var ITERATIONS = 3000; + +var arr = []; +for (var i = 0; i < 100; i++) { + arr.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + for (var k = 0; k < arr.length; k++) { + sum += arr[k]; + } +} +sum diff --git a/tests/stress/loop_while.js b/tests/stress/loop_while.js new file mode 100644 index 0000000..c26af31 --- /dev/null +++ b/tests/stress/loop_while.js @@ -0,0 +1,9 @@ +var ITERATIONS = 1000000; + +var sum = 0; +var i = 0; +while (i < ITERATIONS) { + sum += i; + i++; +} +sum diff --git a/tests/stress/loop_while_index.js b/tests/stress/loop_while_index.js new file mode 100644 index 0000000..a51253c --- /dev/null +++ b/tests/stress/loop_while_index.js @@ -0,0 +1,15 @@ +var ITERATIONS = 3000; + +var arr = []; +for (var i = 0; i < 100; i++) { + arr.push(i); +} +var sum = 0; +for (var j = 0; j < ITERATIONS; j++) { + var k = 0; + while (k < arr.length) { + sum += arr[k]; + k++; + } +} +sum diff --git a/tests/stress/map_ops.js b/tests/stress/map_ops.js new file mode 100644 index 0000000..f31ee4c --- /dev/null +++ b/tests/stress/map_ops.js @@ -0,0 +1,11 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var m = new Map(); + for (var j = 0; j < 10; j++) { + m.set(j, j * 2); + } + sum += m.get(5); +} +sum diff --git a/tests/stress/math_ops.js b/tests/stress/math_ops.js new file mode 100644 index 0000000..d7e4909 --- /dev/null +++ b/tests/stress/math_ops.js @@ -0,0 +1,10 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += Math.floor(i * 1.5); + sum += Math.abs(i - 50000); + sum += Math.max(i, 0); + sum += Math.min(i, 999999); +} +sum diff --git a/tests/stress/object_keys.js b/tests/stress/object_keys.js new file mode 100644 index 0000000..d51d5c3 --- /dev/null +++ b/tests/stress/object_keys.js @@ -0,0 +1,11 @@ +var ITERATIONS = 10000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var obj = {}; + for (var j = 0; j < 20; j++) { + obj["k" + j] = j; + } + sum += Object.keys(obj).length; +} +sum diff --git a/tests/stress/prop_access.js b/tests/stress/prop_access.js new file mode 100644 index 0000000..a1942c6 --- /dev/null +++ b/tests/stress/prop_access.js @@ -0,0 +1,8 @@ +var ITERATIONS = 100000; + +var obj = { a: 1, b: 2, c: 3, d: 4 }; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += obj.a + obj.b + obj.c + obj.d; +} +sum diff --git a/tests/stress/prop_bracket.js b/tests/stress/prop_bracket.js new file mode 100644 index 0000000..6471166 --- /dev/null +++ b/tests/stress/prop_bracket.js @@ -0,0 +1,9 @@ +var ITERATIONS = 100000; + +var obj = { a: 1, b: 2, c: 3 }; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var x = obj["a"]; + sum += x; +} +sum diff --git a/tests/stress/prop_delete.js b/tests/stress/prop_delete.js new file mode 100644 index 0000000..7122f9a --- /dev/null +++ b/tests/stress/prop_delete.js @@ -0,0 +1,10 @@ +var ITERATIONS = 20000; + +var obj = { a: 1, b: 2, c: 3 }; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + delete obj.a; + obj.a = i; + sum += obj.a; +} +sum diff --git a/tests/stress/prop_dynamic.js b/tests/stress/prop_dynamic.js new file mode 100644 index 0000000..a720b40 --- /dev/null +++ b/tests/stress/prop_dynamic.js @@ -0,0 +1,9 @@ +var ITERATIONS = 50000; + +var obj = {}; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + obj["key"] = i; + sum += obj["key"]; +} +sum diff --git a/tests/stress/prop_nested.js b/tests/stress/prop_nested.js new file mode 100644 index 0000000..ea2f650 --- /dev/null +++ b/tests/stress/prop_nested.js @@ -0,0 +1,8 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var obj = { nested: { deep: { value: i } } }; + sum += obj.nested.deep.value; +} +sum diff --git a/tests/stress/gc.js b/tests/stress/prop_set.js similarity index 65% rename from tests/stress/gc.js rename to tests/stress/prop_set.js index 230271d..732b2be 100644 --- a/tests/stress/gc.js +++ b/tests/stress/prop_set.js @@ -1,8 +1,10 @@ var ITERATIONS = 100000; +var obj = { x: 0, y: 0 }; var sum = 0; for (var i = 0; i < ITERATIONS; i++) { - var obj = { x: i, y: i * 2, nested: { a: 1, b: 2 } }; + obj.x = i; + obj.y = i * 2; sum += obj.x + obj.y; } sum diff --git a/tests/stress/set_ops.js b/tests/stress/set_ops.js new file mode 100644 index 0000000..11f1984 --- /dev/null +++ b/tests/stress/set_ops.js @@ -0,0 +1,11 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var s = new Set(); + for (var j = 0; j < 10; j++) { + s.add(j); + } + sum += s.size; +} +sum diff --git a/tests/stress/string.js b/tests/stress/string.js deleted file mode 100644 index 46f0cd7..0000000 --- a/tests/stress/string.js +++ /dev/null @@ -1,7 +0,0 @@ -var ITERATIONS = 10000; - -var s = ""; -for (var i = 0; i < ITERATIONS; i++) { - s += "a" + i; -} -s.length diff --git a/tests/stress/string_build.js b/tests/stress/string_build.js new file mode 100644 index 0000000..4f372d6 --- /dev/null +++ b/tests/stress/string_build.js @@ -0,0 +1,11 @@ +var ITERATIONS = 20000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var s = ""; + for (var j = 0; j < 50; j++) { + s += j; + } + sum += s.length; +} +sum diff --git a/tests/stress/string_case.js b/tests/stress/string_case.js new file mode 100644 index 0000000..e440731 --- /dev/null +++ b/tests/stress/string_case.js @@ -0,0 +1,8 @@ +var ITERATIONS = 50000; + +var s = "Mixed CASE String with UPPER and lower parts"; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += s.toUpperCase().length + s.toLowerCase().length; +} +sum diff --git a/tests/stress/string_char.js b/tests/stress/string_char.js new file mode 100644 index 0000000..83c1828 --- /dev/null +++ b/tests/stress/string_char.js @@ -0,0 +1,9 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var s = "abc"; + sum += s.charAt(1) === "b"; + sum += s.charCodeAt(0); +} +sum diff --git a/tests/stress/string_concat.js b/tests/stress/string_concat.js new file mode 100644 index 0000000..e89b631 --- /dev/null +++ b/tests/stress/string_concat.js @@ -0,0 +1,11 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var a = "1"; + var b = "2"; + var c = "3"; + var d = a + b + c + a + b + c; + sum += d.length; +} +sum diff --git a/tests/stress/string_indexof.js b/tests/stress/string_indexof.js new file mode 100644 index 0000000..70327d6 --- /dev/null +++ b/tests/stress/string_indexof.js @@ -0,0 +1,8 @@ +var ITERATIONS = 50000; + +var s = "The quick brown fox jumps over the lazy dog. 0123456789 abcdefghijklmnopqrstuvwxyz"; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += s.indexOf("fox"); +} +sum diff --git a/tests/stress/string_replace.js b/tests/stress/string_replace.js new file mode 100644 index 0000000..04b1b32 --- /dev/null +++ b/tests/stress/string_replace.js @@ -0,0 +1,9 @@ +var ITERATIONS = 20000; + +var s = "hello world, hello engine, hello rust"; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var r = s.replace("hello", "hi"); + sum += r.length; +} +sum diff --git a/tests/stress/string_split.js b/tests/stress/string_split.js new file mode 100644 index 0000000..1b34e28 --- /dev/null +++ b/tests/stress/string_split.js @@ -0,0 +1,9 @@ +var ITERATIONS = 20000; + +var s = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var parts = s.split(","); + sum += parts.length; +} +sum diff --git a/tests/stress/string_substring.js b/tests/stress/string_substring.js new file mode 100644 index 0000000..e4ba389 --- /dev/null +++ b/tests/stress/string_substring.js @@ -0,0 +1,9 @@ +var ITERATIONS = 50000; + +var s = "The quick brown fox jumps over the lazy dog. 0123456789 abcdefghijklmnopqrstuvwxyz"; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + var sub = s.substring(4, 15); + sum += sub.length; +} +sum diff --git a/tests/stress/string_trim.js b/tests/stress/string_trim.js new file mode 100644 index 0000000..c9ed9a8 --- /dev/null +++ b/tests/stress/string_trim.js @@ -0,0 +1,8 @@ +var ITERATIONS = 20000; + +var s = "hello world this is a string that gets trimmed "; +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += s.trim().length; +} +sum diff --git a/tests/stress/try_catch_ok.js b/tests/stress/try_catch_ok.js new file mode 100644 index 0000000..55f67f2 --- /dev/null +++ b/tests/stress/try_catch_ok.js @@ -0,0 +1,11 @@ +var ITERATIONS = 50000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + try { + sum += 1; + } catch (e) { + sum += 2; + } +} +sum diff --git a/tests/stress/try_catch_throw.js b/tests/stress/try_catch_throw.js new file mode 100644 index 0000000..2ceffec --- /dev/null +++ b/tests/stress/try_catch_throw.js @@ -0,0 +1,11 @@ +var ITERATIONS = 20000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + try { + throw new Error("boom"); + } catch (e) { + sum += e.message.length; + } +} +sum diff --git a/tests/stress/typeof_ops.js b/tests/stress/typeof_ops.js new file mode 100644 index 0000000..b0b489a --- /dev/null +++ b/tests/stress/typeof_ops.js @@ -0,0 +1,10 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += typeof i; + sum += typeof "str"; + sum += typeof null; + sum += typeof {}.a; +} +sum diff --git a/tests/stress/unary_ops.js b/tests/stress/unary_ops.js new file mode 100644 index 0000000..fd41a33 --- /dev/null +++ b/tests/stress/unary_ops.js @@ -0,0 +1,10 @@ +var ITERATIONS = 100000; + +var sum = 0; +for (var i = 0; i < ITERATIONS; i++) { + sum += -i; + sum += ~i; + sum += !i; + sum += !(i > 0); +} +sum