summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/WeakSet/prototype
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/test262/built-ins/WeakSet/prototype
parentInitial commit. (diff)
downloadfirefox-esr-upstream.tar.xz
firefox-esr-upstream.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/built-ins/WeakSet/prototype')
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/Symbol.toStringTag.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/add.js24
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-object-element.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-symbol-element.js27
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-array.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-map.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-object.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-set.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-weakset-prototype.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/length.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/name.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-symbol.js21
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate-symbol.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this.js19
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-boolean.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-null.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-number.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-string.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-symbol.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-undefined.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/add/throw-when-value-cannot-be-held-weakly.js38
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/constructor/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/constructor/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor-intrinsic.js16
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor.js19
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-entry-initial-iterable.js29
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-object-entry.js28
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-symbol-entry.js34
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-array.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-map.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-object.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-set.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-weakset-prototype.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/length.js24
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/name.js24
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-delete-is-noop.js19
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-value-cannot-be-held-weakly.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-boolean.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-null.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-number.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-string.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-symbol.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-undefined.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-array.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-map.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-object.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-set.js26
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-weakset-prototype.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/has.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/length.js24
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/name.js24
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-object-value-not-present.js25
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-symbol-value-not-present.js29
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-value-cannot-be-held-weakly.js22
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-object-value-present.js20
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-symbol-value-present.js24
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-boolean.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-null.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-number.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-string.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-symbol.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-undefined.js23
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/prototype-attributes.js14
-rw-r--r--js/src/tests/test262/built-ins/WeakSet/prototype/shell.js0
76 files changed, 1614 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/Symbol.toStringTag.js b/js/src/tests/test262/built-ins/WeakSet/prototype/Symbol.toStringTag.js
new file mode 100644
index 0000000000..46283bf20b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/Symbol.toStringTag.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype-@@tostringtag
+description: >
+ `Symbol.toStringTag` property descriptor
+info: |
+ The initial value of the @@toStringTag property is the String value
+ "WeakSet".
+
+ This property has the attributes { [[Writable]]: false, [[Enumerable]]:
+ false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.toStringTag]
+---*/
+
+assert.sameValue(WeakSet.prototype[Symbol.toStringTag], 'WeakSet');
+
+verifyNotEnumerable(WeakSet.prototype, Symbol.toStringTag);
+verifyNotWritable(WeakSet.prototype, Symbol.toStringTag);
+verifyConfigurable(WeakSet.prototype, Symbol.toStringTag);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/add.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/add.js
new file mode 100644
index 0000000000..fdde051296
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/add.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: WeakSet.prototype.add property descriptor
+info: |
+ WeakSet.prototype.add ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ typeof WeakSet.prototype.add,
+ 'function',
+ 'typeof WeakSet.prototype.add is "function"'
+);
+
+verifyNotEnumerable(WeakSet.prototype, 'add');
+verifyWritable(WeakSet.prototype, 'add');
+verifyConfigurable(WeakSet.prototype, 'add');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-object-element.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-object-element.js
new file mode 100644
index 0000000000..89c946b923
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-object-element.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: >
+ Adds an Object value.
+info: |
+ WeakSet.prototype.add ( _value_ )
+ 6. Append _value_ as the last element of _entries_.
+features: [WeakSet]
+---*/
+
+var s = new WeakSet();
+var foo = {};
+var bar = {};
+var baz = {};
+
+s.add(foo);
+s.add(bar);
+s.add(baz);
+
+assert(s.has(foo));
+assert(s.has(bar));
+assert(s.has(baz));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-symbol-element.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-symbol-element.js
new file mode 100644
index 0000000000..9b91ce876d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/adds-symbol-element.js
@@ -0,0 +1,27 @@
+// |reftest| skip -- symbols-as-weakmap-keys is not supported
+// Copyright (C) 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Adds a Symbol value.
+info: |
+ WeakSet.prototype.add ( _value_ )
+ 6. Append _value_ as the last element of _entries_.
+features: [Symbol, WeakSet, symbols-as-weakmap-keys]
+---*/
+
+var s = new WeakSet();
+var foo = Symbol('a description');
+var bar = Symbol('a description');
+var baz = Symbol('a different description');
+
+s.add(foo);
+s.add(baz);
+s.add(Symbol.hasInstance);
+
+assert(s.has(foo), 'Regular symbol');
+assert(!s.has(bar), "Symbols with the same description don't alias each other");
+assert(s.has(baz), 'Regular symbol with different description');
+assert(s.has(Symbol.hasInstance), 'Well-known symbol');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/browser.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/browser.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-array.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-array.js
new file mode 100644
index 0000000000..ad6734e3dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-array.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.add ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call([], {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call([], {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-map.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-map.js
new file mode 100644
index 0000000000..7b8a340c4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-map.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.add ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(new Map(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(new Map(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-object.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-object.js
new file mode 100644
index 0000000000..3b54921c00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-object.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.add ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call({}, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call({}, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-set.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-set.js
new file mode 100644
index 0000000000..93c7bbb218
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-set.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.add ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+features: [Set]
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(new Set(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(new Set(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-weakset-prototype.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-weakset-prototype.js
new file mode 100644
index 0000000000..947d16e2fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-weakset-prototype.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.add ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(WeakSet.prototype, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(WeakSet.prototype, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/length.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/length.js
new file mode 100644
index 0000000000..7112319f12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/length.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: WeakSet.prototype.add.length descriptor
+info: |
+ WeakSet.prototype.add ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.add.length, 1,
+ 'The value of `WeakSet.prototype.add.length` is `1`'
+);
+
+verifyNotEnumerable(WeakSet.prototype.add, 'length');
+verifyNotWritable(WeakSet.prototype.add, 'length');
+verifyConfigurable(WeakSet.prototype.add, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/name.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/name.js
new file mode 100644
index 0000000000..e81470dc1c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/name.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: WeakSet.prototype.add.name descriptor
+info: |
+ WeakSet.prototype.add ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.add.name, 'add',
+ 'The value of WeakSet.prototype.add.name is "add"'
+);
+
+verifyNotEnumerable(WeakSet.prototype.add, 'name');
+verifyNotWritable(WeakSet.prototype.add, 'name');
+verifyConfigurable(WeakSet.prototype.add, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/not-a-constructor.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/not-a-constructor.js
new file mode 100644
index 0000000000..df2a033c51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ WeakSet.prototype.add does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, WeakSet, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(WeakSet.prototype.add),
+ false,
+ 'isConstructor(WeakSet.prototype.add) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let ws = new WeakSet(); new ws.add({});
+}, '`let ws = new WeakSet(); new ws.add({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-symbol.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-symbol.js
new file mode 100644
index 0000000000..5e8b67fc06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-symbol.js
@@ -0,0 +1,21 @@
+// |reftest| skip -- symbols-as-weakmap-keys is not supported
+// Copyright (C) 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weakset.prototype.add
+description: Returns `this` after adding a new value.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ ...
+ 7. Return S.
+features: [Symbol, WeakSet, symbols-as-weakmap-keys]
+---*/
+
+var s = new WeakSet();
+
+assert.sameValue(s.add(Symbol('description')), s, '`s.add(Symbol("description"))` returns `s`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate-symbol.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate-symbol.js
new file mode 100644
index 0000000000..9b3b269f91
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate-symbol.js
@@ -0,0 +1,25 @@
+// |reftest| skip -- symbols-as-weakmap-keys is not supported
+// Copyright (C) 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-weakset.prototype.add
+description: Returns `this` when new value is duplicate.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ ...
+ 5. 5. For each element e of entries, do
+ a. If e is not empty and SameValue(e, value) is true, then
+ i. Return S.
+ ...
+features: [Symbol, WeakSet, symbols-as-weakmap-keys]
+---*/
+
+var foo = Symbol('description');
+var s = new WeakSet([foo]);
+
+assert.sameValue(s.add(foo), s, '`s.add(foo)` returns `s`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate.js
new file mode 100644
index 0000000000..0757a57d08
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Returns `this` when new value is duplicate.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be this value.
+ ...
+ 6. Repeat for each e that is an element of entries,
+ a. If e is not empty and SameValueZero(e, value) is true, then
+ i. Return S.
+ ...
+---*/
+
+var foo = {};
+var s = new WeakSet([foo]);
+
+assert.sameValue(s.add(foo), s, '`s.add(foo)` returns `s`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this.js
new file mode 100644
index 0000000000..36bc5d7ab6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/returns-this.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Returns `this` after adding a new value.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be this value.
+ ...
+ 8. Return S.
+
+---*/
+
+var s = new WeakSet();
+
+assert.sameValue(s.add({}), s, '`s.add({})` returns `s`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/shell.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/shell.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-boolean.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000..1e42880bd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-boolean.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(false, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(false, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-null.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-null.js
new file mode 100644
index 0000000000..1177ac42d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-null.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(null, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(null, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-number.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-number.js
new file mode 100644
index 0000000000..84f4ba33d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-number.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(0, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(0, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-string.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-string.js
new file mode 100644
index 0000000000..851eabfdce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-string.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call('', {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call('', {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-symbol.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000..a2346d5ed2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-symbol.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(Symbol(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(Symbol(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-undefined.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000..6bb069cc3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/this-not-object-throw-undefined.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.add ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.add.call(undefined, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.add.call(undefined, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/add/throw-when-value-cannot-be-held-weakly.js b/js/src/tests/test262/built-ins/WeakSet/prototype/add/throw-when-value-cannot-be-held-weakly.js
new file mode 100644
index 0000000000..d92f3a283b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/add/throw-when-value-cannot-be-held-weakly.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.add
+description: Throws TypeError if value cannot be held weakly.
+info: |
+ WeakSet.prototype.add ( _value_ )
+ 3. If CanBeHeldWeakly(_value_) is *false*, throw a *TypeError* exception.
+features: [Symbol, WeakSet]
+---*/
+
+var s = new WeakSet();
+
+assert.throws(TypeError, function() {
+ s.add(1);
+});
+
+assert.throws(TypeError, function() {
+ s.add(false);
+});
+
+assert.throws(TypeError, function() {
+ s.add();
+});
+
+assert.throws(TypeError, function() {
+ s.add('string');
+});
+
+assert.throws(TypeError, function() {
+ s.add(null);
+});
+
+assert.throws(TypeError, function() {
+ s.add(Symbol.for('registered symbol'));
+}, 'Registered symbol not allowed as WeakSet value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/browser.js b/js/src/tests/test262/built-ins/WeakSet/prototype/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/browser.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/browser.js b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/browser.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/shell.js b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/shell.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor-intrinsic.js b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor-intrinsic.js
new file mode 100644
index 0000000000..bc2d887649
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor-intrinsic.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.constructor
+description: >
+ The initial value of WeakSet.prototype.constructor is the %WeakSet%
+ intrinsic object.
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.constructor,
+ WeakSet,
+ 'The value of WeakSet.prototype.constructor is "WeakSet"'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor.js b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor.js
new file mode 100644
index 0000000000..4c4867f411
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.constructor
+description: >
+ WeakSet.prototype.constructor property descriptor
+info: |
+ WeakSet ( [ iterable ] )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(WeakSet.prototype, 'constructor');
+verifyWritable(WeakSet.prototype, 'constructor');
+verifyConfigurable(WeakSet.prototype, 'constructor');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/browser.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/browser.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-entry-initial-iterable.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-entry-initial-iterable.js
new file mode 100644
index 0000000000..be17a549fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-entry-initial-iterable.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Delete an entry from initial iterable.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 5. Let entries be the List that is the value of S’s [[WeakSetData]] internal
+ slot.
+ 6. Repeat for each e that is an element of entries,
+ a. If e is not empty and SameValue(e, value) is true, then
+ i. Replace the element of entries whose value is e with an element whose
+ value is empty.
+ ii. Return true.
+ ...
+---*/
+
+var foo = {};
+var s = new WeakSet([foo]);
+
+var result = s.delete(foo);
+
+assert.sameValue(s.has(foo), false);
+assert.sameValue(result, true, 'WeakSet#delete returns true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-object-entry.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-object-entry.js
new file mode 100644
index 0000000000..419c0e9d11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-object-entry.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Delete an entry that is an Object
+info: |
+ WeakSet.prototype.delete ( _value_ )
+ 4. Let _entries_ be the List that is _S_.[[WeakSetData]].
+ 5. For each element _e_ of _entries_, do
+ a. If _e_ is not ~empty~ and SameValue(_e_, _value_) is *true*, then
+ i. Replace the element of _entries_ whose value is _e_ with an element
+ whose value is ~empty~.
+ ii. Return *true*.
+features: [WeakSet]
+---*/
+
+var foo = {};
+var s = new WeakSet();
+
+s.add(foo);
+
+var result = s.delete(foo);
+
+assert.sameValue(s.has(foo), false);
+assert.sameValue(result, true, 'WeakSet#delete returns true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-symbol-entry.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-symbol-entry.js
new file mode 100644
index 0000000000..daaa0b0d11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete-symbol-entry.js
@@ -0,0 +1,34 @@
+// |reftest| skip -- symbols-as-weakmap-keys is not supported
+// Copyright (C) 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Delete an entry that is a Symbol
+info: |
+ WeakSet.prototype.delete ( _value_ )
+ 4. Let _entries_ be the List that is _S_.[[WeakSetData]].
+ 5. For each element _e_ of _entries_, do
+ a. If _e_ is not ~empty~ and SameValue(_e_, _value_) is *true*, then
+ i. Replace the element of _entries_ whose value is _e_ with an element
+ whose value is ~empty~.
+ ii. Return *true*.
+features: [Symbol, WeakSet, symbols-as-weakmap-keys]
+---*/
+
+var foo = Symbol('a description');
+var bar = Symbol('a description');
+var s = new WeakSet();
+
+s.add(foo);
+s.add(bar);
+s.add(Symbol.hasInstance);
+
+assert.sameValue(s.delete(foo), true, 'Returns true for regular symbol');
+assert(!s.has(foo), 'Regular symbol is removed from set');
+assert(s.has(bar), 'Symbols with the same description are not aliased to each other');
+
+assert.sameValue(s.delete(Symbol.hasInstance), true, 'Returns true for well-known symbol');
+assert(!s.has(Symbol.hasInstance), 'Well-known symbol is removed from set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete.js
new file mode 100644
index 0000000000..6a6a0c6567
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/delete.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ WeakSet.prototype.delete property descriptor
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ typeof WeakSet.prototype.delete,
+ 'function',
+ 'typeof WeakSet.prototype.delete is "function"'
+);
+
+verifyNotEnumerable(WeakSet.prototype, 'delete');
+verifyWritable(WeakSet.prototype, 'delete');
+verifyConfigurable(WeakSet.prototype, 'delete');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-array.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-array.js
new file mode 100644
index 0000000000..85af47a0c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-array.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call([], {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call([], {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-map.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-map.js
new file mode 100644
index 0000000000..9b66219774
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-map.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(new Map(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(new Map(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-object.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-object.js
new file mode 100644
index 0000000000..e8a65833cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-object.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call({}, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call({}, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-set.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-set.js
new file mode 100644
index 0000000000..a870aacbb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-set.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+features: [Set]
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(new Set(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(new Set(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-weakset-prototype.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-weakset-prototype.js
new file mode 100644
index 0000000000..a50aa93aa9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-weakset-prototype.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(WeakSet.prototype, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(WeakSet.prototype, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/length.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/length.js
new file mode 100644
index 0000000000..516b074855
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/length.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ WeakSet.prototype.delete.length value and writability.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.delete.length, 1,
+ 'The value of WeakSet.prototype.delete.length is 1'
+);
+
+verifyNotEnumerable(WeakSet.prototype.delete, 'length');
+verifyNotWritable(WeakSet.prototype.delete, 'length');
+verifyConfigurable(WeakSet.prototype.delete, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/name.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/name.js
new file mode 100644
index 0000000000..b759002e7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/name.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ WeakSet.prototype.delete.name value and writability.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.delete.name, 'delete',
+ 'The value of WeakSet.prototype.delete.name is "delete"'
+);
+
+verifyNotEnumerable(WeakSet.prototype.delete, 'name');
+verifyNotWritable(WeakSet.prototype.delete, 'name');
+verifyConfigurable(WeakSet.prototype.delete, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/not-a-constructor.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/not-a-constructor.js
new file mode 100644
index 0000000000..3f5c5605d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ WeakSet.prototype.delete does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, WeakSet, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(WeakSet.prototype.delete),
+ false,
+ 'isConstructor(WeakSet.prototype.delete) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let ws = new WeakSet(); new ws.delete();
+}, '`let ws = new WeakSet(); new ws.delete()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-delete-is-noop.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-delete-is-noop.js
new file mode 100644
index 0000000000..a122d06edb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-delete-is-noop.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Return false if entry wasn't in the WeakSet.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ ...
+ 7. Return false.
+
+---*/
+
+var s = new WeakSet();
+
+assert.sameValue(s.delete({}), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-value-cannot-be-held-weakly.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-value-cannot-be-held-weakly.js
new file mode 100644
index 0000000000..cdffefa60a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/returns-false-when-value-cannot-be-held-weakly.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: >
+ Return false if value cannot be held weakly.
+info: |
+ WeakSet.prototype.delete ( _value_ )
+ 3. If CanBeHeldWeakly(_value_) is *false*, return *false*.
+features: [Symbol, WeakSet]
+---*/
+
+var s = new WeakSet();
+
+assert.sameValue(s.delete(1), false);
+assert.sameValue(s.delete(''), false);
+assert.sameValue(s.delete(null), false);
+assert.sameValue(s.delete(undefined), false);
+assert.sameValue(s.delete(true), false);
+assert.sameValue(s.delete(Symbol.for('registered symbol')), false, 'Registered symbol not allowed as value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/shell.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/shell.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-boolean.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000..77b60d78c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-boolean.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(false, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(false, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-null.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-null.js
new file mode 100644
index 0000000000..728e010f90
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-null.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(null, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(null, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-number.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-number.js
new file mode 100644
index 0000000000..01a602ee90
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-number.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(0, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(0, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-string.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-string.js
new file mode 100644
index 0000000000..f7e89614b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-string.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call('', {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call('', {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-symbol.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000..8e0144c3f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-symbol.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(Symbol(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(Symbol(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-undefined.js b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000..f0b2b22949
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/delete/this-not-object-throw-undefined.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.delete
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.delete ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.delete.call(undefined, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.delete.call(undefined, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/browser.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/browser.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-array.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-array.js
new file mode 100644
index 0000000000..daa590bb0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-array.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.has ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call([], {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call([], {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-map.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-map.js
new file mode 100644
index 0000000000..1d2bc18b93
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-map.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.has ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(new Map(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(new Map(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-object.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-object.js
new file mode 100644
index 0000000000..b8ffc9af21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-object.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.has ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call({}, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call({}, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-set.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-set.js
new file mode 100644
index 0000000000..9058742811
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-set.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.has ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+features: [Set]
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(new Set(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(new Set(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-weakset-prototype.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-weakset-prototype.js
new file mode 100644
index 0000000000..85b34cc559
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-weakset-prototype.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Throws TypeError if context doesn't have a [[WeakSetData]] internal slot.
+info: |
+ WeakSet.prototype.has ( value )
+
+ ...
+ 3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError
+ exception.
+ ...
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(WeakSet.prototype, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(WeakSet.prototype, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/has.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/has.js
new file mode 100644
index 0000000000..9436ad778e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/has.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ WeakSet.prototype.has property descriptor
+info: |
+ WeakSet.prototype.has ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ typeof WeakSet.prototype.has,
+ 'function',
+ 'typeof WeakSet.prototype.has is "function"'
+);
+
+verifyNotEnumerable(WeakSet.prototype, 'has');
+verifyWritable(WeakSet.prototype, 'has');
+verifyConfigurable(WeakSet.prototype, 'has');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/length.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/length.js
new file mode 100644
index 0000000000..5e4176a5cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/length.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ WeakSet.prototype.has.length value and writability.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.has.length, 1,
+ 'The value of WeakSet.prototype.has.length is 1'
+);
+
+verifyNotEnumerable(WeakSet.prototype.has, 'length');
+verifyNotWritable(WeakSet.prototype.has, 'length');
+verifyConfigurable(WeakSet.prototype.has, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/name.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/name.js
new file mode 100644
index 0000000000..6fca676585
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/name.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ WeakSet.prototype.has.name value and writability.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ WeakSet.prototype.has.name, 'has',
+ 'The value of WeakSet.prototype.has.name is "has"'
+);
+
+verifyNotEnumerable(WeakSet.prototype.has, 'name');
+verifyNotWritable(WeakSet.prototype.has, 'name');
+verifyConfigurable(WeakSet.prototype.has, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/not-a-constructor.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/not-a-constructor.js
new file mode 100644
index 0000000000..b21d7cb36f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ WeakSet.prototype.has does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, WeakSet, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(WeakSet.prototype.has),
+ false,
+ 'isConstructor(WeakSet.prototype.has) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let ws = new WeakSet(); new ws.has();
+}, '`let ws = new WeakSet(); new ws.has()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-object-value-not-present.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-object-value-not-present.js
new file mode 100644
index 0000000000..61bb52e68b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-object-value-not-present.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Return false when an Object value is not present in the WeakSet entries.
+info: |
+ WeakSet.prototype.has ( _value_ )
+ 6. Return *false*.
+features: [WeakSet]
+---*/
+
+var foo = {};
+var bar = {};
+var s = new WeakSet();
+
+assert.sameValue(s.has(foo), false);
+
+s.add(foo);
+assert.sameValue(s.has(bar), false);
+
+s.delete(foo);
+assert.sameValue(s.has(foo), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-symbol-value-not-present.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-symbol-value-not-present.js
new file mode 100644
index 0000000000..f640fc25be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-symbol-value-not-present.js
@@ -0,0 +1,29 @@
+// |reftest| skip -- symbols-as-weakmap-keys is not supported
+// Copyright (C) 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Return false when a Symbol value is not present in the WeakSet entries.
+info: |
+ WeakSet.prototype.has ( _value_ )
+ 6. Return *false*.
+features: [Symbol, WeakSet, symbols-as-weakmap-keys]
+---*/
+
+var foo = Symbol('a description');
+var bar = Symbol('a description');
+var s = new WeakSet();
+
+assert.sameValue(s.has(foo), false, 'Set is initially empty of regular symbol');
+assert.sameValue(s.has(Symbol.hasInstance), false, 'Set is initially empty of well-known symbol');
+
+s.add(foo);
+assert.sameValue(s.has(bar), false, 'Symbols with the same description are not aliased to each other');
+
+s.delete(foo);
+assert.sameValue(s.has(foo), false, 'Set is again empty of regular symbol after deleting');
+s.delete(Symbol.hasInstance);
+assert.sameValue(s.has(Symbol.hasInstance), false, 'Set is again empty of well-known symbol after deleting');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-value-cannot-be-held-weakly.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-value-cannot-be-held-weakly.js
new file mode 100644
index 0000000000..257a3084e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-false-when-value-cannot-be-held-weakly.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Returns false if value cannot be held weakly.
+info: |
+ WeakSet.prototype.has ( _value_ )
+ 4. If CanBeHeldWeakly(_value_) is *false*, return *false*.
+features: [Symbol, WeakSet]
+---*/
+
+var s = new WeakSet();
+
+assert.sameValue(s.has(1), false);
+assert.sameValue(s.has(''), false);
+assert.sameValue(s.has(null), false);
+assert.sameValue(s.has(undefined), false);
+assert.sameValue(s.has(true), false);
+assert.sameValue(s.has(Symbol.for('registered symbol')), false, 'Registered symbol not allowed as value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-object-value-present.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-object-value-present.js
new file mode 100644
index 0000000000..a573289c03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-object-value-present.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Returns true when an Object value is present in the WeakSet entries list.
+info: |
+ WeakSet.prototype.has ( _value_ )
+ 5. For each element _e_ of _entries_, do
+ a. If _e_ is not ~empty~ and SameValue(_e_, _value_) is *true*, return *true*.
+features: [WeakSet]
+---*/
+
+var foo = {};
+var s = new WeakSet();
+
+s.add(foo);
+assert.sameValue(s.has(foo), true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-symbol-value-present.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-symbol-value-present.js
new file mode 100644
index 0000000000..3ff3428392
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/returns-true-when-symbol-value-present.js
@@ -0,0 +1,24 @@
+// |reftest| skip -- symbols-as-weakmap-keys is not supported
+// Copyright (C) 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: >
+ Returns true when a Symbol value is present in the WeakSet entries list.
+info: |
+ WeakSet.prototype.has ( _value_ )
+ 5. For each element _e_ of _entries_, do
+ a. If _e_ is not ~empty~ and SameValue(_e_, _value_) is *true*, return *true*.
+features: [Symbol, WeakSet, symbols-as-weakmap-keys]
+---*/
+
+var foo = Symbol('a description');
+var s = new WeakSet();
+
+s.add(foo);
+assert.sameValue(s.has(foo), true, 'Regular symbol as value');
+
+s.add(Symbol.hasInstance);
+assert.sameValue(s.has(Symbol.hasInstance), true, 'Well-known symbol as value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/shell.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/shell.js
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-boolean.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000..aa0ed435c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-boolean.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(false, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(false, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-null.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-null.js
new file mode 100644
index 0000000000..5d8c2507e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-null.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(null, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(null, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-number.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-number.js
new file mode 100644
index 0000000000..9ebc28ea00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-number.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(0, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(0, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-string.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-string.js
new file mode 100644
index 0000000000..2be2567b3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-string.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call('', {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call('', {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-symbol.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000..24465cdc64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-symbol.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(Symbol(), {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(Symbol(), {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-undefined.js b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000..33669f28b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/has/this-not-object-throw-undefined.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype.has
+description: Throws TypeError if `this` is not Object.
+info: |
+ WeakSet.prototype.has ( value )
+
+ 1. Let S be the this value.
+ 2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+ WeakSet.prototype.has.call(undefined, {});
+});
+
+assert.throws(TypeError, function() {
+ var s = new WeakSet();
+ s.has.call(undefined, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/prototype-attributes.js b/js/src/tests/test262/built-ins/WeakSet/prototype/prototype-attributes.js
new file mode 100644
index 0000000000..682327d2a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/prototype-attributes.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-weakset.prototype
+description: >
+ WeakSet.prototype is not writable, not enumerable and not configurable.
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(WeakSet, 'prototype');
+verifyNotWritable(WeakSet, 'prototype');
+verifyNotConfigurable(WeakSet, 'prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/WeakSet/prototype/shell.js b/js/src/tests/test262/built-ins/WeakSet/prototype/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/WeakSet/prototype/shell.js