diff --git a/test/language/expressions/array/spread-obj-symbol-property.js b/test/language/expressions/array/spread-obj-symbol-property.js
index 8a8cedcebe7eb3488a35d5a86c341002bc9e83e9..7965be97151108599ea7a226e924cc4b21b9b92d 100644
--- a/test/language/expressions/array/spread-obj-symbol-property.js
+++ b/test/language/expressions/array/spread-obj-symbol-property.js
@@ -41,6 +41,7 @@ var callCount = 0;
 
 (function(obj) {
   assert.sameValue(obj[symbol], 1);
+  assert(Object.hasOwnProperty.call(obj, symbol));
   assert.sameValue(obj.c, 4);
   assert.sameValue(obj.d, 5);
   assert.sameValue(Object.keys(obj).length, 2);
diff --git a/test/language/expressions/async-generator/named-yield-identifier-spread-non-strict.js b/test/language/expressions/async-generator/named-yield-identifier-spread-non-strict.js
index ec4367a70696c217cbcd0ed35abc389a4eb8ffef..d65911bb3c8269c6d04103207feecb2de5d73e4c 100644
--- a/test/language/expressions/async-generator/named-yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/async-generator/named-yield-identifier-spread-non-strict.js
@@ -20,6 +20,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 
 var callCount = 0;
@@ -42,8 +43,8 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
 item.then(({ done, value }) => {
@@ -53,7 +54,9 @@ item.then(({ done, value }) => {
   assert.sameValue(value.z, 30);
   assert.sameValue(value.a, 1);
   assert.sameValue(value.b, 2);
+  assert.sameValue(value[s], 42);
   assert.sameValue(Object.keys(value).length, 5);
+  assert(Object.hasOwnProperty.call(value, s));
 }).then($DONE, $DONE);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/named-yield-spread-arr-single.js b/test/language/expressions/async-generator/named-yield-spread-arr-single.js
index a6b0438d0330757c11bc06e2f7eb9d6790ef1210..95d08539593b1cfb13346be45f0abed2afead3ac 100644
--- a/test/language/expressions/async-generator/named-yield-spread-arr-single.js
+++ b/test/language/expressions/async-generator/named-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Named async generator expression)
 esid: prod-AsyncGeneratorExpression
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     Async Generator Function Definitions
 
@@ -32,10 +31,15 @@ var gen = async function *g() {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/expressions/async-generator/yield-identifier-spread-non-strict.js b/test/language/expressions/async-generator/yield-identifier-spread-non-strict.js
index 98b6583fab303b21bd67ca17f5c07f5abe85da1a..8a60681c237e5171aa47bbe9791829b03fcbbfc6 100644
--- a/test/language/expressions/async-generator/yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/async-generator/yield-identifier-spread-non-strict.js
@@ -20,6 +20,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 
 var callCount = 0;
@@ -42,8 +43,8 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
 item.then(({ done, value }) => {
@@ -53,7 +54,9 @@ item.then(({ done, value }) => {
   assert.sameValue(value.z, 30);
   assert.sameValue(value.a, 1);
   assert.sameValue(value.b, 2);
+  assert.sameValue(value[s], 42);
   assert.sameValue(Object.keys(value).length, 5);
+  assert(Object.hasOwnProperty.call(value, s));
 }).then($DONE, $DONE);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-spread-arr-single.js b/test/language/expressions/async-generator/yield-spread-arr-single.js
index 45be229091786e28320d2b91007accaf602c6448..421f0004cfc66059323d91b917a2f95f175a24e0 100644
--- a/test/language/expressions/async-generator/yield-spread-arr-single.js
+++ b/test/language/expressions/async-generator/yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Unnamed async generator expression)
 esid: prod-AsyncGeneratorExpression
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     Async Generator Function Definitions
 
@@ -32,10 +31,15 @@ var gen = async function *() {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/expressions/call/spread-obj-symbol-property.js b/test/language/expressions/call/spread-obj-symbol-property.js
index 9a26e67f60535b3b54c180045e8d5d857021eaa4..456ccb8207a2515fdb9fa5575f2286903decacfb 100644
--- a/test/language/expressions/call/spread-obj-symbol-property.js
+++ b/test/language/expressions/call/spread-obj-symbol-property.js
@@ -39,6 +39,7 @@ var callCount = 0;
 
 (function(obj) {
   assert.sameValue(obj[symbol], 1);
+  assert(Object.hasOwnProperty.call(obj, symbol));
   assert.sameValue(obj.c, 4);
   assert.sameValue(obj.d, 5);
   assert.sameValue(Object.keys(obj).length, 2);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-spread-arr-single.js b/test/language/expressions/class/async-gen-method-static-yield-spread-arr-single.js
index f9f23472f154133c33be7a89db324e336b6b4933..9c0297d6eb40646e16d4057b172bfd7afe7bf689 100644
--- a/test/language/expressions/class/async-gen-method-static-yield-spread-arr-single.js
+++ b/test/language/expressions/class/async-gen-method-static-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Static async generator method as a ClassExpression element)
 esid: prod-AsyncGeneratorMethod
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     ClassElement :
       static MethodDefinition
@@ -39,10 +38,15 @@ var gen = C.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/expressions/class/async-gen-method-yield-spread-arr-single.js b/test/language/expressions/class/async-gen-method-yield-spread-arr-single.js
index 3bee88b77b7738d65ffd729061ad771340004cf0..aff92093e9225e2ee3a979a7c3d8d1cf82cbddfd 100644
--- a/test/language/expressions/class/async-gen-method-yield-spread-arr-single.js
+++ b/test/language/expressions/class/async-gen-method-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Async generator method as a ClassExpression element)
 esid: prod-AsyncGeneratorMethod
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     ClassElement :
       MethodDefinition
@@ -39,10 +38,15 @@ var gen = C.prototype.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js b/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js
index 9e983666507b430678938f7cecd896e4b3006d82..d26fc19a4c0a415a3197960d8dd8ab278e0d975b 100644
--- a/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js
+++ b/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Static generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 flags: [generated]
-includes: [compareArray.js]
 info: |
     ClassElement :
       static MethodDefinition
@@ -22,7 +21,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -38,9 +36,15 @@ var gen = C.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/gen-method-yield-spread-arr-single.js b/test/language/expressions/class/gen-method-yield-spread-arr-single.js
index a9ecc6af525b672ef4adb77112a2ec226ae58e51..b1d9e473bad838955ae6af61a5f5a6e1233cf4ca 100644
--- a/test/language/expressions/class/gen-method-yield-spread-arr-single.js
+++ b/test/language/expressions/class/gen-method-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Generator method as a ClassExpression element)
 esid: prod-GeneratorMethod
 flags: [generated]
-includes: [compareArray.js]
 info: |
     ClassElement :
       MethodDefinition
@@ -22,7 +21,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -38,9 +36,15 @@ var gen = C.prototype.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js b/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js
index 4931f2f953287fe9875afc339006f207e25a9df3..2fa759a558cceac995fea24ed36cc7b1343b942d 100644
--- a/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js
@@ -19,6 +19,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 var callCount = 0;
 
@@ -40,16 +41,20 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
+var value = item.value;
+
 assert.sameValue(item.done, false);
-assert.sameValue(item.value.x, 10);
-assert.sameValue(item.value.y, 20);
-assert.sameValue(item.value.z, 30);
-assert.sameValue(item.value.a, 1);
-assert.sameValue(item.value.b, 2);
-assert.sameValue(Object.keys(item.value).length, 5);
+assert.sameValue(value.x, 10);
+assert.sameValue(value.y, 20);
+assert.sameValue(value.z, 30);
+assert.sameValue(value.a, 1);
+assert.sameValue(value.b, 2);
+assert.sameValue(value[s], 42);
+assert(Object.hasOwnProperty.call(value, s));
+assert.sameValue(Object.keys(value).length, 5);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/named-yield-spread-arr-single.js b/test/language/expressions/generators/named-yield-spread-arr-single.js
index eb2b8534d209d35f5ce92442c242824382b3bdf0..b0bd3194efd1b6228c524c9e0b5190247b7ac2ef 100644
--- a/test/language/expressions/generators/named-yield-spread-arr-single.js
+++ b/test/language/expressions/generators/named-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Named generator expression)
 esid: prod-GeneratorExpression
 flags: [generated]
-includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
@@ -16,7 +15,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -30,9 +28,15 @@ var gen = function *g() {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/yield-identifier-spread-non-strict.js b/test/language/expressions/generators/yield-identifier-spread-non-strict.js
index 2991544a0607cef32b8d89cd07df3ad1b37e7b28..05be96d4e7f7f71a44dd3e0068c870d03f1d1387 100644
--- a/test/language/expressions/generators/yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/generators/yield-identifier-spread-non-strict.js
@@ -19,6 +19,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 var callCount = 0;
 
@@ -40,16 +41,20 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
+var value = item.value;
+
 assert.sameValue(item.done, false);
-assert.sameValue(item.value.x, 10);
-assert.sameValue(item.value.y, 20);
-assert.sameValue(item.value.z, 30);
-assert.sameValue(item.value.a, 1);
-assert.sameValue(item.value.b, 2);
-assert.sameValue(Object.keys(item.value).length, 5);
+assert.sameValue(value.x, 10);
+assert.sameValue(value.y, 20);
+assert.sameValue(value.z, 30);
+assert.sameValue(value.a, 1);
+assert.sameValue(value.b, 2);
+assert.sameValue(value[s], 42);
+assert(Object.hasOwnProperty.call(value, s));
+assert.sameValue(Object.keys(value).length, 5);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/generators/yield-spread-arr-single.js b/test/language/expressions/generators/yield-spread-arr-single.js
index f9cba19aa323d8edd47e31d7e5d476050d0f2a57..52bb571f71ba7da09b8129909922460abbbb8c03 100644
--- a/test/language/expressions/generators/yield-spread-arr-single.js
+++ b/test/language/expressions/generators/yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Unnamed generator expression)
 esid: prod-GeneratorExpression
 flags: [generated]
-includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
@@ -16,7 +15,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -30,9 +28,15 @@ var gen = function *() {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/new/spread-obj-symbol-property.js b/test/language/expressions/new/spread-obj-symbol-property.js
index 33f58683457f86a7dce3845692d653f46d61aef0..ada48fd50f97d01a1adb495b3d1099fe60d94a46 100644
--- a/test/language/expressions/new/spread-obj-symbol-property.js
+++ b/test/language/expressions/new/spread-obj-symbol-property.js
@@ -38,6 +38,7 @@ var callCount = 0;
 
 new function(obj) {
   assert.sameValue(obj[symbol], 1);
+  assert(Object.hasOwnProperty.call(obj, symbol));
   assert.sameValue(obj.c, 4);
   assert.sameValue(obj.d, 5);
   assert.sameValue(Object.keys(obj).length, 2);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-identifier-spread-non-strict.js b/test/language/expressions/object/method-definition/async-gen-yield-identifier-spread-non-strict.js
index 7bb35899c81aeb76b8a980cf0ed278fa064313d3..aaef9d3cc9ffce97f08a0a89bc48ac175f34c54e 100644
--- a/test/language/expressions/object/method-definition/async-gen-yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/object/method-definition/async-gen-yield-identifier-spread-non-strict.js
@@ -19,6 +19,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 
 var callCount = 0;
@@ -43,8 +44,8 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
 item.then(({ done, value }) => {
@@ -54,7 +55,9 @@ item.then(({ done, value }) => {
   assert.sameValue(value.z, 30);
   assert.sameValue(value.a, 1);
   assert.sameValue(value.b, 2);
+  assert.sameValue(value[s], 42);
   assert.sameValue(Object.keys(value).length, 5);
+  assert(Object.hasOwnProperty.call(value, s));
 }).then($DONE, $DONE);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-spread-arr-single.js b/test/language/expressions/object/method-definition/async-gen-yield-spread-arr-single.js
index 1650fce4cd46a546d58fd9ecc0b29f5ced316079..fb93afba318d36811096120efab495df409a8438 100644
--- a/test/language/expressions/object/method-definition/async-gen-yield-spread-arr-single.js
+++ b/test/language/expressions/object/method-definition/async-gen-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Async generator method)
 esid: prod-AsyncGeneratorMethod
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     Async Generator Function Definitions
 
@@ -32,10 +31,15 @@ var gen = {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js
index 02c646bf754f83895f1ca0a84dd2cae8054396fe..53802b97268b9ee40d5f924ecbfe32dbdaf0578e 100644
--- a/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js
+++ b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js
@@ -19,6 +19,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 var callCount = 0;
 
@@ -42,16 +43,20 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
+var value = item.value;
+
 assert.sameValue(item.done, false);
-assert.sameValue(item.value.x, 10);
-assert.sameValue(item.value.y, 20);
-assert.sameValue(item.value.z, 30);
-assert.sameValue(item.value.a, 1);
-assert.sameValue(item.value.b, 2);
-assert.sameValue(Object.keys(item.value).length, 5);
+assert.sameValue(value.x, 10);
+assert.sameValue(value.y, 20);
+assert.sameValue(value.z, 30);
+assert.sameValue(value.a, 1);
+assert.sameValue(value.b, 2);
+assert.sameValue(value[s], 42);
+assert(Object.hasOwnProperty.call(value, s));
+assert.sameValue(Object.keys(value).length, 5);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js b/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js
index 47a3f9d5beca15f60e56b2ac1c43ad8d221c8a3a..9fe742e13f9e64df505d01f0c4e59b319c5a6d32 100644
--- a/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js
+++ b/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Generator method)
 esid: prod-GeneratorMethod
 flags: [generated]
-includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
@@ -16,7 +15,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -32,9 +30,15 @@ var gen = {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/super/call-spread-obj-symbol-property.js b/test/language/expressions/super/call-spread-obj-symbol-property.js
index dd3498438946c96e305f2cec7b83ff7f3f4d4fec..94ba4324f004dff880ef636848a330ebad6ff647 100644
--- a/test/language/expressions/super/call-spread-obj-symbol-property.js
+++ b/test/language/expressions/super/call-spread-obj-symbol-property.js
@@ -37,6 +37,7 @@ var callCount = 0;
 class Test262ParentClass {
   constructor(obj) {
     assert.sameValue(obj[symbol], 1);
+    assert(Object.hasOwnProperty.call(obj, symbol));
     assert.sameValue(obj.c, 4);
     assert.sameValue(obj.d, 5);
     assert.sameValue(Object.keys(obj).length, 2);
diff --git a/test/language/statements/async-generator/yield-identifier-spread-non-strict.js b/test/language/statements/async-generator/yield-identifier-spread-non-strict.js
index 35c9b4fa92d689c2eb02f97a02504443a2ce2223..dd2759f3f7006e19247002931ff3531ff3e4bd08 100644
--- a/test/language/statements/async-generator/yield-identifier-spread-non-strict.js
+++ b/test/language/statements/async-generator/yield-identifier-spread-non-strict.js
@@ -20,6 +20,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 
 var callCount = 0;
@@ -42,8 +43,8 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
 item.then(({ done, value }) => {
@@ -53,7 +54,9 @@ item.then(({ done, value }) => {
   assert.sameValue(value.z, 30);
   assert.sameValue(value.a, 1);
   assert.sameValue(value.b, 2);
+  assert.sameValue(value[s], 42);
   assert.sameValue(Object.keys(value).length, 5);
+  assert(Object.hasOwnProperty.call(value, s));
 }).then($DONE, $DONE);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-spread-arr-single.js b/test/language/statements/async-generator/yield-spread-arr-single.js
index 80a9641244bc07268468c4d24e629541cfb52faf..b2a3063395eb7ee2a36c2db32d8bb097c9ad7ac2 100644
--- a/test/language/statements/async-generator/yield-spread-arr-single.js
+++ b/test/language/statements/async-generator/yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Async generator Function declaration)
 esid: prod-AsyncGeneratorDeclaration
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     Async Generator Function Definitions
 
@@ -32,10 +31,15 @@ async function *gen() {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/statements/class/async-gen-method-static-yield-spread-arr-single.js b/test/language/statements/class/async-gen-method-static-yield-spread-arr-single.js
index 3df12ef903643dec4b0999a8d1d7c68ec9e1dc3b..8ae48c2a721a51d661fa0796d125afc4b795f1f3 100644
--- a/test/language/statements/class/async-gen-method-static-yield-spread-arr-single.js
+++ b/test/language/statements/class/async-gen-method-static-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Static async generator method as a ClassDeclaration element)
 esid: prod-AsyncGeneratorMethod
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     ClassElement :
       static MethodDefinition
@@ -39,10 +38,15 @@ var gen = C.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/statements/class/async-gen-method-yield-spread-arr-single.js b/test/language/statements/class/async-gen-method-yield-spread-arr-single.js
index 0a34a9577eacf22e374ecd78e3081a65223c10d6..acb035bacb089b9402c2b920403becabdb9c3ae8 100644
--- a/test/language/statements/class/async-gen-method-yield-spread-arr-single.js
+++ b/test/language/statements/class/async-gen-method-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Async Generator method as a ClassDeclaration element)
 esid: prod-AsyncGeneratorMethod
 flags: [generated, async]
-includes: [compareArray.js]
 info: |
     ClassElement :
       MethodDefinition
@@ -39,10 +38,15 @@ var gen = C.prototype.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
+var item = iter.next(arr);
 
 item.then(({ done, value }) => {
-  assert(compareArray(value, arr));
+  assert.notSameValue(value, arr, 'value is a new array');
+  assert(Array.isArray(value), 'value is an Array exotic object');
+  assert.sameValue(value.length, 3)
+  assert.sameValue(value[0], 'a');
+  assert.sameValue(value[1], 'b');
+  assert.sameValue(value[2], 'c');
   assert.sameValue(done, false);
 }).then($DONE, $DONE);
 
diff --git a/test/language/statements/class/gen-method-static-yield-spread-arr-single.js b/test/language/statements/class/gen-method-static-yield-spread-arr-single.js
index 900dc84d4601abd42646f2f87986a379964e5d8a..5a74810166a0da06ec3cb24fbfc7a72f8e799dbd 100644
--- a/test/language/statements/class/gen-method-static-yield-spread-arr-single.js
+++ b/test/language/statements/class/gen-method-static-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Static generator method as a ClassDeclaration element)
 esid: prod-GeneratorMethod
 flags: [generated]
-includes: [compareArray.js]
 info: |
     ClassElement :
       static MethodDefinition
@@ -22,7 +21,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -38,9 +36,15 @@ var gen = C.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/gen-method-yield-spread-arr-single.js b/test/language/statements/class/gen-method-yield-spread-arr-single.js
index 6ae9e72200249bb8029ce4719fe10d9898c5ffff..86b634eb173265e27e3749d77737367bdbf8387a 100644
--- a/test/language/statements/class/gen-method-yield-spread-arr-single.js
+++ b/test/language/statements/class/gen-method-yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Geenerator method as a ClassDeclaration element)
 esid: prod-GeneratorMethod
 flags: [generated]
-includes: [compareArray.js]
 info: |
     ClassElement :
       MethodDefinition
@@ -22,7 +21,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -38,9 +36,15 @@ var gen = C.prototype.gen;
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/statements/generators/yield-identifier-spread-non-strict.js b/test/language/statements/generators/yield-identifier-spread-non-strict.js
index 3fa89b1dfa78069bba034f3922f7036edaba61f0..0490ee4ac41ababd38e8d47fb04a199722d6e8c8 100644
--- a/test/language/statements/generators/yield-identifier-spread-non-strict.js
+++ b/test/language/statements/generators/yield-identifier-spread-non-strict.js
@@ -19,6 +19,7 @@ info: |
       ...AssignmentExpression[In, ?Yield]
 
 ---*/
+var s = Symbol('s');
 
 var callCount = 0;
 
@@ -40,16 +41,20 @@ var iter = gen();
 
 iter.next();
 iter.next();
-iter.next({ x: 10, a: 0, b: 0 });
-iter.next({ y: 20, a: 1, b: 1 });
+iter.next({ x: 10, a: 0, b: 0, [s]: 1 });
+iter.next({ y: 20, a: 1, b: 1, [s]: 42 });
 var item = iter.next({ z: 30, b: 2 });
 
+var value = item.value;
+
 assert.sameValue(item.done, false);
-assert.sameValue(item.value.x, 10);
-assert.sameValue(item.value.y, 20);
-assert.sameValue(item.value.z, 30);
-assert.sameValue(item.value.a, 1);
-assert.sameValue(item.value.b, 2);
-assert.sameValue(Object.keys(item.value).length, 5);
+assert.sameValue(value.x, 10);
+assert.sameValue(value.y, 20);
+assert.sameValue(value.z, 30);
+assert.sameValue(value.a, 1);
+assert.sameValue(value.b, 2);
+assert.sameValue(value[s], 42);
+assert(Object.hasOwnProperty.call(value, s));
+assert.sameValue(Object.keys(value).length, 5);
 
 assert.sameValue(callCount, 1);
diff --git a/test/language/statements/generators/yield-spread-arr-single.js b/test/language/statements/generators/yield-spread-arr-single.js
index 00aaba1eca72938079b541a6c837f104d6aae528..1ef357eec972145a22f24f33e3e7ab4a38b437cc 100644
--- a/test/language/statements/generators/yield-spread-arr-single.js
+++ b/test/language/statements/generators/yield-spread-arr-single.js
@@ -5,7 +5,6 @@
 description: Use yield value in a array spread position (Generator Function declaration)
 esid: prod-GeneratorDeclaration
 flags: [generated]
-includes: [compareArray.js]
 info: |
     14.4 Generator Function Definitions
 
@@ -16,7 +15,6 @@ info: |
 
     SpreadElement[Yield, Await]:
       ...AssignmentExpression[+In, ?Yield, ?Await]
-
 ---*/
 var arr = ['a', 'b', 'c'];
 
@@ -30,9 +28,15 @@ function *gen() {
 var iter = gen();
 
 iter.next(false);
-var item = iter.next(['a', 'b', 'c']);
-
-assert(compareArray(item.value, arr));
+var item = iter.next(arr);
+var value = item.value;
+
+assert.notSameValue(value, arr, 'value is a new array');
+assert(Array.isArray(value), 'value is an Array exotic object');
+assert.sameValue(value.length, 3)
+assert.sameValue(value[0], 'a');
+assert.sameValue(value[1], 'b');
+assert.sameValue(value[2], 'c');
 assert.sameValue(item.done, false);
 
 assert.sameValue(callCount, 1);