Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 // Test corner cases of for-of iteration over Arrays.
2 // The current spidermonky JSOP_SPREAD implementation for function calls
3 // with '...rest' arguments uses a ForOfIterator to extract values from
4 // the array, so we use that mechanism to test ForOfIterator here.
7 // Test the properties and prototype of a generator object.
8 function TestManySmallArrays() {
9 function doIter(f, arr) {
10 return f(...arr)
11 }
13 function fun(a, b, c) {
14 var result = 0;
15 for (var i = 0; i < arguments.length; i++)
16 result += arguments[i];
17 return result;
18 }
21 var TRUE_SUM = 0;
22 var N = 100;
23 var M = 3;
24 var sum = 0;
25 for (var i = 0; i < N; i++) {
26 var arr = new Array(M);
27 for (var j = 0; j < M; j++) {
28 arr[j] = j;
29 TRUE_SUM += j;
30 }
31 sum += doIter(fun, arr);
32 }
33 assertEq(sum, TRUE_SUM);
34 }
35 TestManySmallArrays();
37 // Test the properties and prototype of a generator object.
38 function TestSingleSmallArray() {
39 function doIter(f, arr) {
40 return f(...arr)
41 }
43 function fun(a, b, c) {
44 var result = 0;
45 for (var i = 0; i < arguments.length; i++)
46 result += arguments[i];
47 return result;
48 }
51 var TRUE_SUM = 0;
52 var N = 100;
53 var M = 3;
54 var arr = new Array(M);
55 for (var j = 0; j < M; j++) {
56 arr[j] = j;
57 TRUE_SUM += j;
58 }
59 TRUE_SUM *= N;
61 var sum = 0;
62 for (var i = 0; i < N; i++) {
63 sum += doIter(fun, arr);
64 }
65 assertEq(sum, TRUE_SUM);
66 }
67 TestSingleSmallArray();
70 function TestChangeArrayPrototype() {
71 function doIter(f, arr) {
72 return f(...arr)
73 }
75 function fun(a, b, c) {
76 var result = 0;
77 for (var i = 0; i < arguments.length; i++)
78 result += arguments[i];
79 return result;
80 }
82 var Proto1 = Object.create(Array.prototype);
84 var TRUE_SUM = 0;
85 var N = 100;
86 var MID = N/2;
87 var M = 3;
88 var arr = new Array(M);
89 var ARR_SUM = 0;
90 for (var j = 0; j < M; j++) {
91 arr[j] = j;
92 ARR_SUM += j;
93 }
95 var sum = 0;
96 for (var i = 0; i < N; i++) {
97 sum += doIter(fun, arr);
98 if (i == MID)
99 arr.__proto__ = Proto1;
100 TRUE_SUM += ARR_SUM;
101 }
102 assertEq(sum, TRUE_SUM);
103 }
104 TestChangeArrayPrototype();
107 function TestChangeManyArrayShape() {
108 function doIter(f, arr) {
109 return f(...arr)
110 }
112 function fun(a, b, c) {
113 var result = 0;
114 for (var i = 0; i < arguments.length; i++)
115 result += arguments[i];
116 return result;
117 }
119 var TRUE_SUM = 0;
120 var N = 100;
121 var MID = N/2;
122 var M = 3;
123 var sum = 0;
124 for (var i = 0; i < N; i++) {
125 var arr = new Array(M);
126 var ARR_SUM = 0;
127 for (var j = 0; j < M; j++) {
128 arr[j] = j;
129 ARR_SUM += j;
130 }
131 arr['v_' + i] = i;
132 sum += doIter(fun, arr);
133 TRUE_SUM += ARR_SUM;
134 }
135 assertEq(sum, TRUE_SUM);
136 }
137 TestChangeManyArrayShape();
139 if (typeof reportCompare === "function")
140 reportCompare(true, true);