[JSC] Clean up Object.entries implementation
[WebKit-https.git] / JSTests / microbenchmarks / try-get-by-id-basic.js
1 // Test tryGetById's value profiling feedback without going too polymorphic.
2
3 var it = 1e5;
4
5 const check = (got, expect) => { if (got != expect) throw "Error: bad result got " + got + " expected " + expect; };
6
7 const bench = f => {
8     // Re-create the builtin each time, so each benchmark gets its own value prediction.
9     const fooPlusBar = createBuiltin(`(function(o) { return @tryGetById(o, "foo") + @tryGetById(o, "bar"); })`);
10     noInline(fooPlusBar);
11     f(fooPlusBar);
12 }
13 noInline(bench);
14
15 // Non bool int32.
16 o = { foo: 42, bar: 1337 };
17 bench(builtin => { var res = 0; for (var i = 0; i < it; ++i) res += builtin(o);  check(res, (o.foo + o.bar) * it); });
18
19 // Non int double.
20 p = { foo: Math.PI, bar: Math.E };
21 bench(builtin => { var res = 0.; for (var i = 0; i < it; ++i) res += builtin(p); check(Math.round(res), Math.round((p.foo + p.bar) * it)); });
22
23 // String ident.
24 s = { foo: "", bar: "⌽" };
25 bench(builtin => { var res = ""; for (var i = 0; i < it; ++i) res += builtin(s); check(res.length, (s.foo.length + s.bar.length) * it); });
26
27 // Again: non bool int32.
28 bench(builtin => { var res = 0; for (var i = 0; i < it; ++i) res += builtin(o); check(res, (o.foo + o.bar) * it); });