diff --git a/test/built-ins/Set/constructor.js b/test/built-ins/Set/constructor.js
new file mode 100644
index 0000000000000000000000000000000000000000..859f2dceb1862a2a9028319aa214cb113b1f4ca8
--- /dev/null
+++ b/test/built-ins/Set/constructor.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1
+description: >
+    The Set constructor is the %Set% intrinsic object and the
+    initial value of the Set property of the global object.
+---*/
+
+assert.sameValue(typeof Set, "function", "`typeof Set` is `'function'`");
diff --git a/test/built-ins/Set/length.js b/test/built-ins/Set/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec6e20b89bc508a995536e9211ec2f8b29017fe4
--- /dev/null
+++ b/test/built-ins/Set/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.2
+description: >
+    Properties of the Set Constructor
+
+    Besides the length property (whose value is 0)
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.length, 0, "The value of `Set.length` is `0`");
+
+verifyNotEnumerable(Set, "length");
+verifyNotWritable(Set, "length");
+verifyConfigurable(Set, "length");
diff --git a/test/built-ins/Set/name.js b/test/built-ins/Set/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..c84ba9d01c7495660f060c4438e3ed4af1d950d7
--- /dev/null
+++ b/test/built-ins/Set/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.name, "Set", "The value of `Set.name` is `'Set'`");
+
+verifyNotEnumerable(Set, "name");
+verifyNotWritable(Set, "name");
+verifyConfigurable(Set, "name");
diff --git a/test/built-ins/Set/properties-of-the-set-prototype-object.js b/test/built-ins/Set/properties-of-the-set-prototype-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad46ab8167ccaf2d1a24f7b01aea319555335814
--- /dev/null
+++ b/test/built-ins/Set/properties-of-the-set-prototype-object.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3
+description: >
+    The Set prototype object is the intrinsic object %SetPrototype%.
+    The value of the [[Prototype]] internal slot of the Set prototype
+    object is the intrinsic object %ObjectPrototype% (19.1.3). The Set
+    prototype object is an ordinary object. It does not have a
+    [[SetData]] internal slot.
+---*/
+
+assert.sameValue(
+    Object.getPrototypeOf(Set.prototype),
+    Object.prototype,
+    "`Object.getPrototypeOf(Set.prototype)` returns `Object.prototype`"
+);
diff --git a/test/built-ins/Set/prototype-of-set.js b/test/built-ins/Set/prototype-of-set.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe5f45fb1e57610b45d5ff9f8337b905e081712c
--- /dev/null
+++ b/test/built-ins/Set/prototype-of-set.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.
+/*---
+es6id: 23.2.2
+description: >
+    The value of the [[Prototype]] internal slot of the Set constructor
+    is the intrinsic object %FunctionPrototype% (19.2.3).
+---*/
+
+assert.sameValue(
+    Object.getPrototypeOf(Set),
+    Function.prototype,
+    "`Object.getPrototypeOf(Set)` returns `Function.prototype`"
+);
diff --git a/test/built-ins/Set/prototype/Symbol.iterator-next-iteration-mutable.js b/test/built-ins/Set/prototype/Symbol.iterator/next-iteration-mutable.js
similarity index 100%
rename from test/built-ins/Set/prototype/Symbol.iterator-next-iteration-mutable.js
rename to test/built-ins/Set/prototype/Symbol.iterator/next-iteration-mutable.js
diff --git a/test/built-ins/Set/prototype/Symbol.iterator-next-iteration.js b/test/built-ins/Set/prototype/Symbol.iterator/next-iteration.js
similarity index 100%
rename from test/built-ins/Set/prototype/Symbol.iterator-next-iteration.js
rename to test/built-ins/Set/prototype/Symbol.iterator/next-iteration.js
diff --git a/test/built-ins/Set/prototype/Symbol.iterator-next-no-set-data.js b/test/built-ins/Set/prototype/Symbol.iterator/next-no-set-data.js
similarity index 100%
rename from test/built-ins/Set/prototype/Symbol.iterator-next-no-set-data.js
rename to test/built-ins/Set/prototype/Symbol.iterator/next-no-set-data.js
diff --git a/test/built-ins/Set/prototype/Symbol.iterator-property-descriptor.js b/test/built-ins/Set/prototype/Symbol.iterator/property-descriptor.js
similarity index 100%
rename from test/built-ins/Set/prototype/Symbol.iterator-property-descriptor.js
rename to test/built-ins/Set/prototype/Symbol.iterator/property-descriptor.js
diff --git a/test/built-ins/Set/prototype/Symbol.iterator-Symbol.toStringTag-property-descriptor.js b/test/built-ins/Set/prototype/Symbol.iterator/toStringTag-property-descriptor.js
similarity index 81%
rename from test/built-ins/Set/prototype/Symbol.iterator-Symbol.toStringTag-property-descriptor.js
rename to test/built-ins/Set/prototype/Symbol.iterator/toStringTag-property-descriptor.js
index e1a70b2474a77b4b86856b5a206e19f714f89c67..871d73571bd5cec1c36c1d209b34ca4bf25b3d48 100644
--- a/test/built-ins/Set/prototype/Symbol.iterator-Symbol.toStringTag-property-descriptor.js
+++ b/test/built-ins/Set/prototype/Symbol.iterator/toStringTag-property-descriptor.js
@@ -11,7 +11,11 @@
 
 var SetIteratorProto = Object.getPrototypeOf(new Set()[Symbol.iterator]());
 
-assert.sameValue('Set Iterator', SetIteratorProto[Symbol.toStringTag]);
+assert.sameValue(
+ 'Set Iterator',
+ SetIteratorProto[Symbol.toStringTag],
+ "`'Set Iterator'` is `SetIteratorProto[Symbol.toStringTag]`"
+);
 
 verifyNotEnumerable(SetIteratorProto, Symbol.toStringTag);
 verifyNotWritable(SetIteratorProto, Symbol.toStringTag);
