tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

bug1580246.js (2141B)


      1 load(libdir + "./asserts.js");
      2 
      3 // Exercise object-literal creation. Many other tests also exercise details of
      4 // objects created by object literals -- e.g., byteSize-of-objects.js. Here we
      5 // simply want to hit the cases {run-once ctx, repeated ctx} x {constant,
      6 // parameterized} x {small, large}.
      7 
      8 function build_large_literal(var_name, num_keys, extra) {
      9  let s = "var " + var_name + " = {";
     10  for (let i = 0; i < num_keys; i++) {
     11    s += "prop" + i + ": " + i + ",";
     12  }
     13  s += extra;
     14  s += "};";
     15  return s;
     16 }
     17 
     18 let small_singleton = {a: 1, b: 2, 0: "I'm an indexed property" };
     19 // Large enough to force dictionary mode -- should inhibit objliteral use in
     20 // frontend:
     21 eval(build_large_literal("large_singleton", 513, ""));
     22 
     23 let an_integer = 42;
     24 let small_singleton_param = { a: 1, b: 2, c: an_integer };
     25 eval(build_large_literal("large_singleton_param", 513, "prop_int: an_integer"));
     26 
     27 function f(a_parameterized_integer) {
     28  let small_templated = {a: 1, b: 2, 0: "I'm an indexed property" };
     29  // Large enough to force dictionary mode -- should inhibit objliteral use in
     30  // frontend:
     31  eval(build_large_literal("large_templated", 513, ""));
     32 
     33  let small_templated_param = { a: 1, b: 2, c: a_parameterized_integer };
     34  eval(build_large_literal("large_templated_param", 513, "prop_int: a_parameterized_integer"));
     35 
     36  return {small_templated, large_templated,
     37          small_templated_param, large_templated_param};
     38 }
     39 
     40 for (let i = 0; i < 10; i++) {
     41  let {small_templated, large_templated,
     42       small_templated_param, large_templated_param} = f(42);
     43 
     44  assertDeepEq(small_templated, small_singleton);
     45  assertDeepEq(large_templated, large_singleton);
     46  assertDeepEq(small_templated_param, small_singleton_param);
     47  assertDeepEq(large_templated_param, large_singleton_param);
     48 }
     49 
     50 let small_lit_array = [0, 1, 2, 3];
     51 let large_cow_lit_array = [0, 1, 2, 3, 4, 5, 6, 7];
     52 assertEq(4, small_lit_array.length);
     53 assertEq(8, large_cow_lit_array.length);
     54 for (let i = 0; i < small_lit_array.length; i++) {
     55  assertEq(i, small_lit_array[i]);
     56 }
     57 for (let i = 0; i < large_cow_lit_array.length; i++) {
     58  assertEq(i, large_cow_lit_array[i]);
     59 }