Source code

Revision control

Copy as Markdown

Other Tools

for (var constructor of anyTypedArrayConstructors) {
// 'from' method is identical for all typed array constructors.
assertEq(anyTypedArrayConstructors[0].from === constructor.from, true);
// %TypedArray%.from copies arrays.
var src = new constructor([1, 2, 3]), copy = constructor.from(src);
assertEq(copy === src, false);
assertEq(copy instanceof constructor, true);
assertDeepEq(copy, src);
// Non-element properties are not copied.
var a = new constructor([0, 1]);
a.name = "lisa";
assertDeepEq(constructor.from(a), new constructor([0, 1]));
// %TypedArray%.from can copy non-iterable objects, if they're array-like.
src = {0: 0, 1: 1, length: 2};
copy = constructor.from(src);
assertEq(copy instanceof constructor, true);
assertDeepEq(copy, new constructor([0, 1]));
// Properties past the .length are not copied.
src = {0: "0", 1: "1", 2: "two", 9: "nine", name: "lisa", length: 2};
assertDeepEq(constructor.from(src), new constructor([0, 1]));
// If an object has neither an @@iterator method nor .length,
// then it's treated as zero-length.
assertDeepEq(constructor.from({}), new constructor());
// Primitives will be coerced to primitive wrapper first.
assertDeepEq(constructor.from(1), new constructor());
assertDeepEq(constructor.from("123"), new constructor([1, 2, 3]));
assertDeepEq(constructor.from(true), new constructor());
assertDeepEq(constructor.from(Symbol()), new constructor());
// Source object property order doesn't matter.
src = {length: 2, 1: "1", 0: "0"};
assertDeepEq(constructor.from(src), new constructor([0, 1]));
}
if (typeof reportCompare === "function")
reportCompare(true, true);