diff --git a/test/built-ins/Set/prototype/Symbol.toStringTag/property-descriptor.js b/test/built-ins/Set/prototype/Symbol.toStringTag/property-descriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..c09938f1080525a77c6a641a3e44b33f7712f32a
--- /dev/null
+++ b/test/built-ins/Set/prototype/Symbol.toStringTag/property-descriptor.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+  description: >
+      `Object.prototype.getOwnPropertyDescriptor` should reflect the value and
+      writability of the @@toStringTag attribute.
+  includes: [propertyHelper.js]
+  es6id: 23.2.3.12
+ ---*/
+
+var SetProto = Object.getPrototypeOf(new Set());
+
+assert.sameValue(
+  SetProto[Symbol.toStringTag],
+  'Set',
+  "The value of `SetProto[Symbol.toStringTag]` is `'Set'`"
+);
+
+verifyNotEnumerable(SetProto, Symbol.toStringTag);
+verifyNotWritable(SetProto, Symbol.toStringTag);
+verifyConfigurable(SetProto, Symbol.toStringTag);
diff --git a/test/built-ins/Set/prototype/add/add.js b/test/built-ins/Set/prototype/add/add.js
new file mode 100644
index 0000000000000000000000000000000000000000..f902a2134efcc3350ec8451d72fb6fe4b3a79fd8
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/add.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.add,
+    "function",
+    "`typeof Set.prototype.add` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "add");
+verifyWritable(Set.prototype, "add");
+verifyConfigurable(Set.prototype, "add");
diff --git a/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e8d96a6fb17a03a60c32600fc85ca688b26652a
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.add.call([], 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call([], 1);
+});
diff --git a/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..e89eb439524bb07cd63f051cdc07b1cdc9b5a886
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-map.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.add.call(new Map(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(new Map(), 1);
+});
diff --git a/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ea5416680f781732c95098ffed2bdc4dcf26928
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-object.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.add.call({}, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call({}, 1);
+});
diff --git a/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-set-prototype.js b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c29da5ab10701fab5a6e059c0a0a620eea99b69
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-set-prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.add.call(Set.prototype, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(Set.prototype, 1);
+});
diff --git a/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d7734f17a80f75011181b97939115dfe3fc29ff
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-weakset.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.add.call(new WeakSet(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(new WeakSet(), 1);
+});
diff --git a/test/built-ins/Set/prototype/add/length.js b/test/built-ins/Set/prototype/add/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a5008941113dba60446c0158ace520a17cb8eb5
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.add.length, 1, "The value of `Set.prototype.add.length` is `1`");
+
+verifyNotEnumerable(Set.prototype.add, "length");
+verifyNotWritable(Set.prototype.add, "length");
+verifyConfigurable(Set.prototype.add, "length");
diff --git a/test/built-ins/Set/prototype/add/name.js b/test/built-ins/Set/prototype/add/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..3453a36f1f79e144894b4a7100463d00ff0cf37d
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.add.name, "add", "The value of `Set.prototype.add.name` is `'add'`");
+
+verifyNotEnumerable(Set.prototype.add, "name");
+verifyNotWritable(Set.prototype.add, "name");
+verifyConfigurable(Set.prototype.add, "name");
diff --git a/test/built-ins/Set/prototype/add/preserves-insertion-order.js b/test/built-ins/Set/prototype/add/preserves-insertion-order.js
new file mode 100644
index 0000000000000000000000000000000000000000..5feda334a6f4717f6aaae24b0dc7d58ec7a36290
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/preserves-insertion-order.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    7. Append value as the last element of entries.
+    ...
+---*/
+
+var s = new Set();
+var expects = [1, 2, 3];
+
+s.add(1).add(2).add(3);
+
+s.forEach(function(value) {
+  assert.sameValue(value, expects.shift());
+});
+
+assert.sameValue(expects.length, 0, "The value of `expects.length` is `0`");
diff --git a/test/built-ins/Set/prototype/add/returns-this-when-ignoring-duplicate.js b/test/built-ins/Set/prototype/add/returns-this-when-ignoring-duplicate.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae21ec5e07841f2031b14b466abfdadf472b7a83
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/returns-this-when-ignoring-duplicate.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    1. Let S be this value.
+    ...
+    5. 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 s = new Set([ 1 ]);
+
+assert.sameValue(s.add(1), s, "`s.add(1)` returns `s`");
diff --git a/test/built-ins/Set/prototype/add/returns-this.js b/test/built-ins/Set/prototype/add/returns-this.js
new file mode 100644
index 0000000000000000000000000000000000000000..972a630c9897381ac20689f6604361435603ec75
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/returns-this.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    1. Let S be this value.
+    ...
+    8. Return S.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.add(1), s, "`s.add(1)` returns `s`");
diff --git a/test/built-ins/Set/prototype/add/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/add/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..84baf0fd5369e461c919158adbdf810d53b1ef8c
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.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() {
+  Set.prototype.add.call(false, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(false, 1);
+});
diff --git a/test/built-ins/Set/prototype/add/this-not-object-throw-null.js b/test/built-ins/Set/prototype/add/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..467d3bd9637a33611d1789005d15b0aa6870fac6
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.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() {
+  Set.prototype.add.call(null, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(null, 1);
+});
diff --git a/test/built-ins/Set/prototype/add/this-not-object-throw-number.js b/test/built-ins/Set/prototype/add/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4c7680370b8f10df466617070a8b98f0a1286e9
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.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() {
+  Set.prototype.add.call(0, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(0, 1);
+});
diff --git a/test/built-ins/Set/prototype/add/this-not-object-throw-string.js b/test/built-ins/Set/prototype/add/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd3dcf9a4a255bfc508bc6976cd43cd0aafed5f1
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.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() {
+  Set.prototype.add.call("", 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call("", 1);
+});
diff --git a/test/built-ins/Set/prototype/add/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/add/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..759147e15fb3989629bd92644964cfcef182e3d9
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.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() {
+  Set.prototype.add.call(Symbol(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(Symbol(), 1);
+});
diff --git a/test/built-ins/Set/prototype/add/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/add/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..59c0eab3d86e4421f70d02f477e397fe8b004223
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.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() {
+  Set.prototype.add.call(undefined, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.add.call(undefined, 1);
+});
diff --git a/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry-initial-iterable.js b/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry-initial-iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..0298ce80868a63dbf571fe5a901641dabf657fbc
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry-initial-iterable.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. 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.
+    6. If value is −0, let value be +0.
+    7. Append value as the last element of entries.
+    ...
+
+---*/
+
+var s = new Set([ 1 ]);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`");
+
+s.add(1);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`");
diff --git a/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry-normalizes-zero.js b/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry-normalizes-zero.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7749a9dc6510ef52b88843072b08d02e49858eb
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry-normalizes-zero.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. 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.
+    6. If value is −0, let value be +0.
+    7. Append value as the last element of entries.
+    ...
+
+---*/
+
+var s = new Set([ -0 ]);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`");
+
+s.add(-0);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`, after executing `s.add(-0)`");
+
+s.add(0);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`, after executing `s.add(0)`");
diff --git a/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry.js b/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry.js
new file mode 100644
index 0000000000000000000000000000000000000000..59135db5bd62a7a4290378a87c952ee742bb8d80
--- /dev/null
+++ b/test/built-ins/Set/prototype/add/will-not-add-duplicate-entry.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.
+/*---
+es6id: 23.2.3.1
+description: >
+    Set.prototype.add ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. 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.
+    6. If value is −0, let value be +0.
+    7. Append value as the last element of entries.
+    ...
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`");
+
+s.add(1);
+s.add(1);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`, after executing `s.add(1); s.add(1);`");
diff --git a/test/built-ins/Set/prototype/clear/clear.js b/test/built-ins/Set/prototype/clear/clear.js
new file mode 100644
index 0000000000000000000000000000000000000000..98a5dfd95294c1bfa88e65ad7b0e7840a058b368
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/clear.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.clear,
+    "function",
+    "`typeof Set.prototype.clear` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "clear");
+verifyWritable(Set.prototype, "clear");
+verifyConfigurable(Set.prototype, "clear");
diff --git a/test/built-ins/Set/prototype/clear/clears-all-contents-from-iterable.js b/test/built-ins/Set/prototype/clear/clears-all-contents-from-iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e9ff286bed0d37dd585b9d161ce04b9fc12f608
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/clears-all-contents-from-iterable.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. Repeat for each e that is an element of entries,
+      a. Replace the element of entries whose value is e with an element whose value is empty.
+    ...
+
+---*/
+
+var s = new Set([1, 2, 3]);
+
+assert.sameValue(s.size, 3, "The value of `s.size` is `3`");
+
+var result = s.clear();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`, after executing `s.clear()`");
+assert.sameValue(s.has(1), false, "`s.has(1)` returns `false`");
+assert.sameValue(s.has(2), false, "`s.has(2)` returns `false`");
+assert.sameValue(s.has(3), false, "`s.has(3)` returns `false`");
+assert.sameValue(result, undefined, "The result of `s.clear()` is `undefined`");
diff --git a/test/built-ins/Set/prototype/clear/clears-all-contents.js b/test/built-ins/Set/prototype/clear/clears-all-contents.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d8b1ce16f711334cf59d8c95f8046414ec6215a
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/clears-all-contents.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. Repeat for each e that is an element of entries,
+      a. Replace the element of entries whose value is e with an element whose value is empty.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(1).add(2).add(3);
+
+assert.sameValue(s.size, 3, "The value of `s.size` is `3`");
+
+var result = s.clear();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`, after executing `s.clear()`");
+assert.sameValue(s.has(1), false, "`s.has(1)` returns `false`");
+assert.sameValue(s.has(2), false, "`s.has(2)` returns `false`");
+assert.sameValue(s.has(3), false, "`s.has(3)` returns `false`");
+assert.sameValue(result, undefined, "The result of `s.clear()` is `undefined`");
diff --git a/test/built-ins/Set/prototype/clear/clears-an-empty-set.js b/test/built-ins/Set/prototype/clear/clears-an-empty-set.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9abaa68734d4c0bf02cd02332d8b3dcd32c7433
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/clears-an-empty-set.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. Repeat for each e that is an element of entries,
+      a. Replace the element of entries whose value is e with an element whose value is empty.
+    ...
+
+---*/
+
+var s = new Set();
+
+var result = s.clear();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`");
+assert.sameValue(result, undefined, "The result of `s.clear()` is `undefined`");
diff --git a/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..db2ff73324ef0ea3150cb7352ceaff89bab6737e
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call([]);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call([]);
+});
diff --git a/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..bae7bcc5e8e7e3d0fc0d16155928d08abd5300a8
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-map.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(new Map());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(new Map());
+});
diff --git a/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..884481e4b468e436409027a2f6bec56206031d57
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-object.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call({});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call({});
+});
diff --git a/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-set.prototype.js b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-set.prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..dbc307405d6c7bd2db15a619d44ab6da95d27e85
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-set.prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(Set.prototype);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(Set.prototype);
+});
diff --git a/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c603efebcedbb132ae57f4102621dc64f7fcece
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-weakset.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(new WeakSet());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(new WeakSet());
+});
diff --git a/test/built-ins/Set/prototype/clear/length.js b/test/built-ins/Set/prototype/clear/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a4758a7f3a2f5d30d66c2b0e44665d9004c56d1
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.clear.length, 0, "The value of `Set.prototype.clear.length` is `0`");
+
+verifyNotEnumerable(Set.prototype.clear, "length");
+verifyNotWritable(Set.prototype.clear, "length");
+verifyConfigurable(Set.prototype.clear, "length");
diff --git a/test/built-ins/Set/prototype/clear/name.js b/test/built-ins/Set/prototype/clear/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..613ce47290fa2c0b126f6cd3457d247b7427f737
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.clear.name, "clear", "The value of `Set.prototype.clear.name` is `'clear'`");
+
+verifyNotEnumerable(Set.prototype.clear, "name");
+verifyNotWritable(Set.prototype.clear, "name");
+verifyConfigurable(Set.prototype.clear, "name");
diff --git a/test/built-ins/Set/prototype/clear/returns-undefined.js b/test/built-ins/Set/prototype/clear/returns-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..1912b2bd604a9a21a70c72f2b5e840af21b34adc
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/returns-undefined.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    ...
+    6. Return undefined.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.clear(), undefined, "`s.clear()` returns `undefined`");
diff --git a/test/built-ins/Set/prototype/clear/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/clear/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..f75865b59bee37c1b8fdc92466e3cd9611e92f82
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(false);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(false);
+});
diff --git a/test/built-ins/Set/prototype/clear/this-not-object-throw-null.js b/test/built-ins/Set/prototype/clear/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5cb65232193cc23c60148cad95fec3890630d57
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(null);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(null);
+});
diff --git a/test/built-ins/Set/prototype/clear/this-not-object-throw-number.js b/test/built-ins/Set/prototype/clear/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..8976ab6596e3382f3637af16da2666233bf43cf3
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(0);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(0);
+});
diff --git a/test/built-ins/Set/prototype/clear/this-not-object-throw-string.js b/test/built-ins/Set/prototype/clear/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..f70502dbeaf72f284a9f75f61ccad5c6aaba52b1
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call("");
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call("");
+});
diff --git a/test/built-ins/Set/prototype/clear/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/clear/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..6730e5be39b53c854813457cb5e906c90abc97ec
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(Symbol());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(Symbol());
+});
diff --git a/test/built-ins/Set/prototype/clear/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/clear/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..b18ad0c4b023e6e2da2cb66f0eaafdfe25900a13
--- /dev/null
+++ b/test/built-ins/Set/prototype/clear/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.2
+description: >
+    Set.prototype.clear ( )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.clear.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.clear.call(undefined);
+});
diff --git a/test/built-ins/Set/prototype/constructor/set-prototype-constructor-intrinsic.js b/test/built-ins/Set/prototype/constructor/set-prototype-constructor-intrinsic.js
new file mode 100644
index 0000000000000000000000000000000000000000..73930249cb9e4e2afcd44c4b115d82f309471f62
--- /dev/null
+++ b/test/built-ins/Set/prototype/constructor/set-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.
+/*---
+es6id: 23.2.3.3
+description: >
+    Set.prototype.constructor
+
+    The initial value of Set.prototype.constructor is the intrinsic object %Set%.
+
+---*/
+
+assert.sameValue(
+    Set.prototype.constructor,
+    Set,
+    "The value of `Set.prototype.constructor` is `Set`"
+);
diff --git a/test/built-ins/Set/prototype/constructor/set-prototype-constructor.js b/test/built-ins/Set/prototype/constructor/set-prototype-constructor.js
new file mode 100644
index 0000000000000000000000000000000000000000..450bcba844514f157d24ebab007969cefe0e9661
--- /dev/null
+++ b/test/built-ins/Set/prototype/constructor/set-prototype-constructor.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(Set.prototype, "constructor");
+verifyWritable(Set.prototype, "constructor");
+verifyConfigurable(Set.prototype, "constructor");
diff --git a/test/built-ins/Set/prototype/delete/delete-entry-initial-iterable.js b/test/built-ins/Set/prototype/delete/delete-entry-initial-iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..6dbdb631ed7e1c0a14e5dbb8889a4f8a827cc7cc
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/delete-entry-initial-iterable.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, then
+      b. Replace the element of entries whose value is e with an element whose value is empty.
+      c. Return true.
+    ...
+
+
+---*/
+
+var s = new Set([ 1 ]);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`");
+
+var result = s.delete(1);
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`, after executing `s.delete(1)`");
+assert.sameValue(result, true, "The result of `s.delete(1)` is `true`");
diff --git a/test/built-ins/Set/prototype/delete/delete-entry-normalizes-zero.js b/test/built-ins/Set/prototype/delete/delete-entry-normalizes-zero.js
new file mode 100644
index 0000000000000000000000000000000000000000..15ed3a2e1ea8ef07b22ee31ead931cf4bce77b13
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/delete-entry-normalizes-zero.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, then
+      b. Replace the element of entries whose value is e with an element whose value is empty.
+      c. Return true.
+    ...
+
+---*/
+
+var s = new Set([ -0 ]);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`");
+
+var result = s.delete(+0);
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`, after executing `s.delete(-0)`");
+assert.sameValue(result, true, "The result of `s.delete(+0)` is `true`");
diff --git a/test/built-ins/Set/prototype/delete/delete-entry.js b/test/built-ins/Set/prototype/delete/delete-entry.js
new file mode 100644
index 0000000000000000000000000000000000000000..18ae2013f84b93d12eca18bc7fe587ba9011471e
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/delete-entry.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. 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.
+    6. If value is −0, let value be +0.
+    7. Append value as the last element of entries.
+    ...
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`");
+
+s.add(1);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`, after executing `s.add(1)`");
+
+var result = s.delete(1);
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`, after executing `s.delete(1)`");
+assert.sameValue(result, true, "The result of `s.delete(1)` is `true`");
diff --git a/test/built-ins/Set/prototype/delete/delete.js b/test/built-ins/Set/prototype/delete/delete.js
new file mode 100644
index 0000000000000000000000000000000000000000..f654ca200e72f37c2cb89a69952f559739916299
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/delete.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.delete,
+    "function",
+    "`typeof Set.prototype.delete` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "delete");
+verifyWritable(Set.prototype, "delete");
+verifyConfigurable(Set.prototype, "delete");
diff --git a/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..efeefeea96107f0b4758d38d60850e78e70be1ee
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.delete.call([], 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call([], 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5e4f3c7fec60454603758b5079048aeedc3d482
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-map.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.delete.call(new Map(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(new Map(), 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..d155f8fd3437ae0bdda788c0241fcb1f2b71d3fe
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-object.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.delete.call({}, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call({}, 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-set-prototype.js b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..dde388fe0b8a7edf571f98f17d6ee839004b871c
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-set-prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.delete.call(Set.prototype, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(Set.prototype, 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a644eb3eec4320d6d9ec2a1c58a0ee104dbf053
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-weakset.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.delete.call(new WeakSet(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(new WeakSet(), 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/length.js b/test/built-ins/Set/prototype/delete/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac4b5be75d8da2238184fe34474b3aeae04b0e5c
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.delete.length, 1, "The value of `Set.prototype.delete.length` is `1`");
+
+verifyNotEnumerable(Set.prototype.delete, "length");
+verifyNotWritable(Set.prototype.delete, "length");
+verifyConfigurable(Set.prototype.delete, "length");
diff --git a/test/built-ins/Set/prototype/delete/name.js b/test/built-ins/Set/prototype/delete/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd21d59b243e2945c6e6e607499e45345c7da9ac
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.delete.name, "delete", "The value of `Set.prototype.delete.name` is `'delete'`");
+
+verifyNotEnumerable(Set.prototype.delete, "name");
+verifyNotWritable(Set.prototype.delete, "name");
+verifyConfigurable(Set.prototype.delete, "name");
diff --git a/test/built-ins/Set/prototype/delete/returns-false-when-delete-is-noop.js b/test/built-ins/Set/prototype/delete/returns-false-when-delete-is-noop.js
new file mode 100644
index 0000000000000000000000000000000000000000..cce4026c3f1ad6b656858396abd5e24b2f46afd8
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/returns-false-when-delete-is-noop.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.delete(1), false, "`s.delete(1)` returns `false`");
diff --git a/test/built-ins/Set/prototype/delete/returns-true-when-delete-operation-occurs.js b/test/built-ins/Set/prototype/delete/returns-true-when-delete-operation-occurs.js
new file mode 100644
index 0000000000000000000000000000000000000000..9eaaa9cf33f4a9c28158342b6497c7bc243bcf9c
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/returns-true-when-delete-operation-occurs.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.prototype.delete ( value )
+
+    ...
+    4. Let entries be the List that is the value of S’s [[SetData]] internal slot.
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, then
+      b. Replace the element of entries whose value is e with an element whose value is empty.
+      c. Return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(1);
+
+assert.sameValue(s.delete(1), true, "`s.delete(1)` returns `true`");
diff --git a/test/built-ins/Set/prototype/delete/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/delete/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..990c786151a60498371d1972052e3c7e3a2211ab
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.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() {
+  Set.prototype.delete.call(false, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(false, 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/this-not-object-throw-null.js b/test/built-ins/Set/prototype/delete/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..26c31d75297311a4fcd3b0677e08fe536b9b8076
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.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() {
+  Set.prototype.delete.call(null, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(null, 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/this-not-object-throw-number.js b/test/built-ins/Set/prototype/delete/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..c949089d7b3ad303be042b0b9cfde1e74b756bbf
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.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() {
+  Set.prototype.delete.call(0, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(0, 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/this-not-object-throw-string.js b/test/built-ins/Set/prototype/delete/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..2561043176de0e365e07cedaba2205923eee4b9f
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.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() {
+  Set.prototype.delete.call("", 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call("", 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/delete/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..de3f319c058beb3ec3acaa3c4d76fb45ed497213
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.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() {
+  Set.prototype.delete.call(Symbol(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(Symbol(), 1);
+});
diff --git a/test/built-ins/Set/prototype/delete/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/delete/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..3866fbc751d7b96f09fca8dcf0245b28f8ede1fd
--- /dev/null
+++ b/test/built-ins/Set/prototype/delete/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.4
+description: >
+    Set.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() {
+  Set.prototype.delete.call(undefined, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.delete.call(undefined, 1);
+});
diff --git a/test/built-ins/Set/prototype/entries-no-set-data.js b/test/built-ins/Set/prototype/entries-no-set-data.js
deleted file mode 100644
index 744c3d6952c255a3f2d6652733f6f7b654498939..0000000000000000000000000000000000000000
--- a/test/built-ins/Set/prototype/entries-no-set-data.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (C) 2014 the V8 project authors. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-  description: >
-      If the context does not have a [[SetData]] internal slot, throw a
-      TypeError exception as per 23.2.5.1.
-  es6id: 23.2.3.5
- ---*/
-
-assert.throws(TypeError, function() {
-  Set.prototype.entries.call({});
-});
diff --git a/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f365538830ff4187fa78695f9b85219f55022e1
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call([]);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call([]);
+});
diff --git a/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..00e785325cc70dd2384645ae4201c200f55f0053
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/does-not-have-setdata-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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(new Map());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(new Map());
+});
diff --git a/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff21df1c7ed27e9ee340a6f1883684fd4e6dc824
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/does-not-have-setdata-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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call({});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call({});
+});
diff --git a/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-set-prototype.js b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..28a48a9791d0a3c706885096ab0963e2d28f817b
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-set-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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(Set.prototype);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(Set.prototype);
+});
diff --git a/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2dfc406a6a8f5bdc4f1d6fd2010ce198413f22e
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-weakset.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(new WeakSet());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(new WeakSet());
+});
diff --git a/test/built-ins/Set/prototype/entries/entries.js b/test/built-ins/Set/prototype/entries/entries.js
new file mode 100644
index 0000000000000000000000000000000000000000..05bd329341b501b9fdd47cf26f75be837d53ca80
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/entries.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.entries,
+    "function",
+    "`typeof Set.prototype.entries` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "entries");
+verifyWritable(Set.prototype, "entries");
+verifyConfigurable(Set.prototype, "entries");
diff --git a/test/built-ins/Set/prototype/entries/length.js b/test/built-ins/Set/prototype/entries/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c7101323cfaa8e5aced80705a53ad130da18ca8
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.entries.length, 0, "The value of `Set.prototype.entries.length` is `0`");
+
+verifyNotEnumerable(Set.prototype.entries, "length");
+verifyNotWritable(Set.prototype.entries, "length");
+verifyConfigurable(Set.prototype.entries, "length");
diff --git a/test/built-ins/Set/prototype/entries/name.js b/test/built-ins/Set/prototype/entries/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..afc2dcfbadcf005c63cf6a4088f6541c6a673b66
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.entries.name, "entries", "The value of `Set.prototype.entries.name` is `'entries'`");
+
+verifyNotEnumerable(Set.prototype.entries, "name");
+verifyNotWritable(Set.prototype.entries, "name");
+verifyConfigurable(Set.prototype.entries, "name");
diff --git a/test/built-ins/Set/prototype/entries/returns-iterator-empty.js b/test/built-ins/Set/prototype/entries/returns-iterator-empty.js
new file mode 100644
index 0000000000000000000000000000000000000000..1cc49e645cf113b4e8f6955efd53eb39c2686fad
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/returns-iterator-empty.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    7. Return iterator.
+
+
+---*/
+
+var set = new Set();
+var iterator = set.entries();
+var result = iterator.next();
+
+assert.sameValue(result.value, undefined, "The value of `result.value` is `undefined`");
+assert.sameValue(result.done, true, "The value of `result.done` is `true`");
diff --git a/test/built-ins/Set/prototype/entries-iteration.js b/test/built-ins/Set/prototype/entries/returns-iterator.js
similarity index 88%
rename from test/built-ins/Set/prototype/entries-iteration.js
rename to test/built-ins/Set/prototype/entries/returns-iterator.js
index a28831512837093bb7b6f26ed07b6cdcc1bb3896..df31df7b8df085f876c250afc2cafa635951a573 100644
--- a/test/built-ins/Set/prototype/entries-iteration.js
+++ b/test/built-ins/Set/prototype/entries/returns-iterator.js
@@ -1,12 +1,21 @@
 // Copyright (C) 2014 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
-  description: >
-      The method should return a valid iterator with the context as the
-      IteratedObject.
-  es6id: 23.2.3.5
- ---*/
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    7. Return iterator.
+
+
+---*/
 
 var set = new Set();
 set.add(1);
diff --git a/test/built-ins/Set/prototype/entries/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/entries/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..f413c7d3132de1f15205b828d03062bdb73b5b69
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(false);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(false);
+});
diff --git a/test/built-ins/Set/prototype/entries/this-not-object-throw-null.js b/test/built-ins/Set/prototype/entries/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..40d1c87be1c863186f7bf7aa81fd6f8fa1f8f8a9
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(null);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(null);
+});
diff --git a/test/built-ins/Set/prototype/entries/this-not-object-throw-number.js b/test/built-ins/Set/prototype/entries/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..edc1ad19fcae3177e2d8dbacf50e6dd43e281ead
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(0);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(0);
+});
diff --git a/test/built-ins/Set/prototype/entries/this-not-object-throw-string.js b/test/built-ins/Set/prototype/entries/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..71187dd7606ae526454df748d9e0fba9c2d3242e
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call("");
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call("");
+});
diff --git a/test/built-ins/Set/prototype/entries/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/entries/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..f727279c4696ef6f767b9553848c5fbc96791703
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(Symbol());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(Symbol());
+});
diff --git a/test/built-ins/Set/prototype/entries/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/entries/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..987fb7f8eb6d354f43a0edd6e19a656c57d5f0f5
--- /dev/null
+++ b/test/built-ins/Set/prototype/entries/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.5
+description: >
+    Set.prototype.entries ( )
+
+    ...
+    2. Return CreateSetIterator(S, "key+value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.entries.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.entries.call(undefined);
+});
diff --git a/test/built-ins/Set/prototype/forEach/callback-not-callable-boolean.js b/test/built-ins/Set/prototype/forEach/callback-not-callable-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..6515e768619f1fd966aafdf56785bbe04fb03916
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/callback-not-callable-boolean.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    ...
+
+    Passing `false` as callback
+
+---*/
+
+var s = new Set([1]);
+
+assert.throws(TypeError, function() {
+  s.forEach(false);
+});
diff --git a/test/built-ins/Set/prototype/forEach/callback-not-callable-null.js b/test/built-ins/Set/prototype/forEach/callback-not-callable-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d91ebe716e66822decafd5a7ce66303ef3b8361
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/callback-not-callable-null.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    ...
+
+    Passing `null` as callback
+
+---*/
+
+var s = new Set([1]);
+
+assert.throws(TypeError, function() {
+  s.forEach(null);
+});
diff --git a/test/built-ins/Set/prototype/forEach/callback-not-callable-number.js b/test/built-ins/Set/prototype/forEach/callback-not-callable-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..3062834d83d599cf966d8fed4056e1fe379bf3fc
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/callback-not-callable-number.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    ...
+
+    Passing `number` as callback
+
+---*/
+
+var s = new Set([1]);
+
+assert.throws(TypeError, function() {
+  s.forEach(0);
+});
diff --git a/test/built-ins/Set/prototype/forEach/callback-not-callable-string.js b/test/built-ins/Set/prototype/forEach/callback-not-callable-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f9bd6b90555698d83841651caca4b25bb8fbc29
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/callback-not-callable-string.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    ...
+
+    Passing `string` as callback
+
+---*/
+
+var s = new Set([1]);
+
+assert.throws(TypeError, function() {
+  s.forEach("");
+});
diff --git a/test/built-ins/Set/prototype/forEach/callback-not-callable-symbol.js b/test/built-ins/Set/prototype/forEach/callback-not-callable-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..789b3e067ef3b14021a584ace00daf05894fa0f1
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/callback-not-callable-symbol.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    ...
+
+    Passing `symbol` as callback
+
+---*/
+
+var s = new Set([1]);
+
+assert.throws(TypeError, function() {
+  s.forEach(Symbol());
+});
diff --git a/test/built-ins/Set/prototype/forEach/callback-not-callable-undefined.js b/test/built-ins/Set/prototype/forEach/callback-not-callable-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..695f05fc7d83967fe08057f7bb6897134e7e9021
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/callback-not-callable-undefined.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    4. If IsCallable(callbackfn) is false, throw a TypeError exception.
+    ...
+
+    Passing `undefined` as callback
+
+---*/
+
+var s = new Set([1]);
+
+assert.throws(TypeError, function() {
+  s.forEach(undefined);
+});
diff --git a/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc5c8e85b259c5defce59e099e37601977a76b9f
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call([], function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call([], function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..50f77f9eace693fcd1765288584b580ac986622e
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-map.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(new Map(), function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(new Map(), function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f75161ba33073c0d41b9e5989956e2ad3444351
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-object.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call({}, function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call({}, function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-set-prototype.js b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..72f6fe59ad7c72d9b785899ec47e15ca4e55352c
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-set-prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(Set.prototype, function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(Set.prototype, function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e19cd2638d981b97fc5daeae8090d7a04e65030
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-weakset.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(new WeakSet(), function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(new WeakSet(), function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/forEach.js b/test/built-ins/Set/prototype/forEach/forEach.js
new file mode 100644
index 0000000000000000000000000000000000000000..92d63cfd396bccdd72fec8013f9376c346fb026b
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/forEach.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.forEach,
+    "function",
+    "`typeof Set.prototype.forEach` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "forEach");
+verifyWritable(Set.prototype, "forEach");
+verifyConfigurable(Set.prototype, "forEach");
diff --git a/test/built-ins/Set/prototype/forEach/iterates-in-insertion-order.js b/test/built-ins/Set/prototype/forEach/iterates-in-insertion-order.js
new file mode 100644
index 0000000000000000000000000000000000000000..1912878e88bcb0794f558fe309d3a2ab2df739ae
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/iterates-in-insertion-order.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+---*/
+
+var s = new Set();
+var expects = [1, 2, 3];
+
+s.add(1).add(2).add(3);
+
+s.forEach(function(value, entry, set) {
+  var expect = expects.shift();
+
+  assert.sameValue(value, expect);
+  assert.sameValue(entry, expect);
+  assert.sameValue(set, s);
+});
+
+assert.sameValue(expects.length, 0, "The value of `expects.length` is `0`");
diff --git a/test/built-ins/Set/prototype/forEach/iterates-in-iterable-entry-order.js b/test/built-ins/Set/prototype/forEach/iterates-in-iterable-entry-order.js
new file mode 100644
index 0000000000000000000000000000000000000000..d550e49c4c395ad39f69444cb9ac47baf2c74aea
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/iterates-in-iterable-entry-order.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+---*/
+
+var expects = [1, 2, 3];
+var s = new Set(expects);
+
+s.forEach(function(value, entry, set) {
+  var expect = expects.shift();
+
+  assert.sameValue(value, expect);
+  assert.sameValue(entry, expect);
+  assert.sameValue(set, s);
+});
+
+assert.sameValue(expects.length, 0, "The value of `expects.length` is `0`");
diff --git a/test/built-ins/Set/prototype/forEach/iterates-values-added-after-foreach-begins.js b/test/built-ins/Set/prototype/forEach/iterates-values-added-after-foreach-begins.js
new file mode 100644
index 0000000000000000000000000000000000000000..4aa6c032c04fa2de7f4aca044ab140eca2597142
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/iterates-values-added-after-foreach-begins.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+
+    NOTE:
+
+    ...
+    New values added after the call to forEach begins are visited.
+
+---*/
+
+
+var s = new Set([1]);
+var expects = [1, 2, 3];
+
+s.forEach(function(value, entry, set) {
+  var expect = expects.shift();
+
+  if (value === 1) {
+    set.add(2);
+  }
+
+  if (value === 2) {
+    set.add(3);
+  }
+
+  assert.sameValue(value, expect);
+  assert.sameValue(entry, expect);
+  assert.sameValue(set, s);
+});
+
+assert.sameValue(expects.length, 0, "The value of `expects.length` is `0`");
diff --git a/test/built-ins/Set/prototype/forEach/iterates-values-deleted-then-readded.js b/test/built-ins/Set/prototype/forEach/iterates-values-deleted-then-readded.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4fa59ae13234312d362ffc223c9923f34bd6e39
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/iterates-values-deleted-then-readded.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+
+    NOTE:
+
+    ...
+    Values that are deleted after the call to forEach begins and before being visited are not visited unless the value is added again before the forEach call completes.
+    ...
+
+---*/
+
+
+var s = new Set([1, 2, 3]);
+var expects = [1, 3, 2];
+
+s.forEach(function(value, entry, set) {
+  var expect = expects.shift();
+
+  // Delete `2` before being visited
+  if (value === 1) {
+    set.delete(2);
+  }
+
+  // Re-add `2` before forEach call completes
+  if (value === 3) {
+    set.add(2);
+  }
+
+  assert.sameValue(value, expect);
+  assert.sameValue(entry, expect);
+  assert.sameValue(set, s);
+});
+
+assert.sameValue(expects.length, 0, "The value of `expects.length` is `0`");
diff --git a/test/built-ins/Set/prototype/forEach/iterates-values-not-deleted.js b/test/built-ins/Set/prototype/forEach/iterates-values-not-deleted.js
new file mode 100644
index 0000000000000000000000000000000000000000..da64765dfc5aff2df52d0f47579cb376799460e2
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/iterates-values-not-deleted.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+
+    NOTE:
+
+    callbackfn should be a function that accepts three arguments. forEach calls callbackfn once for each value present in the set object, in value insertion order. callbackfn is called only for values of the Set which actually exist; it is not called for keys that have been deleted from the set.
+
+---*/
+
+var expects = [1, 3];
+var s = new Set([1, 2, 3]);
+
+s.delete(2);
+
+s.forEach(function(value, entry, set) {
+  var expect = expects.shift();
+
+  assert.sameValue(value, expect);
+  assert.sameValue(entry, expect);
+  assert.sameValue(set, s);
+});
+
+assert.sameValue(expects.length, 0, "`forEach` is not a no-op");
diff --git a/test/built-ins/Set/prototype/forEach/iterates-values-revisits-after-delete-re-add.js b/test/built-ins/Set/prototype/forEach/iterates-values-revisits-after-delete-re-add.js
new file mode 100644
index 0000000000000000000000000000000000000000..8657ea2d8e03611341ad2fa9591e6911776e93b5
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/iterates-values-revisits-after-delete-re-add.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+
+    NOTE:
+
+    ...
+    a value will be revisited if it is deleted after it has been visited and then re-added before the forEach call completes.
+    ...
+
+---*/
+
+
+var s = new Set([1, 2, 3]);
+var expects = [1, 2, 3, 1];
+
+s.forEach(function(value, entry, set) {
+  var expect = expects.shift();
+
+  // Delete `1` after visit
+  if (value === 2) {
+    set.delete(1);
+  }
+
+  // Re-add `1`
+  if (value === 3) {
+    set.add(1);
+  }
+
+  assert.sameValue(value, expect);
+  assert.sameValue(entry, expect);
+  assert.sameValue(set, s);
+});
+
+assert.sameValue(expects.length, 0, "The value of `expects.length` is `0`");
diff --git a/test/built-ins/Set/prototype/forEach/length.js b/test/built-ins/Set/prototype/forEach/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..84732ebce7fc4743ddb4c988c9f59748d3177d3f
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    The length property of the forEach method is 1.
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.forEach.length, 1, "The value of `Set.prototype.forEach.length` is `1`");
+
+verifyNotEnumerable(Set.prototype.forEach, "length");
+verifyNotWritable(Set.prototype.forEach, "length");
+verifyConfigurable(Set.prototype.forEach, "length");
diff --git a/test/built-ins/Set/prototype/forEach/name.js b/test/built-ins/Set/prototype/forEach/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..9577b21899020da35de93a5c537a10c97a63b216
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.forEach.name, "forEach", "The value of `Set.prototype.forEach.name` is `'forEach'`");
+
+verifyNotEnumerable(Set.prototype.forEach, "name");
+verifyNotWritable(Set.prototype.forEach, "name");
+verifyConfigurable(Set.prototype.forEach, "name");
diff --git a/test/built-ins/Set/prototype/forEach/returns-undefined.js b/test/built-ins/Set/prototype/forEach/returns-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3e1b02c3998dd2aadec0ec3d4bd9c40fdc97d50
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/returns-undefined.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    8. Return undefined.
+
+---*/
+
+var s = new Set([1]);
+
+assert.sameValue(
+    s.forEach(function() {}),
+    undefined,
+    "`s.forEach(function() {})` returns `undefined`"
+);
diff --git a/test/built-ins/Set/prototype/forEach/this-arg-explicit-cannot-override-lexical-this-arrow.js b/test/built-ins/Set/prototype/forEach/this-arg-explicit-cannot-override-lexical-this-arrow.js
new file mode 100644
index 0000000000000000000000000000000000000000..80d8c7c4472ed50327332a1ceac263069a04d410
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-arg-explicit-cannot-override-lexical-this-arrow.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    ...
+
+    An arrow function will ignore an explicit thisArg
+
+features: [arrow-function]
+---*/
+
+var s = new Set([1]);
+var usurper = {};
+var counter = 0;
+
+s.forEach(_ => {
+  assert.notSameValue(this, usurper, "`this` is not `usurper`");
+  counter++;
+}, usurper);
+
+assert.sameValue(counter, 1, "`forEach` is not a no-op");
diff --git a/test/built-ins/Set/prototype/forEach/this-arg-explicit.js b/test/built-ins/Set/prototype/forEach/this-arg-explicit.js
new file mode 100644
index 0000000000000000000000000000000000000000..c525ce588332aad86659dcd24cdcd369a29d4c4c
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-arg-explicit.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    ...
+---*/
+
+var s = new Set([1]);
+var thisArg = {};
+var counter = 0;
+
+s.forEach(function() {
+  assert.sameValue(this, thisArg, "`this` is `thisArg`");
+  counter++;
+}, thisArg);
+
+assert.sameValue(counter, 1, "`forEach` is not a no-op");
diff --git a/test/built-ins/Set/prototype/forEach/this-non-strict.js b/test/built-ins/Set/prototype/forEach/this-non-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c21659e1bde5e01b92e2bb242db5f84bd6c438f
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-non-strict.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    ...
+
+flags: [noStrict]
+---*/
+
+var s = new Set([1]);
+var counter = 0;
+var globalObject = this;
+
+s.forEach(function() {
+  assert.sameValue(this, globalObject, "`this` is the global object in non-strict mode code");
+  counter++;
+});
+
+assert.sameValue(counter, 1, "`forEach` is not a no-op");
diff --git a/test/built-ins/Set/prototype/forEach/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/forEach/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c411a7a4aa6cfee7067270b01b6618727063fda
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(false, function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(false, function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/this-not-object-throw-null.js b/test/built-ins/Set/prototype/forEach/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..e31175ef27e69bccf671260993b2761329df3076
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(null, function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(null, function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/this-not-object-throw-number.js b/test/built-ins/Set/prototype/forEach/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..095daeb59503b9fb0f0bb5aff03517e0a324d8c0
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(0, function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(0, function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/this-not-object-throw-string.js b/test/built-ins/Set/prototype/forEach/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..483e6e03c94ccfc55ff7d0c8092ec71d4013c2f6
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call("", function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call("", function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/forEach/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2e0b8645d994d5d8c39b193c8174e577ab183c5
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(Symbol(), function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(Symbol(), function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/forEach/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..9348b59cf9a1385607bf918713a97d5b353aa047
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    1. Let S be the this value.
+    2. If Type(S) is not Object, throw a TypeError exception.
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.forEach.call(undefined, function() {});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.forEach.call(undefined, function() {});
+});
diff --git a/test/built-ins/Set/prototype/forEach/this-strict.js b/test/built-ins/Set/prototype/forEach/this-strict.js
new file mode 100644
index 0000000000000000000000000000000000000000..652b9b824a78eefff4bfceb6cee8663b172a75d1
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/this-strict.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    ...
+
+flags: [onlyStrict]
+---*/
+
+var s = new Set([1]);
+var counter = 0;
+
+s.forEach(function() {
+  assert.sameValue(this, undefined, "`this` is `undefined` in strict mode code");
+  counter++;
+});
+
+assert.sameValue(counter, 1, "`forEach` is not a no-op");
diff --git a/test/built-ins/Set/prototype/forEach/throws-when-callback-throws.js b/test/built-ins/Set/prototype/forEach/throws-when-callback-throws.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0fa686ad582b7818a0690b3e3473773aa5bab95
--- /dev/null
+++ b/test/built-ins/Set/prototype/forEach/throws-when-callback-throws.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.
+/*---
+es6id: 23.2.3.6
+description: >
+    Set.prototype.forEach ( callbackfn [ , thisArg ] )
+
+    ...
+    7. Repeat for each e that is an element of entries, in original insertion order
+      a. If e is not empty, then
+        i. Let funcResult be Call(callbackfn, T, «e, e, S»).
+        ii. ReturnIfAbrupt(funcResult).
+    ...
+---*/
+
+var s = new Set([1]);
+var counter = 0;
+
+assert.throws(Error, function() {
+  s.forEach(function() {
+    counter++;
+    throw new Error();
+  });
+});
+
+assert.sameValue(counter, 1, "`forEach` is not a no-op");
diff --git a/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..61dec187a1902efe9f71e5a224872b181e402315
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.has.call([], 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call([], 1);
+});
diff --git a/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..db7fb92270b264c484f3c8aff9c4fa557490aa87
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-map.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.has.call(new Map(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(new Map(), 1);
+});
diff --git a/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..9901a0776185d2c40b8f41c83b25f8d71032cc32
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-object.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.has.call({}, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call({}, 1);
+});
diff --git a/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-set-prototype.js b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..f8a18b9d80904b45c4ea22a5a1f4f8a9473a83eb
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-set-prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.has.call(Set.prototype, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(Set.prototype, 1);
+});
diff --git a/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc467f112cf1b9b565aa35ab91f70b765085c1ec
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-weakset.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    3. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.has.call(new WeakSet(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(new WeakSet(), 1);
+});
diff --git a/test/built-ins/Set/prototype/has/has.js b/test/built-ins/Set/prototype/has/has.js
new file mode 100644
index 0000000000000000000000000000000000000000..dae711e14b5241eea0b12bfa82ed1405da438900
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/has.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.has,
+    "function",
+    "`typeof Set.prototype.has` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "has");
+verifyWritable(Set.prototype, "has");
+verifyConfigurable(Set.prototype, "has");
diff --git a/test/built-ins/Set/prototype/has/length.js b/test/built-ins/Set/prototype/has/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffd887c2c363f4817f08a9433f2aec09e14aa948
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.has.length, 1, "The value of `Set.prototype.has.length` is `1`");
+
+verifyNotEnumerable(Set.prototype.has, "length");
+verifyNotWritable(Set.prototype.has, "length");
+verifyConfigurable(Set.prototype.has, "length");
diff --git a/test/built-ins/Set/prototype/has/name.js b/test/built-ins/Set/prototype/has/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..a243d6ea00eaacf652a90b02b19bc92602476183
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.has.name, "has", "The value of `Set.prototype.has.name` is `'has'`");
+
+verifyNotEnumerable(Set.prototype.has, "name");
+verifyNotWritable(Set.prototype.has, "name");
+verifyConfigurable(Set.prototype.has, "name");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-undefined-added-deleted-not-present-undefined.js b/test/built-ins/Set/prototype/has/returns-false-when-undefined-added-deleted-not-present-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..78e71e49940880ff3cfefe9508dd3e489b77ad25
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-undefined-added-deleted-not-present-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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+s.add(undefined);
+assert.sameValue(s.has(undefined), true, "`s.has(undefined)` returns `true`");
+
+var result = s.delete(undefined);
+
+assert.sameValue(s.has(undefined), false, "`s.has(undefined)` returns `false`");
+assert.sameValue(result, true, "The result of `s.delete(undefined)` is `true`");
+
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-boolean.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..1cb7f85c6770f69286e5db4b49de5293a17197a7
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-boolean.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(false), false, "`s.has(false)` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-nan.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-nan.js
new file mode 100644
index 0000000000000000000000000000000000000000..bcf66fe799f5816c61c98e2cd674f807e4558d8c
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-nan.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(NaN), false, "`s.has(NaN)` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-null.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f901dedc86b79ecd7f8c835c942e81819845a31
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-null.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(null), false, "`s.has(null)` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-number.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..45754161dc0d8f96090f19fed7eb6fba8b1246a4
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-number.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(0), false, "`s.has(0)` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-string.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..32f565adab6bfa037408f658b836d54255a9beb5
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-string.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(""), false, "`s.has('')` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-symbol.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..64ae5c7d965e8986d31413f63260d69ba75721d7
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-symbol.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(Symbol()), false, "`s.has(Symbol())` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-undefined.js b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..34746585901a5e48bbe70060be50ad539bc1817c
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-false-when-value-not-present-undefined.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    6. Return false.
+
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.has(undefined), false, "`s.has(undefined)` returns `false`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-boolean.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..a8e4be298b631622cd6458e9964ef36058cac8c7
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-boolean.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(false)
+
+assert.sameValue(s.has(false), true, "`s.has(false)` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-nan.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-nan.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d01e23595a1375bff92396be003e8c91f0a25ed
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-nan.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(NaN)
+
+assert.sameValue(s.has(NaN), true, "`s.has(NaN)` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-null.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..e71814e245045a5d9d06829ae39e91f1bee160e4
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-null.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(null)
+
+assert.sameValue(s.has(null), true, "`s.has(null)` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-number.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..41e772ecd9c204ee01765c49cb565b5adee92891
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-number.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(0)
+
+assert.sameValue(s.has(0), true, "`s.has(0)` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-string.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa219d4ea88183c154d20c57771aedf739db49e9
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-string.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add("")
+
+assert.sameValue(s.has(""), true, "`s.has('')` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-symbol.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..7620fec78e01fe4f2e6ba8dc6b1fff33df284651
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-symbol.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+var a = Symbol();
+
+s.add(a)
+
+assert.sameValue(s.has(a), true, "`s.has(a)` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/returns-true-when-value-present-undefined.js b/test/built-ins/Set/prototype/has/returns-true-when-value-present-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..e317a2c9ceca1d9f6980d8f1f8846550f6b79225
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/returns-true-when-value-present-undefined.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.prototype.has ( value )
+
+    ...
+    5. Repeat for each e that is an element of entries,
+      a. If e is not empty and SameValueZero(e, value) is true, return true.
+    ...
+
+---*/
+
+var s = new Set();
+
+s.add(undefined)
+
+assert.sameValue(s.has(undefined), true, "`s.has(undefined)` returns `true`");
diff --git a/test/built-ins/Set/prototype/has/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/has/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..75daf9474ada3e845caa00ff9cf2a41318ce5b3f
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.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() {
+  Set.prototype.has.call(false, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(false, 1);
+});
diff --git a/test/built-ins/Set/prototype/has/this-not-object-throw-null.js b/test/built-ins/Set/prototype/has/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef3029a30c183838dcf8aa6f6f9054d8282758af
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.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() {
+  Set.prototype.has.call(null, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(null, 1);
+});
diff --git a/test/built-ins/Set/prototype/has/this-not-object-throw-number.js b/test/built-ins/Set/prototype/has/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..b66afdfc512bf6bd5e8f7dd355a9201e476c8183
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.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() {
+  Set.prototype.has.call(0, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(0, 1);
+});
diff --git a/test/built-ins/Set/prototype/has/this-not-object-throw-string.js b/test/built-ins/Set/prototype/has/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce24413e8f5ecf6f84017318cf215ceb27ed164b
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.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() {
+  Set.prototype.has.call("", 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call("", 1);
+});
diff --git a/test/built-ins/Set/prototype/has/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/has/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..c64343df83c132f66c100eff602d667ccadcd612
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.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() {
+  Set.prototype.has.call(Symbol(), 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(Symbol(), 1);
+});
diff --git a/test/built-ins/Set/prototype/has/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/has/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f6773176c17522f3c087adcbcb6088557e15013
--- /dev/null
+++ b/test/built-ins/Set/prototype/has/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.7
+description: >
+    Set.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() {
+  Set.prototype.has.call(undefined, 1);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.has.call(undefined, 1);
+});
diff --git a/test/built-ins/Set/prototype/keys.js b/test/built-ins/Set/prototype/keys/keys.js
similarity index 70%
rename from test/built-ins/Set/prototype/keys.js
rename to test/built-ins/Set/prototype/keys/keys.js
index e3203dc1b2c551e343ad5c5f51570200b1bb9d6a..7b3f8a0b8bbb07c8300f51e5933d08b2b60a77f9 100644
--- a/test/built-ins/Set/prototype/keys.js
+++ b/test/built-ins/Set/prototype/keys/keys.js
@@ -8,4 +8,8 @@
   es6id: 23.2.3.8
  ---*/
 
-assert.sameValue(Set.prototype.keys, Set.prototype.values);
+assert.sameValue(
+ Set.prototype.keys,
+ Set.prototype.values,
+ "The value of `Set.prototype.keys` is `Set.prototype.values`"
+);
diff --git a/test/built-ins/Set/prototype/set-prototype.js b/test/built-ins/Set/prototype/set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..104d859cd47f7bfe3ef100001867b1b052834537
--- /dev/null
+++ b/test/built-ins/Set/prototype/set-prototype.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(this, "Set");
+verifyWritable(this, "Set");
+verifyConfigurable(this, "Set");
diff --git a/test/built-ins/Set/prototype/size/length.js b/test/built-ins/Set/prototype/size/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..f479a991eec96f857d449f924f31dcd64e8c80ed
--- /dev/null
+++ b/test/built-ins/Set/prototype/size/length.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.
+/*---
+es6id: 23.2.3.9
+description: >
+    get Set.prototype.size
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(Set.prototype, "size");
+
+
+assert.sameValue(descriptor.get.length, 0, "The value of `Set.prototype.size.length` is `0`");
+
+verifyNotEnumerable(descriptor.get, "length");
+verifyNotWritable(descriptor.get, "length");
+verifyConfigurable(descriptor.get, "length");
diff --git a/test/built-ins/Set/prototype/size/name.js b/test/built-ins/Set/prototype/size/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..9fe21baa08e0e5bbd7577abf067707707bbfa26c
--- /dev/null
+++ b/test/built-ins/Set/prototype/size/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.
+/*---
+es6id: 23.2.3.9
+description: >
+    get Set.prototype.size
+
+    17 ECMAScript Standard Built-in Objects
+
+    Functions that are specified as get or set accessor functions of built-in
+    properties have "get " or "set " prepended to the property name string.
+
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(Set.prototype, "size");
+
+
+assert.sameValue(descriptor.get.name, "get size", "The value of `descriptor.get.name` is `'get size'`");
+
+verifyNotEnumerable(descriptor.get, "name");
+verifyNotWritable(descriptor.get, "name");
+verifyConfigurable(descriptor.get, "name");
diff --git a/test/built-ins/Set/prototype/size/returns-count-of-present-values-before-after-add-delete.js b/test/built-ins/Set/prototype/size/returns-count-of-present-values-before-after-add-delete.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c96222a0d9bc3c1da3384401a1b0c89951ba587
--- /dev/null
+++ b/test/built-ins/Set/prototype/size/returns-count-of-present-values-before-after-add-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.
+/*---
+es6id: 23.2.3.9
+description: >
+    get Set.prototype.size
+
+    5. Let count be 0.
+    6. For each e that is an element of entries
+      a. If e is not empty, set count to count+1.
+
+    Before and after add(), delete()
+---*/
+
+var s = new Set();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`");
+
+s.add(0);
+
+assert.sameValue(s.size, 1, "The value of `s.size` is `1`, after executing `s.add(0)`");
+
+s.delete(0);
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`, after executing `s.delete(0)`");
diff --git a/test/built-ins/Set/prototype/size/returns-count-of-present-values-by-insertion.js b/test/built-ins/Set/prototype/size/returns-count-of-present-values-by-insertion.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ab0554651149c1258774b0e1a3039d65f168b8f
--- /dev/null
+++ b/test/built-ins/Set/prototype/size/returns-count-of-present-values-by-insertion.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.
+/*---
+es6id: 23.2.3.9
+description: >
+    get Set.prototype.size
+
+    5. Let count be 0.
+    6. For each e that is an element of entries
+      a. If e is not empty, set count to count+1.
+
+---*/
+
+var s = new Set();
+
+s.add(0);
+s.add(undefined);
+s.add(false);
+s.add(NaN);
+s.add(null);
+s.add("");
+s.add(Symbol());
+
+assert.sameValue(s.size, 7, "The value of `s.size` is `7`");
diff --git a/test/built-ins/Set/prototype/size/returns-count-of-present-values-by-iterable.js b/test/built-ins/Set/prototype/size/returns-count-of-present-values-by-iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..7243d04731e0dc948f8555691e36f701aad74f49
--- /dev/null
+++ b/test/built-ins/Set/prototype/size/returns-count-of-present-values-by-iterable.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.
+/*---
+es6id: 23.2.3.9
+description: >
+    get Set.prototype.size
+
+    5. Let count be 0.
+    6. For each e that is an element of entries
+      a. If e is not empty, set count to count+1.
+
+---*/
+
+var s = new Set([0, undefined, false, NaN, null, "", Symbol()]);
+
+assert.sameValue(s.size, 7, "The value of `s.size` is `7`");
diff --git a/test/built-ins/Set/prototype/size/size.js b/test/built-ins/Set/prototype/size/size.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3c6c401bf27228ca1a23a79de3dd6a0a400f899
--- /dev/null
+++ b/test/built-ins/Set/prototype/size/size.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.9
+description: >
+    get Set.prototype.size
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(Set.prototype, "size");
+
+assert.sameValue(
+    typeof descriptor.get,
+    "function",
+    "`typeof descriptor.get` is `'function'`"
+);
+assert.sameValue(
+    typeof descriptor.set,
+    "undefined",
+    "`typeof descriptor.set` is `\"undefined\"`"
+);
+
+verifyNotEnumerable(Set.prototype, "size");
+verifyConfigurable(Set.prototype, "size");
diff --git a/test/built-ins/Set/prototype/values-no-set-data.js b/test/built-ins/Set/prototype/values-no-set-data.js
deleted file mode 100644
index 662f487f5497d049613142b788512e7d94b93d8e..0000000000000000000000000000000000000000
--- a/test/built-ins/Set/prototype/values-no-set-data.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (C) 2014 the V8 project authors. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-  description: >
-      If the context does not have a [[SetData]] internal slot, throw a
-      TypeError exception as per 23.2.5.1.
-  es6id: 23.2.3.10
- ---*/
-
-assert.throws(TypeError, function() {
-  Set.prototype.values.call({});
-});
diff --git a/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-array.js b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-array.js
new file mode 100644
index 0000000000000000000000000000000000000000..733edf0aebff97679e272f333a658e4c60d1d423
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-array.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call([]);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call([]);
+});
diff --git a/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-map.js b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-map.js
new file mode 100644
index 0000000000000000000000000000000000000000..c978d18a257277487cd27c177244f2b53e51c0e9
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/does-not-have-setdata-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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(new Map());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(new Map());
+});
diff --git a/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-object.js b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa2d311052663223fd485592b34fd506361d8bec
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/does-not-have-setdata-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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call({});
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call({});
+});
diff --git a/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-set-prototype.js b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-set-prototype.js
new file mode 100644
index 0000000000000000000000000000000000000000..251a2b32ce7507539354b30fd09a8b796f389058
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-set-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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(Set.prototype);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(Set.prototype);
+});
diff --git a/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js
new file mode 100644
index 0000000000000000000000000000000000000000..dce6c250b2183766d9ab474b3a4b0d03c4bb19db
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    ...
+    2. If S does not have a [[SetData]] internal slot, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(new WeakMap());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(new WeakMap());
+});
diff --git a/test/built-ins/Set/prototype/values/length.js b/test/built-ins/Set/prototype/values/length.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d5666f6b22cc53725217883253d18713b6fe65e
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.values.length, 0, "The value of `Set.prototype.values.length` is `0`");
+
+verifyNotEnumerable(Set.prototype.values, "length");
+verifyNotWritable(Set.prototype.values, "length");
+verifyConfigurable(Set.prototype.values, "length");
diff --git a/test/built-ins/Set/prototype/values/name.js b/test/built-ins/Set/prototype/values/name.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c7c0fa7c7e698e0b4ceaa4eaf8b1ba1dc4196c6
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Set.prototype.values.name, "values", "The value of `Set.prototype.values.name` is `'values'`");
+
+verifyNotEnumerable(Set.prototype.values, "name");
+verifyNotWritable(Set.prototype.values, "name");
+verifyConfigurable(Set.prototype.values, "name");
diff --git a/test/built-ins/Set/prototype/values/returns-iterator-empty.js b/test/built-ins/Set/prototype/values/returns-iterator-empty.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d5dbeb549d7f4a11ad7454ffee4101d7171852c
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/returns-iterator-empty.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2014 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+  description: >
+      Returns an iterator that's already done if Set is empty.
+  es6id: 23.2.3.10
+ ---*/
+
+var set = new Set();
+var iterator = set.values();
+var result = iterator.next();
+assert.sameValue(result.value, undefined, "The value of `result.value` is `undefined`");
+assert.sameValue(result.done, true, "The value of `result.done` is `true`");
diff --git a/test/built-ins/Set/prototype/values-iteration.js b/test/built-ins/Set/prototype/values/returns-iterator.js
similarity index 100%
rename from test/built-ins/Set/prototype/values-iteration.js
rename to test/built-ins/Set/prototype/values/returns-iterator.js
diff --git a/test/built-ins/Set/prototype/values/this-not-object-throw-boolean.js b/test/built-ins/Set/prototype/values/this-not-object-throw-boolean.js
new file mode 100644
index 0000000000000000000000000000000000000000..32ea6143c4bb9498b2777ad1fa54b7a2ad1ff613
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/this-not-object-throw-boolean.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(false);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(false);
+});
diff --git a/test/built-ins/Set/prototype/values/this-not-object-throw-null.js b/test/built-ins/Set/prototype/values/this-not-object-throw-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..efcb1b425803dbd9f2aa62e9f499d893bb0f5350
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/this-not-object-throw-null.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(null);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(null);
+});
diff --git a/test/built-ins/Set/prototype/values/this-not-object-throw-number.js b/test/built-ins/Set/prototype/values/this-not-object-throw-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e1e16c1462ff8e53c2d5075bfee144b7db9ab04
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/this-not-object-throw-number.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(0);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(0);
+});
diff --git a/test/built-ins/Set/prototype/values/this-not-object-throw-string.js b/test/built-ins/Set/prototype/values/this-not-object-throw-string.js
new file mode 100644
index 0000000000000000000000000000000000000000..63adc31fc862323d2fe6ad20849afddd63406220
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/this-not-object-throw-string.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call("");
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call("");
+});
diff --git a/test/built-ins/Set/prototype/values/this-not-object-throw-symbol.js b/test/built-ins/Set/prototype/values/this-not-object-throw-symbol.js
new file mode 100644
index 0000000000000000000000000000000000000000..19eb80a4875cfe1f782134117837a24007c38dd9
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/this-not-object-throw-symbol.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(Symbol());
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(Symbol());
+});
diff --git a/test/built-ins/Set/prototype/values/this-not-object-throw-undefined.js b/test/built-ins/Set/prototype/values/this-not-object-throw-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..52e8d1b7bfdbbd530df8a9077abea2780fd83f31
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/this-not-object-throw-undefined.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.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    ...
+    2. Return CreateSetIterator(S, "value").
+
+
+    23.2.5.1 CreateSetIterator Abstract Operation
+
+    1. If Type(set) is not Object, throw a TypeError exception.
+    ...
+---*/
+
+assert.throws(TypeError, function() {
+  Set.prototype.values.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+  var s = new Set();
+  s.values.call(undefined);
+});
diff --git a/test/built-ins/Set/prototype/values-iteration-mutable.js b/test/built-ins/Set/prototype/values/values-iteration-mutable.js
similarity index 94%
rename from test/built-ins/Set/prototype/values-iteration-mutable.js
rename to test/built-ins/Set/prototype/values/values-iteration-mutable.js
index 8b1cb9ccd3cd0c83be57a0e99da43892c4e54ce4..a7b89affd5466e9c99a80de7e5730847bd49da66 100644
--- a/test/built-ins/Set/prototype/values-iteration-mutable.js
+++ b/test/built-ins/Set/prototype/values/values-iteration-mutable.js
@@ -5,7 +5,7 @@
   description: >
       When an item is added to the set after the iterator is created but before
       the iterator is "done" (as defined by 23.2.5.2.1), the new item should be
