1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_6/Array/for_of_1.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,140 @@ 1.4 +// Test corner cases of for-of iteration over Arrays. 1.5 +// The current spidermonky JSOP_SPREAD implementation for function calls 1.6 +// with '...rest' arguments uses a ForOfIterator to extract values from 1.7 +// the array, so we use that mechanism to test ForOfIterator here. 1.8 + 1.9 + 1.10 +// Test the properties and prototype of a generator object. 1.11 +function TestManySmallArrays() { 1.12 + function doIter(f, arr) { 1.13 + return f(...arr) 1.14 + } 1.15 + 1.16 + function fun(a, b, c) { 1.17 + var result = 0; 1.18 + for (var i = 0; i < arguments.length; i++) 1.19 + result += arguments[i]; 1.20 + return result; 1.21 + } 1.22 + 1.23 + 1.24 + var TRUE_SUM = 0; 1.25 + var N = 100; 1.26 + var M = 3; 1.27 + var sum = 0; 1.28 + for (var i = 0; i < N; i++) { 1.29 + var arr = new Array(M); 1.30 + for (var j = 0; j < M; j++) { 1.31 + arr[j] = j; 1.32 + TRUE_SUM += j; 1.33 + } 1.34 + sum += doIter(fun, arr); 1.35 + } 1.36 + assertEq(sum, TRUE_SUM); 1.37 +} 1.38 +TestManySmallArrays(); 1.39 + 1.40 +// Test the properties and prototype of a generator object. 1.41 +function TestSingleSmallArray() { 1.42 + function doIter(f, arr) { 1.43 + return f(...arr) 1.44 + } 1.45 + 1.46 + function fun(a, b, c) { 1.47 + var result = 0; 1.48 + for (var i = 0; i < arguments.length; i++) 1.49 + result += arguments[i]; 1.50 + return result; 1.51 + } 1.52 + 1.53 + 1.54 + var TRUE_SUM = 0; 1.55 + var N = 100; 1.56 + var M = 3; 1.57 + var arr = new Array(M); 1.58 + for (var j = 0; j < M; j++) { 1.59 + arr[j] = j; 1.60 + TRUE_SUM += j; 1.61 + } 1.62 + TRUE_SUM *= N; 1.63 + 1.64 + var sum = 0; 1.65 + for (var i = 0; i < N; i++) { 1.66 + sum += doIter(fun, arr); 1.67 + } 1.68 + assertEq(sum, TRUE_SUM); 1.69 +} 1.70 +TestSingleSmallArray(); 1.71 + 1.72 + 1.73 +function TestChangeArrayPrototype() { 1.74 + function doIter(f, arr) { 1.75 + return f(...arr) 1.76 + } 1.77 + 1.78 + function fun(a, b, c) { 1.79 + var result = 0; 1.80 + for (var i = 0; i < arguments.length; i++) 1.81 + result += arguments[i]; 1.82 + return result; 1.83 + } 1.84 + 1.85 + var Proto1 = Object.create(Array.prototype); 1.86 + 1.87 + var TRUE_SUM = 0; 1.88 + var N = 100; 1.89 + var MID = N/2; 1.90 + var M = 3; 1.91 + var arr = new Array(M); 1.92 + var ARR_SUM = 0; 1.93 + for (var j = 0; j < M; j++) { 1.94 + arr[j] = j; 1.95 + ARR_SUM += j; 1.96 + } 1.97 + 1.98 + var sum = 0; 1.99 + for (var i = 0; i < N; i++) { 1.100 + sum += doIter(fun, arr); 1.101 + if (i == MID) 1.102 + arr.__proto__ = Proto1; 1.103 + TRUE_SUM += ARR_SUM; 1.104 + } 1.105 + assertEq(sum, TRUE_SUM); 1.106 +} 1.107 +TestChangeArrayPrototype(); 1.108 + 1.109 + 1.110 +function TestChangeManyArrayShape() { 1.111 + function doIter(f, arr) { 1.112 + return f(...arr) 1.113 + } 1.114 + 1.115 + function fun(a, b, c) { 1.116 + var result = 0; 1.117 + for (var i = 0; i < arguments.length; i++) 1.118 + result += arguments[i]; 1.119 + return result; 1.120 + } 1.121 + 1.122 + var TRUE_SUM = 0; 1.123 + var N = 100; 1.124 + var MID = N/2; 1.125 + var M = 3; 1.126 + var sum = 0; 1.127 + for (var i = 0; i < N; i++) { 1.128 + var arr = new Array(M); 1.129 + var ARR_SUM = 0; 1.130 + for (var j = 0; j < M; j++) { 1.131 + arr[j] = j; 1.132 + ARR_SUM += j; 1.133 + } 1.134 + arr['v_' + i] = i; 1.135 + sum += doIter(fun, arr); 1.136 + TRUE_SUM += ARR_SUM; 1.137 + } 1.138 + assertEq(sum, TRUE_SUM); 1.139 +} 1.140 +TestChangeManyArrayShape(); 1.141 + 1.142 +if (typeof reportCompare === "function") 1.143 + reportCompare(true, true);