mirror of https://github.com/tc39/test262.git
Merge branch 'bocoup/ta-subarray'
This commit is contained in:
commit
851be6108a
|
@ -0,0 +1,64 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Throws a TypeError creating a new instance with a detached buffer
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
7. Let relativeBegin be ? ToInteger(begin).
|
||||
...
|
||||
9. If end is undefined, let relativeEnd be srcLength; else, let relativeEnd be
|
||||
? ToInteger(end).
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
4. Return ? TypedArrayCreate(constructor, argumentList).
|
||||
|
||||
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
|
||||
|
||||
1. Let newTypedArray be ? Construct(constructor, argumentList).
|
||||
...
|
||||
|
||||
22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] )
|
||||
|
||||
...
|
||||
11. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
|
||||
...
|
||||
includes: [testTypedArray.js, detachArrayBuffer.js]
|
||||
---*/
|
||||
|
||||
var begin, end;
|
||||
|
||||
var o1 = {
|
||||
valueOf: function() {
|
||||
begin = true;
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
var o2 = {
|
||||
valueOf: function() {
|
||||
end = true;
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA(2);
|
||||
begin = false;
|
||||
end = false;
|
||||
|
||||
$DETACHBUFFER(sample.buffer);
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(o1, o2);
|
||||
});
|
||||
|
||||
assert(begin, "observable ToInteger(begin)");
|
||||
assert(end, "observable ToInteger(end)");
|
||||
});
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Infinity values on begin and end
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
assert(
|
||||
compareArray(sample.subarray(-Infinity), [40, 41, 42, 43]),
|
||||
"begin == -Infinity"
|
||||
);
|
||||
assert(
|
||||
compareArray(sample.subarray(Infinity), []),
|
||||
"being == Infinity"
|
||||
);
|
||||
assert(
|
||||
compareArray(sample.subarray(0, -Infinity), []),
|
||||
"end == -Infinity"
|
||||
);
|
||||
assert(
|
||||
compareArray(sample.subarray(0, Infinity), [40, 41, 42, 43]),
|
||||
"end == Infinity"
|
||||
);
|
||||
});
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: -0 values on begin and end
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
assert(
|
||||
compareArray(sample.subarray(-0), [40, 41, 42, 43]),
|
||||
"begin == -0"
|
||||
);
|
||||
assert(
|
||||
compareArray(sample.subarray(-0, 4), [40, 41, 42, 43]),
|
||||
"being == -0, end == length"
|
||||
);
|
||||
assert(
|
||||
compareArray(sample.subarray(0, -0), []),
|
||||
"being == 0, end == -0"
|
||||
);
|
||||
assert(
|
||||
compareArray(sample.subarray(-0, -0), []),
|
||||
"being == -0, end == -0"
|
||||
);
|
||||
});
|
26
test/built-ins/TypedArray/prototype/subarray/result-does-not-copy-ordinary-properties.js
vendored
Normal file
26
test/built-ins/TypedArray/prototype/subarray/result-does-not-copy-ordinary-properties.js
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Subarray result does not import own property
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
includes: [testTypedArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([41, 42, 43, 44]);
|
||||
var result;
|
||||
|
||||
sample.foo = 42;
|
||||
|
||||
result = sample.subarray(0);
|
||||
assert.sameValue(
|
||||
result.hasOwnProperty("foo"),
|
||||
false,
|
||||
"does not import own property"
|
||||
);
|
||||
});
|
30
test/built-ins/TypedArray/prototype/subarray/result-is-new-instance-from-same-ctor.js
vendored
Normal file
30
test/built-ins/TypedArray/prototype/subarray/result-is-new-instance-from-same-ctor.js
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Returns a new instance from the same constructor
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
var result = sample.subarray(1);
|
||||
|
||||
assert.sameValue(
|
||||
Object.getPrototypeOf(result),
|
||||
Object.getPrototypeOf(sample),
|
||||
"prototype"
|
||||
);
|
||||
assert.sameValue(result.constructor, sample.constructor, "constructor");
|
||||
assert(result instanceof TA, "instanceof");
|
||||
|
||||
assert(
|
||||
compareArray(sample, [40, 41, 42, 43]),
|
||||
"original sample remains the same"
|
||||
);
|
||||
});
|
34
test/built-ins/TypedArray/prototype/subarray/result-is-new-instance-with-shared-buffer.js
vendored
Normal file
34
test/built-ins/TypedArray/prototype/subarray/result-is-new-instance-with-shared-buffer.js
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Returns a new instance sharing the same buffer
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
var buffer = sample.buffer;
|
||||
var result = sample.subarray(1);
|
||||
|
||||
assert.notSameValue(result, sample, "returns a new instance");
|
||||
assert.sameValue(result.buffer, sample.buffer, "shared buffer");
|
||||
assert.sameValue(sample.buffer, buffer, "original buffer is preserved");
|
||||
|
||||
sample[1] = 100;
|
||||
assert(
|
||||
compareArray(result, [100, 42, 43]),
|
||||
"changes on the original sample values affect the new instance"
|
||||
);
|
||||
|
||||
result[1] = 111;
|
||||
assert(
|
||||
compareArray(sample, [40, 100, 111, 43]),
|
||||
"changes on the new instance values affect the original sample"
|
||||
);
|
||||
});
|
57
test/built-ins/TypedArray/prototype/subarray/results-with-different-length.js
vendored
Normal file
57
test/built-ins/TypedArray/prototype/subarray/results-with-different-length.js
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Subarray may return a new instance with a smaller length
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
function testRes(result, expected, msg) {
|
||||
assert(compareArray(result, expected), msg + ", result: [" + result + "]");
|
||||
}
|
||||
|
||||
testRes(sample.subarray(1), [41, 42, 43], "begin == 1");
|
||||
testRes(sample.subarray(2), [42, 43], "begin == 2");
|
||||
testRes(sample.subarray(3), [43], "begin == 3");
|
||||
|
||||
testRes(sample.subarray(1, 4), [41, 42, 43], "begin == 1, end == length");
|
||||
testRes(sample.subarray(2, 4), [42, 43], "begin == 2, end == length");
|
||||
testRes(sample.subarray(3, 4), [43], "begin == 3, end == length");
|
||||
|
||||
testRes(sample.subarray(0, 1), [40], "begin == 0, end == 1");
|
||||
testRes(sample.subarray(0, 2), [40, 41], "begin == 0, end == 2");
|
||||
testRes(sample.subarray(0, 3), [40, 41, 42], "begin == 0, end == 3");
|
||||
|
||||
testRes(sample.subarray(-1), [43], "begin == -1");
|
||||
testRes(sample.subarray(-2), [42, 43], "begin == -2");
|
||||
testRes(sample.subarray(-3), [41, 42, 43], "begin == -3");
|
||||
|
||||
testRes(sample.subarray(-1, 4), [43], "begin == -1, end == length");
|
||||
testRes(sample.subarray(-2, 4), [42, 43], "begin == -2, end == length");
|
||||
testRes(sample.subarray(-3, 4), [41, 42, 43], "begin == -3, end == length");
|
||||
|
||||
testRes(sample.subarray(0, -1), [40, 41, 42], "begin == 0, end == -1");
|
||||
testRes(sample.subarray(0, -2), [40, 41], "begin == 0, end == -2");
|
||||
testRes(sample.subarray(0, -3), [40], "begin == 0, end == -3");
|
||||
|
||||
testRes(sample.subarray(-0, -1), [40, 41, 42], "begin == -0, end == -1");
|
||||
testRes(sample.subarray(-0, -2), [40, 41], "begin == -0, end == -2");
|
||||
testRes(sample.subarray(-0, -3), [40], "begin == -0, end == -3");
|
||||
|
||||
testRes(sample.subarray(-2, -1), [42], "length == 4, begin == -2, end == -1");
|
||||
testRes(sample.subarray(1, -1), [41, 42], "length == 4, begin == 1, end == -1");
|
||||
testRes(sample.subarray(1, -2), [41], "length == 4, begin == 1, end == -2");
|
||||
testRes(sample.subarray(2, -1), [42], "length == 4, begin == 2, end == -1");
|
||||
|
||||
testRes(sample.subarray(-1, 5), [43], "begin == -1, end > length");
|
||||
testRes(sample.subarray(-2, 4), [42, 43], "begin == -2, end > length");
|
||||
testRes(sample.subarray(-3, 4), [41, 42, 43], "begin == -3, end > length");
|
||||
});
|
|
@ -0,0 +1,56 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Subarray may return a new empty instance
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
function testRes(result, msg) {
|
||||
assert.sameValue(result.length, 0, msg);
|
||||
assert.sameValue(
|
||||
result.hasOwnProperty(0),
|
||||
false,
|
||||
msg + " & result.hasOwnProperty(0) === false"
|
||||
);
|
||||
}
|
||||
|
||||
testRes(sample.subarray(4), "begin == length");
|
||||
testRes(sample.subarray(5), "begin > length");
|
||||
|
||||
testRes(sample.subarray(4, 4), "begin == length, end == length");
|
||||
testRes(sample.subarray(5, 4), "begin > length, end == length");
|
||||
|
||||
testRes(sample.subarray(4, 4), "begin == length, end > length");
|
||||
testRes(sample.subarray(5, 4), "begin > length, end > length");
|
||||
|
||||
testRes(sample.subarray(0, 0), "begin == 0, end == 0");
|
||||
testRes(sample.subarray(-0, -0), "begin == -0, end == -0");
|
||||
testRes(sample.subarray(1, 0), "begin > 0, end == 0");
|
||||
testRes(sample.subarray(-1, 0), "being < 0, end == 0");
|
||||
|
||||
testRes(sample.subarray(2, 1), "begin > 0, begin < length, begin > end, end > 0");
|
||||
testRes(sample.subarray(2, 2), "begin > 0, begin < length, begin == end");
|
||||
|
||||
testRes(sample.subarray(2, -2), "begin > 0, begin < length, end == -2");
|
||||
|
||||
testRes(sample.subarray(-1, -1), "length = 4, begin == -1, end == -1");
|
||||
testRes(sample.subarray(-1, -2), "length = 4, begin == -1, end == -2");
|
||||
testRes(sample.subarray(-2, -2), "length = 4, begin == -2, end == -2");
|
||||
|
||||
testRes(sample.subarray(0, -4), "begin == 0, end == -length");
|
||||
testRes(sample.subarray(-4, -4), "begin == -length, end == -length");
|
||||
testRes(sample.subarray(-5, -4), "begin < -length, end == -length");
|
||||
|
||||
testRes(sample.subarray(0, -5), "begin == 0, end < -length");
|
||||
testRes(sample.subarray(-4, -5), "begin == -length, end < -length");
|
||||
testRes(sample.subarray(-5, -5), "begin < -length, end < -length");
|
||||
});
|
|
@ -0,0 +1,36 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Subarray may return a new instance with the same length
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
function testRes(result, msg) {
|
||||
assert.sameValue(result.length, 4, msg);
|
||||
assert.sameValue(result[0], 40, msg + " & result[0] === 40");
|
||||
assert.sameValue(result[1], 41, msg + " & result[1] === 41");
|
||||
assert.sameValue(result[2], 42, msg + " & result[2] === 42");
|
||||
assert.sameValue(result[3], 43, msg + " & result[3] === 43");
|
||||
}
|
||||
|
||||
testRes(sample.subarray(0), "begin == 0");
|
||||
testRes(sample.subarray(-4), "begin == -srcLength");
|
||||
testRes(sample.subarray(-5), "begin < -srcLength");
|
||||
|
||||
testRes(sample.subarray(0, 4), "begin == 0, end == srcLength");
|
||||
testRes(sample.subarray(-4, 4), "begin == -srcLength, end == srcLength");
|
||||
testRes(sample.subarray(-5, 4), "begin < -srcLength, end == srcLength");
|
||||
|
||||
testRes(sample.subarray(0, 5), "begin == 0, end > srcLength");
|
||||
testRes(sample.subarray(-4, 5), "begin == -srcLength, end > srcLength");
|
||||
testRes(sample.subarray(-5, 5), "begin < -srcLength, end > srcLength");
|
||||
});
|
24
test/built-ins/TypedArray/prototype/subarray/return-abrupt-from-begin-symbol.js
vendored
Normal file
24
test/built-ins/TypedArray/prototype/subarray/return-abrupt-from-begin-symbol.js
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Return abrupt from ToInteger(begin), begin is symbol
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
7. Let relativeBegin be ? ToInteger(begin).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol]
|
||||
---*/
|
||||
|
||||
var s = Symbol("1");
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA();
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(s);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,37 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Return abrupt from ToInteger(begin)
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
7. Let relativeBegin be ? ToInteger(begin).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
---*/
|
||||
|
||||
var o1 = {
|
||||
valueOf: function() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
};
|
||||
|
||||
var o2 = {
|
||||
toString: function() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
};
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA();
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
sample.subarray(o1);
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
sample.subarray(o2);
|
||||
});
|
||||
});
|
25
test/built-ins/TypedArray/prototype/subarray/return-abrupt-from-end-symbol.js
vendored
Normal file
25
test/built-ins/TypedArray/prototype/subarray/return-abrupt-from-end-symbol.js
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Return abrupt from ToInteger(end), end is symbol
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
9. If end is undefined, let relativeEnd be srcLength; else, let relativeEnd
|
||||
be ? ToInteger(end).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol]
|
||||
---*/
|
||||
|
||||
var s = Symbol("1");
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA();
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0, s);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,38 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Return abrupt from ToInteger(end)
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
9. If end is undefined, let relativeEnd be srcLength; else, let relativeEnd
|
||||
be ? ToInteger(end).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
---*/
|
||||
|
||||
var o1 = {
|
||||
valueOf: function() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
};
|
||||
|
||||
var o2 = {
|
||||
toString: function() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
};
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA();
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
sample.subarray(0, o1);
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
sample.subarray(0, o2);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,39 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: Return abrupt from SpeciesConstructor's get Constructor
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
1. Assert: Type(O) is Object.
|
||||
2. Let C be ? Get(O, "constructor").
|
||||
3. If C is undefined, return defaultConstructor.
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
Object.defineProperty(sample, "constructor", {
|
||||
get: function() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
sample.subarray(0);
|
||||
});
|
||||
});
|
60
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-ctor-inherited.js
vendored
Normal file
60
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-ctor-inherited.js
vendored
Normal file
|
@ -0,0 +1,60 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: get inherited constructor on SpeciesConstructor
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
1. Assert: Type(O) is Object.
|
||||
2. Let C be ? Get(O, "constructor").
|
||||
3. If C is undefined, return defaultConstructor.
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
var calls = 0;
|
||||
var result;
|
||||
|
||||
Object.defineProperty(TA.prototype, "constructor", {
|
||||
get: function() {
|
||||
calls++;
|
||||
}
|
||||
});
|
||||
|
||||
result = sample.subarray(0);
|
||||
|
||||
assert.sameValue(calls, 1, "called custom ctor get accessor once");
|
||||
|
||||
assert.sameValue(
|
||||
Object.getPrototypeOf(result),
|
||||
Object.getPrototypeOf(sample),
|
||||
"use defaultCtor on an undefined return - getPrototypeOf check"
|
||||
);
|
||||
assert.sameValue(
|
||||
result.constructor,
|
||||
undefined,
|
||||
"used defaultCtor but still checks the inherited .constructor"
|
||||
);
|
||||
|
||||
calls = 6;
|
||||
result.constructor;
|
||||
assert.sameValue(
|
||||
calls,
|
||||
7,
|
||||
"result.constructor triggers the inherited accessor property"
|
||||
);
|
||||
});
|
62
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-ctor-returns-throws.js
vendored
Normal file
62
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-ctor-returns-throws.js
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Throws if O.constructor returns a non-Object and non-undefined value
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
1. Assert: Type(O) is Object.
|
||||
2. Let C be ? Get(O, "constructor").
|
||||
3. If C is undefined, return defaultConstructor.
|
||||
4. If Type(C) is not Object, throw a TypeError exception.
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
sample.constructor = 42;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "42");
|
||||
|
||||
sample.constructor = "1";
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "string");
|
||||
|
||||
sample.constructor = null;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "null");
|
||||
|
||||
sample.constructor = NaN;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "NaN");
|
||||
|
||||
sample.constructor = false;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "false");
|
||||
|
||||
sample.constructor = Symbol("1");
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "symbol");
|
||||
});
|
|
@ -0,0 +1,52 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: get constructor on SpeciesConstructor
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
1. Assert: Type(O) is Object.
|
||||
2. Let C be ? Get(O, "constructor").
|
||||
3. If C is undefined, return defaultConstructor.
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
var calls = 0;
|
||||
var result;
|
||||
|
||||
Object.defineProperty(sample, "constructor", {
|
||||
get: function() {
|
||||
calls++;
|
||||
}
|
||||
});
|
||||
|
||||
result = sample.subarray(0);
|
||||
|
||||
assert.sameValue(calls, 1, "called custom ctor get accessor once");
|
||||
|
||||
assert.sameValue(
|
||||
Object.getPrototypeOf(result),
|
||||
Object.getPrototypeOf(sample),
|
||||
"use defaultCtor on an undefined return - getPrototypeOf check"
|
||||
);
|
||||
assert.sameValue(
|
||||
result.constructor,
|
||||
TA,
|
||||
"use defaultCtor on an undefined return - .constructor check"
|
||||
);
|
||||
});
|
44
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-abrupt.js
vendored
Normal file
44
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-abrupt.js
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Returns abrupt from get @@species on found constructor
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
1. Assert: Type(O) is Object.
|
||||
2. Let C be ? Get(O, "constructor").
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA(2);
|
||||
|
||||
sample.constructor = {};
|
||||
|
||||
Object.defineProperty(sample.constructor, Symbol.species, {
|
||||
get: function() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
sample.subarray(0);
|
||||
});
|
||||
});
|
62
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-invocation.js
vendored
Normal file
62
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-invocation.js
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Verify arguments on custom @@species construct call
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
4. Return ? TypedArrayCreate(constructor, argumentList).
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
...
|
||||
7. If IsConstructor(S) is true, return S.
|
||||
...
|
||||
|
||||
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
|
||||
|
||||
1. Let newTypedArray be ? Construct(constructor, argumentList).
|
||||
2. Perform ? ValidateTypedArray(newTypedArray).
|
||||
3. If argumentList is a List of a single Number, then
|
||||
...
|
||||
4. Return newTypedArray.
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42]);
|
||||
var calls = 0;
|
||||
var expectedOffset = TA.BYTES_PER_ELEMENT;
|
||||
var result, ctorThis;
|
||||
|
||||
sample.constructor = {};
|
||||
sample.constructor[Symbol.species] = function(buffer, offset, length) {
|
||||
result = arguments;
|
||||
ctorThis = this;
|
||||
return new TA(buffer, offset, length);
|
||||
};;
|
||||
|
||||
sample.subarray(1);
|
||||
|
||||
assert.sameValue(result.length, 3, "called with 3 arguments");
|
||||
assert.sameValue(result[0], sample.buffer, "[0] is sample.buffer");
|
||||
assert.sameValue(result[1], expectedOffset, "[1] is the byte offset pos");
|
||||
assert.sameValue(result[2], 2, "[2] is expected length");
|
||||
|
||||
assert(
|
||||
ctorThis instanceof sample.constructor[Symbol.species],
|
||||
"`this` value in the @@species fn is an instance of the function itself"
|
||||
);
|
||||
});
|
|
@ -0,0 +1,52 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Custom @@species constructor may return a totally different TypedArray
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
4. Return ? TypedArrayCreate(constructor, argumentList).
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
...
|
||||
7. If IsConstructor(S) is true, return S.
|
||||
...
|
||||
|
||||
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
|
||||
|
||||
1. Let newTypedArray be ? Construct(constructor, argumentList).
|
||||
2. Perform ? ValidateTypedArray(newTypedArray).
|
||||
3. If argumentList is a List of a single Number, then
|
||||
...
|
||||
4. Return newTypedArray.
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40]);
|
||||
var other = new Int8Array([1, 0, 1]);
|
||||
var result;
|
||||
|
||||
sample.constructor = {};
|
||||
sample.constructor[Symbol.species] = function() {
|
||||
return other;
|
||||
};
|
||||
|
||||
result = sample.subarray(0, 0);
|
||||
|
||||
assert.sameValue(result, other, "returned another typedarray");
|
||||
assert(compareArray(result, [1, 0, 1]), "the returned object is preserved");
|
||||
});
|
46
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-throws.js
vendored
Normal file
46
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-throws.js
vendored
Normal file
|
@ -0,0 +1,46 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Custom @@species constructor throws if it does not return a compatible object
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
4. Return ? TypedArrayCreate(constructor, argumentList).
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
...
|
||||
7. If IsConstructor(S) is true, return S.
|
||||
...
|
||||
|
||||
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
|
||||
|
||||
1. Let newTypedArray be ? Construct(constructor, argumentList).
|
||||
2. Perform ? ValidateTypedArray(newTypedArray).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA(2);
|
||||
var ctor = function() {};
|
||||
|
||||
sample.constructor = {};
|
||||
sample.constructor[Symbol.species] = ctor;
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
});
|
||||
});
|
53
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor.js
vendored
Normal file
53
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor.js
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Use custom @@species constructor if available
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
4. Return ? TypedArrayCreate(constructor, argumentList).
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
...
|
||||
7. If IsConstructor(S) is true, return S.
|
||||
...
|
||||
|
||||
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
|
||||
|
||||
1. Let newTypedArray be ? Construct(constructor, argumentList).
|
||||
2. Perform ? ValidateTypedArray(newTypedArray).
|
||||
3. If argumentList is a List of a single Number, then
|
||||
...
|
||||
4. Return newTypedArray.
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42]);
|
||||
var calls = 0;
|
||||
var result;
|
||||
|
||||
sample.constructor = {};
|
||||
sample.constructor[Symbol.species] = function(buffer, offset, length) {
|
||||
calls++;
|
||||
return new TA(buffer, offset, length);
|
||||
};;
|
||||
|
||||
result = sample.subarray(1);
|
||||
|
||||
assert.sameValue(calls, 1, "ctor called once");
|
||||
assert(compareArray(result, [41, 42]), "expected subarray");
|
||||
});
|
65
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-returns-throws.js
vendored
Normal file
65
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-returns-throws.js
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Throws if returned @@species is not a constructor, null or undefined.
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
6. If S is either undefined or null, return defaultConstructor.
|
||||
7. If IsConstructor(S) is true, return S.
|
||||
8. Throw a TypeError exception.
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA(2);
|
||||
|
||||
sample.constructor = {};
|
||||
|
||||
sample.constructor[Symbol.species] = 0;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "0");
|
||||
|
||||
sample.constructor[Symbol.species] = "string";
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "string");
|
||||
|
||||
sample.constructor[Symbol.species] = {};
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "{}");
|
||||
|
||||
sample.constructor[Symbol.species] = NaN;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "NaN");
|
||||
|
||||
sample.constructor[Symbol.species] = false;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "false");
|
||||
|
||||
sample.constructor[Symbol.species] = true;
|
||||
assert.throws(TypeError, function() {
|
||||
sample.subarray(0);
|
||||
}, "true");
|
||||
});
|
53
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-use-default-ctor.js
vendored
Normal file
53
test/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-use-default-ctor.js
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
Use defaultConstructor if @@species is either undefined or null
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
6. If S is either undefined or null, return defaultConstructor.
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA(2);
|
||||
var result;
|
||||
|
||||
sample.constructor = {};
|
||||
|
||||
result = sample.subarray(0);
|
||||
|
||||
assert.sameValue(
|
||||
Object.getPrototypeOf(result),
|
||||
Object.getPrototypeOf(sample),
|
||||
"undefined @@species - prototype check "
|
||||
);
|
||||
assert.sameValue(result.constructor, TA, "undefined @@species - ctor check");
|
||||
|
||||
sample.constructor[Symbol.species] = null;
|
||||
result = sample.subarray(0);
|
||||
|
||||
assert.sameValue(
|
||||
Object.getPrototypeOf(result),
|
||||
Object.getPrototypeOf(sample),
|
||||
"null @@species - prototype check "
|
||||
);
|
||||
assert.sameValue(result.constructor, TA, "null @@species - ctor check");
|
||||
});
|
|
@ -0,0 +1,45 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: >
|
||||
get @@species from found constructor
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
|
||||
|
||||
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
|
||||
|
||||
...
|
||||
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
|
||||
...
|
||||
|
||||
7.3.20 SpeciesConstructor ( O, defaultConstructor )
|
||||
|
||||
1. Assert: Type(O) is Object.
|
||||
2. Let C be ? Get(O, "constructor").
|
||||
...
|
||||
5. Let S be ? Get(C, @@species).
|
||||
...
|
||||
includes: [testTypedArray.js]
|
||||
features: [Symbol.species]
|
||||
---*/
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA(2);
|
||||
var calls = 0;
|
||||
|
||||
sample.constructor = {};
|
||||
|
||||
Object.defineProperty(sample.constructor, Symbol.species, {
|
||||
get: function() {
|
||||
calls++;
|
||||
}
|
||||
});
|
||||
|
||||
sample.subarray(0);
|
||||
|
||||
assert.sameValue(calls, 1);
|
||||
});
|
|
@ -0,0 +1,47 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: ToInteger(begin)
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
7. Let relativeBegin be ? ToInteger(begin).
|
||||
...
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
var obj = {
|
||||
valueOf: function() {
|
||||
return 2;
|
||||
}
|
||||
};
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
assert(compareArray(sample.subarray(false), [40, 41, 42, 43]), "false");
|
||||
assert(compareArray(sample.subarray(true), [41, 42, 43]), "true");
|
||||
|
||||
assert(compareArray(sample.subarray(NaN), [40, 41, 42, 43]), "NaN");
|
||||
assert(compareArray(sample.subarray(null), [40, 41, 42, 43]), "null");
|
||||
assert(compareArray(sample.subarray(undefined), [40, 41, 42, 43]), "undefined");
|
||||
|
||||
assert(compareArray(sample.subarray(1.1), [41, 42, 43]), "1.1");
|
||||
assert(compareArray(sample.subarray(1.5), [41, 42, 43]), "1.5");
|
||||
assert(compareArray(sample.subarray(0.6), [40, 41, 42, 43]), "0.6");
|
||||
|
||||
assert(compareArray(sample.subarray(-1.5), [43]), "-1.5");
|
||||
assert(compareArray(sample.subarray(-1.1), [43]), "-1.1");
|
||||
assert(compareArray(sample.subarray(-0.6), [40, 41, 42, 43]), "-0.6");
|
||||
|
||||
assert(compareArray(sample.subarray("3"), [43]), "string");
|
||||
assert(
|
||||
compareArray(
|
||||
sample.subarray(obj),
|
||||
[42, 43]
|
||||
),
|
||||
"object"
|
||||
);
|
||||
});
|
|
@ -0,0 +1,47 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-%typedarray%.prototype.subarray
|
||||
description: ToInteger(end)
|
||||
info: >
|
||||
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
|
||||
|
||||
...
|
||||
9. If end is undefined, let relativeEnd be srcLength; else, let relativeEnd be
|
||||
? ToInteger(end).
|
||||
...
|
||||
includes: [testTypedArray.js, compareArray.js]
|
||||
---*/
|
||||
|
||||
var obj = {
|
||||
valueOf: function() {
|
||||
return 2;
|
||||
}
|
||||
};
|
||||
|
||||
testWithTypedArrayConstructors(function(TA) {
|
||||
var sample = new TA([40, 41, 42, 43]);
|
||||
|
||||
assert(compareArray(sample.subarray(0, false), []), "false");
|
||||
assert(compareArray(sample.subarray(0, true), [40]), "true");
|
||||
|
||||
assert(compareArray(sample.subarray(0, NaN), []), "NaN");
|
||||
assert(compareArray(sample.subarray(0, null), []), "null");
|
||||
assert(compareArray(sample.subarray(0, undefined), [40, 41, 42, 43]), "undefined");
|
||||
|
||||
assert(compareArray(sample.subarray(0, 0.6), []), "0.6");
|
||||
assert(compareArray(sample.subarray(0, 1.1), [40]), "1.1");
|
||||
assert(compareArray(sample.subarray(0, 1.5), [40]), "1.5");
|
||||
assert(compareArray(sample.subarray(0, -0.6), []), "-0.6");
|
||||
assert(compareArray(sample.subarray(0, -1.1), [40, 41, 42]), "-1.1");
|
||||
assert(compareArray(sample.subarray(0, -1.5), [40, 41, 42]), "-1.5");
|
||||
|
||||
assert(compareArray(sample.subarray(0, "3"), [40, 41, 42]), "string");
|
||||
assert(
|
||||
compareArray(
|
||||
sample.subarray(0, obj),
|
||||
[40, 41]
|
||||
),
|
||||
"object"
|
||||
);
|
||||
});
|
Loading…
Reference in New Issue