-      accessible via iteration. When an item is added to the array after the
+      accessible via iteration. When an item is added to the set after the
       iterator is "done", the new item should not be accessible via iteration.
   es6id: 23.2.3.10
  ---*/
diff --git a/test/built-ins/Set/prototype/values/values.js b/test/built-ins/Set/prototype/values/values.js
new file mode 100644
index 0000000000000000000000000000000000000000..e58e932636003b2b633aa22b6b66f06baab2a530
--- /dev/null
+++ b/test/built-ins/Set/prototype/values/values.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.3.10
+description: >
+    Set.prototype.values ( )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+    typeof Set.prototype.values,
+    "function",
+    "`typeof Set.prototype.values` is `'function'`"
+);
+
+verifyNotEnumerable(Set.prototype, "values");
+verifyWritable(Set.prototype, "values");
+verifyConfigurable(Set.prototype, "values");
diff --git a/test/built-ins/Set/set-does-not-throw-when-add-is-not-callable.js b/test/built-ins/Set/set-does-not-throw-when-add-is-not-callable.js
new file mode 100644
index 0000000000000000000000000000000000000000..5067b614685b4ad8e85d9150946a45922ee34ee8
--- /dev/null
+++ b/test/built-ins/Set/set-does-not-throw-when-add-is-not-callable.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    7. Else,
+      a. Let adder be Get(set, "add").
+      b. ReturnIfAbrupt(adder).
+      c. If IsCallable(adder) is false, throw a TypeError exception.
+      d. Let iter be GetIterator(iterable).
+      e. ReturnIfAbrupt(iter).
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+      c. If next is false, return set.
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+      f. Let status be Call(adder, set, «nextValue.[[value]]»).
+      g. If status is an abrupt completion, return IteratorClose(iter, status).
+
+---*/
+
+Set.prototype.add = null;
+
+var s = new Set();
+
+assert.sameValue(s.size, 0, "The value of `s.size` is `0`");
diff --git a/test/built-ins/Set/set-get-add-method-failure.js b/test/built-ins/Set/set-get-add-method-failure.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed4ea3f1b2870175efc65603cbab2eb118f154ab
--- /dev/null
+++ b/test/built-ins/Set/set-get-add-method-failure.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.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    6. If iterable is either undefined or null, let iter be undefined.
+    7. Else,
+      a. Let adder be Get(set, "add").
+      b. ReturnIfAbrupt(adder).
+---*/
+
+function MyError() {}
+Object.defineProperty(Set.prototype, 'add', {
+  get: function() {
+    throw new MyError();
+  }
+});
+
+new Set();
+
+assert.throws(MyError, function() {
+  new Set([]);
+});
diff --git a/test/built-ins/Set/set-iterable-calls-add.js b/test/built-ins/Set/set-iterable-calls-add.js
new file mode 100644
index 0000000000000000000000000000000000000000..f6c231c9940c7a881fb3697322581247e92079fe
--- /dev/null
+++ b/test/built-ins/Set/set-iterable-calls-add.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    7. Else,
+      a. Let adder be Get(set, "add").
+      b. ReturnIfAbrupt(adder).
+      c. If IsCallable(adder) is false, throw a TypeError exception.
+      d. Let iter be GetIterator(iterable).
+      e. ReturnIfAbrupt(iter).
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+      c. If next is false, return set.
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+      f. Let status be Call(adder, set, «nextValue.[[value]]»).
+      g. If status is an abrupt completion, return IteratorClose(iter, status).
+
+---*/
+
+var setAdd = Set.prototype.add;
+var counter = 0;
+
+Set.prototype.add = function(value) {
+  counter++;
+  setAdd.call(this, value);
+};
+
+var s = new Set([1, 2]);
+
+assert.sameValue(counter, 2, "`Set.prototype.add` called twice.");
diff --git a/test/built-ins/Set/set-iterable-empty-does-not-call-add.js b/test/built-ins/Set/set-iterable-empty-does-not-call-add.js
new file mode 100644
index 0000000000000000000000000000000000000000..e29f97b3970abf5476966d31e245c3201265c73f
--- /dev/null
+++ b/test/built-ins/Set/set-iterable-empty-does-not-call-add.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    7. Else,
+      a. Let adder be Get(set, "add").
+      b. ReturnIfAbrupt(adder).
+      c. If IsCallable(adder) is false, throw a TypeError exception.
+      d. Let iter be GetIterator(iterable).
+      e. ReturnIfAbrupt(iter).
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+      c. If next is false, return set.
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+      f. Let status be Call(adder, set, «nextValue.[[value]]»).
+      g. If status is an abrupt completion, return IteratorClose(iter, status).
+
+---*/
+
+var setAdd = Set.prototype.add;
+var counter = 0;
+
+Set.prototype.add = function(value) {
+  counter++;
+  setAdd.call(this, value);
+};
+
+var s = new Set([]);
+
+assert.sameValue(counter, 0, "`Set.prototype.add` was not called.");
diff --git a/test/built-ins/Set/set-iterable-throws-when-add-is-not-callable.js b/test/built-ins/Set/set-iterable-throws-when-add-is-not-callable.js
new file mode 100644
index 0000000000000000000000000000000000000000..9305b6667e08bff00ead69ef023a35a0b5d8411d
--- /dev/null
+++ b/test/built-ins/Set/set-iterable-throws-when-add-is-not-callable.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    7. Else,
+      a. Let adder be Get(set, "add").
+      b. ReturnIfAbrupt(adder).
+      c. If IsCallable(adder) is false, throw a TypeError exception.
+      d. Let iter be GetIterator(iterable).
+      e. ReturnIfAbrupt(iter).
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+      c. If next is false, return set.
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+      f. Let status be Call(adder, set, «nextValue.[[value]]»).
+      g. If status is an abrupt completion, return IteratorClose(iter, status).
+
+---*/
+
+
+Set.prototype.add = null;
+
+assert.throws(TypeError, function() {
+  new Set([1, 2]);
+});
diff --git a/test/built-ins/Set/set-iterable.js b/test/built-ins/Set/set-iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..649bf20ff4394449bff131469e56310590eaf560
--- /dev/null
+++ b/test/built-ins/Set/set-iterable.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    7. Else,
+      a. Let adder be Get(set, "add").
+      b. ReturnIfAbrupt(adder).
+      c. If IsCallable(adder) is false, throw a TypeError exception.
+      d. Let iter be GetIterator(iterable).
+      e. ReturnIfAbrupt(iter).
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+      c. If next is false, return set.
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+      f. Let status be Call(adder, set, «nextValue.[[value]]»).
+      g. If status is an abrupt completion, return IteratorClose(iter, status).
+
+---*/
+
+var s = new Set([1, 2]);
+
+assert.sameValue(s.size, 2, "The value of `s.size` is `2`");
diff --git a/test/built-ins/Set/set-iterator-close-after-add-failure.js b/test/built-ins/Set/set-iterator-close-after-add-failure.js
new file mode 100644
index 0000000000000000000000000000000000000000..fba50f324a3eddcc4c35e4a84418756c38ba4485
--- /dev/null
+++ b/test/built-ins/Set/set-iterator-close-after-add-failure.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+      c. If next is false, return set.
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+      f. Let status be Call(adder, set, «nextValue.[[value]]»).
+      g. If status is an abrupt completion, return IteratorClose(iter, status).
+
+---*/
+
+var count = 0;
+var iterable = {};
+iterable[Symbol.iterator] = function() {
+  return {
+    next: function() {
+      return { value: null, done: false };
+    },
+    return: function() {
+      count += 1;
+    }
+  };
+};
+Set.prototype.add = function() { throw new Error(); }
+
+new Set(iterable);
+
+assert.sameValue(
+  count, 1, "The iterator is closed when `Set.prototype.add` throws an error."
+);
diff --git a/test/built-ins/Set/set-iterator-next-failure.js b/test/built-ins/Set/set-iterator-next-failure.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cc0ad975a4406db82eb597233b2b8164f68ee53
--- /dev/null
+++ b/test/built-ins/Set/set-iterator-next-failure.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.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    9. Repeat
+      a. Let next be IteratorStep(iter).
+      b. ReturnIfAbrupt(next).
+---*/
+
+var iterable = {};
+function MyError() {};
+iterable[Symbol.iterator] = function() {
+  return {
+    next: function() {
+      throw new MyError();
+    }
+  };
+};
+
+assert.throws(MyError, function() {
+  new Set(iterable);
+});
diff --git a/test/built-ins/Set/set-iterator-value-failure.js b/test/built-ins/Set/set-iterator-value-failure.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a54716e535b4fb839fb74664067f9b3128ebfe6
--- /dev/null
+++ b/test/built-ins/Set/set-iterator-value-failure.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    9. Repeat
+      ...
+      d. Let nextValue be IteratorValue(next).
+      e. ReturnIfAbrupt(nextValue).
+---*/
+
+var count = 0;
+var iterable = {};
+function MyError() {}
+iterable[Symbol.iterator] = function() {
+  return {
+    next: function() {
+      return {
+        get value() {
+          throw new MyError();
+        },
+        done: false
+      };
+    }
+  };
+};
+
+assert.throws(MyError, function() {
+  new Set(iterable);
+});
diff --git a/test/built-ins/Set/set-newtarget.js b/test/built-ins/Set/set-newtarget.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb7cd1d67cd9f8ddf3097fe9519249bc66045eb7
--- /dev/null
+++ b/test/built-ins/Set/set-newtarget.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    2. Let set be OrdinaryCreateFromConstructor(NewTarget, "%SetPrototype%", «‍[[SetData]]» ).
+    ...
+
+---*/
+
+var s1 = new Set();
+
+assert.sameValue(
+    Object.getPrototypeOf(s1),
+    Set.prototype,
+    "`Object.getPrototypeOf(s1)` returns `Set.prototype`"
+);
+
+var s2 = new Set([1, 2]);
+
+assert.sameValue(
+    Object.getPrototypeOf(s2),
+    Set.prototype,
+    "`Object.getPrototypeOf(s2)` returns `Set.prototype`"
+);
diff --git a/test/built-ins/Set/set-no-iterable.js b/test/built-ins/Set/set-no-iterable.js
new file mode 100644
index 0000000000000000000000000000000000000000..a13db51d84677998d739561c6612bcf818761a68
--- /dev/null
+++ b/test/built-ins/Set/set-no-iterable.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    ...
+    5. If iterable is not present, let iterable be undefined.
+    6. If iterable is either undefined or null, let iter be undefined.
+    ...
+    8. If iter is undefined, return set.
+
+---*/
+
+
+assert.sameValue(new Set().size, 0, "The value of `new Set().size` is `0`");
+assert.sameValue(new Set(undefined).size, 0, "The value of `new Set(undefined).size` is `0`");
+assert.sameValue(new Set(null).size, 0, "The value of `new Set(null).size` is `0`");
diff --git a/test/built-ins/Set/set-undefined-newtarget.js b/test/built-ins/Set/set-undefined-newtarget.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef420bf87c1a763ffdae6b117455a3146298a18f
--- /dev/null
+++ b/test/built-ins/Set/set-undefined-newtarget.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    When the Set function is called with optional argument iterable the following steps are taken:
+
+    1. If NewTarget is undefined, throw a TypeError exception.
+    ...
+
+---*/
+
+assert.throws(TypeError, function() {
+  Set();
+});
+
+assert.throws(TypeError, function() {
+  Set([]);
+});
diff --git a/test/built-ins/Set/set.js b/test/built-ins/Set/set.js
new file mode 100644
index 0000000000000000000000000000000000000000..104d859cd47f7bfe3ef100001867b1b052834537
--- /dev/null
+++ b/test/built-ins/Set/set.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 23.2.1.1
+description: >
+    Set ( [ iterable ] )
+
+    17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(this, "Set");
+verifyWritable(this, "Set");
+verifyConfigurable(this, "Set");
diff --git a/test/built-ins/Set/symbol-as-entry.js b/test/built-ins/Set/symbol-as-entry.js
index 7faa6670316d5012144a1ad2066a4e4474ced5b8..f60743a3126f219d60052bfb252230cfcc2be106 100644
--- a/test/built-ins/Set/symbol-as-entry.js
+++ b/test/built-ins/Set/symbol-as-entry.js
@@ -1,4 +1,4 @@
-// Copyright (C) Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 es6id: 19.4