join-sparse.js (1556B)
1 const join = Array.prototype.join; 2 3 let obj = { length: 10 }; 4 assertEq(join.call(obj, ""), ""); 5 assertEq(join.call(obj), ",".repeat(9)); 6 assertEq(join.call(obj, "abc"), "abc".repeat(9)); 7 8 obj = { [0]: 1, length: 10 }; 9 assertEq(join.call(obj, ""), "1"); 10 assertEq(join.call(obj), "1" + ",".repeat(9)); 11 assertEq(join.call(obj, "abc"), "1" + "abc".repeat(9)); 12 13 obj = { [0]: 1, [1]: 2, [2]: 3, [3]: 4, [4]: 5, length: 2 }; 14 assertEq(join.call(obj), "1,2"); 15 assertEq(join.call(obj, ""), "12"); 16 assertEq(join.call(obj, "abc"), "1abc2"); 17 18 obj = { [0]: 1, [1]: 2, [2]: {}, [3]: 4, length: 3}; 19 assertEq(join.call(obj), "1,2,[object Object]"); 20 assertEq(join.call(obj, ""), "12[object Object]"); 21 assertEq(join.call(obj, "abc"), "1abc2abc[object Object]"); 22 23 assertEq(new Array(10).join(""), ""); 24 assertEq(new Array(10).join(), ",".repeat(9)); 25 assertEq(new Array(10).join("abc"), "abc".repeat(9)); 26 27 assertEq(new Array(100).join(), ",".repeat(99)); 28 assertEq(new Array(100).join(""), ""); 29 assertEq(new Array(100).join("abc"), "abc".repeat(99)); 30 31 var a = [1]; 32 a.length = 10; 33 assertEq(a.join(), "1" + ",".repeat(9)); 34 assertEq(a.join(""), "1"); 35 assertEq(a.join("abc"), "1" + "abc".repeat(9)); 36 37 var a = [1, 2, 3, 4, 5] 38 a.length = 2; 39 assertEq(a.join(), "1,2"); 40 assertEq(a.join(""), "12"); 41 assertEq(a.join("abc"), "1abc2"); 42 43 var a = [1, 2, {}, 4]; 44 a.length = 3; 45 assertEq(a.join(), "1,2,[object Object]"); 46 assertEq(a.join(""), "12[object Object]"); 47 assertEq(a.join("abc"), "1abc2abc[object Object]"); 48 49 // Too slow: 50 // var obj = { [0]: 1, length: 2 ** 33 }; 51 // join.call(obj, "");