exports[`test array_lib.js 1`] = ` "/* @flow */ function foo(x:string) { } var a = [0]; var b = a.map(function (x) { foo(x); return \"\" + x; }); var c: number = a[0]; var d: number = b[0]; var e:Array = a.reverse(); var f = [\"\"]; var g:number = f.map(function () { return 0; })[0]; var h: Array = [1,2,3]; var i: Array = [\'a\', \'b\', \'c\']; var j: Array = h.concat(i); var k: Array = h.concat(h); var l: Array = h.concat(1,2,3); var m: Array = h.concat(\'a\', \'b\', \'c\'); var n: Array = h.concat(\'a\', \'b\', \'c\'); // Error function reduce_test() { /* Adapted from the following source: * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce */ [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) { return previousValue + currentValue + array[index]; }); [0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) { return previousValue + currentValue + array[index]; }, 10); var total = [0, 1, 2, 3].reduce(function(a, b) { return a + b; }); var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) { return a.concat(b); }); /* Added later, because the above is insufficient */ // acc is element type of array when no init is provided [\"\"].reduce((acc, str) => acc * str.length); // error, string ~> number [\"\"].reduceRight((acc, str) => acc * str.length); // error, string ~> number } function from_test() { var a: Array = Array.from([1, 2, 3], function(val, index) { return index % 2 ? \"foo\" : String(val); }); var b: Array = Array.from([1, 2, 3], function(val) { return String(val); }); } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /* @flow */ // Error /* Adapted from the following source: * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce */ /* Added later, because the above is insufficient */ // acc is element type of array when no init is provided // error, string ~> number // error, string ~> number function foo(x: string) {} var a = [ 0 ]; var b = a.map(function(x) { foo(x); return \"\" + x; }); var c: number = a[0]; var d: number = b[0]; var e: Array = a.reverse(); var f = [ \"\" ]; var g: number = f.map(function() { return 0; })[0]; var h: Array = [ 1, 2, 3 ]; var i: Array = [ \"a\", \"b\", \"c\" ]; var j: Array = h.concat(i); var k: Array = h.concat(h); var l: Array = h.concat(1, 2, 3); var m: Array = h.concat(\"a\", \"b\", \"c\"); var n: Array = h.concat(\"a\", \"b\", \"c\"); function reduce_test() { [ 0, 1, 2, 3, 4 ].reduce(function(previousValue, currentValue, index, array) { return previousValue + currentValue + array[index]; }); [ 0, 1, 2, 3, 4 ].reduce(function(previousValue, currentValue, index, array) { return previousValue + currentValue + array[index]; }, 10); var total = [ 0, 1, 2, 3 ].reduce(function(a, b) { return a + b; }); var flattened = [ [ 0, 1 ], [ 2, 3 ], [ 4, 5 ] ].reduce(function(a, b) { return a.concat(b); }); [ \"\" ].reduce((acc, str) => acc * str.length); [ \"\" ].reduceRight((acc, str) => acc * str.length); } function from_test() { var a: Array = Array.from([ 1, 2, 3 ], function(val, index) { return (index % 2 ? \"foo\" : String(val)); }); var b: Array = Array.from([ 1, 2, 3 ], function(val) { return String(val); }); } " `;