js/src/tests/ecma_6/Array/for_of_1.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

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);

mercurial