summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_6/Set
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_6/Set')
-rw-r--r--js/src/tests/ecma_6/Set/NaN-as-key.js56
-rw-r--r--js/src/tests/ecma_6/Set/browser.js0
-rw-r--r--js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js51
-rw-r--r--js/src/tests/ecma_6/Set/getter-name.js10
-rw-r--r--js/src/tests/ecma_6/Set/shell.js0
-rw-r--r--js/src/tests/ecma_6/Set/symbols.js27
6 files changed, 144 insertions, 0 deletions
diff --git a/js/src/tests/ecma_6/Set/NaN-as-key.js b/js/src/tests/ecma_6/Set/NaN-as-key.js
new file mode 100644
index 000000000..8c9207e88
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/NaN-as-key.js
@@ -0,0 +1,56 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 722260;
+var summary = 'All NaNs must be treated as identical keys for Set';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/* Avoid constant-folding that would happen were |undefined| to be used. */
+var key = -/a/g.missingProperty;
+
+var s = new Set();
+s.add(key, 17);
+assertEq(s.has(key), true);
+assertEq(s.has(-key), true);
+assertEq(s.has(NaN), true);
+
+s.delete(-key);
+assertEq(s.has(key), false);
+assertEq(s.has(-key), false);
+assertEq(s.has(NaN), false);
+
+s.add(-key, 17);
+assertEq(s.has(key), true);
+assertEq(s.has(-key), true);
+assertEq(s.has(NaN), true);
+
+s.delete(NaN);
+assertEq(s.has(key), false);
+assertEq(s.has(-key), false);
+assertEq(s.has(NaN), false);
+
+s.add(NaN, 17);
+assertEq(s.has(key), true);
+assertEq(s.has(-key), true);
+assertEq(s.has(NaN), true);
+
+s.delete(key);
+assertEq(s.has(key), false);
+assertEq(s.has(-key), false);
+assertEq(s.has(NaN), false);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Set/browser.js b/js/src/tests/ecma_6/Set/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/browser.js
diff --git a/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js b/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js
new file mode 100644
index 000000000..37c87feef
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js
@@ -0,0 +1,51 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 987243;
+var summary = "Don't use .call(...) in the self-hosted Set.prototype.forEach";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var functionCall = Function.prototype.call;
+
+function throwSyntaxError()
+{
+ throw new SyntaxError("Function.prototype.call incorrectly called");
+}
+
+function lalala() {}
+
+Function.prototype.call = throwSyntaxError;
+
+new Set().forEach(throwSyntaxError);
+new Set([1]).forEach(lalala);
+new Set([{}, 4]).forEach(lalala);
+
+Function.prototype.call = function() { this.add(3.141592654); };
+
+new Set().forEach(throwSyntaxError);
+new Set(["foo"]).forEach(lalala);
+new Set([undefined, NaN]).forEach(lalala);
+
+var callCount = 0;
+Function.prototype.call = function() { callCount++; };
+
+new Set().forEach(throwSyntaxError);
+new Set([new Number]).forEach(lalala);
+new Set([true, new Boolean(false)]).forEach(lalala);
+
+assertEq(callCount, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Set/getter-name.js b/js/src/tests/ecma_6/Set/getter-name.js
new file mode 100644
index 000000000..9a3e84fa4
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/getter-name.js
@@ -0,0 +1,10 @@
+var BUGNUMBER = 1180290;
+var summary = 'Set getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(Set, Symbol.species).get.name, "get [Symbol.species]");
+assertEq(Object.getOwnPropertyDescriptor(Set.prototype, "size").get.name, "get size");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Set/shell.js b/js/src/tests/ecma_6/Set/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/shell.js
diff --git a/js/src/tests/ecma_6/Set/symbols.js b/js/src/tests/ecma_6/Set/symbols.js
new file mode 100644
index 000000000..364b3155c
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/symbols.js
@@ -0,0 +1,27 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var s = new Set;
+
+// Symbols can be stored in Sets.
+var sym = Symbol();
+s.add(sym);
+assertEq(s.has(sym), true);
+assertEq(s.has(Symbol()), false);
+assertEq([...s][0], sym);
+s.add(sym);
+assertEq(s.has(sym), true);
+assertEq(s.size, 1);
+s.delete(sym);
+assertEq(s.has(sym), false);
+assertEq(s.size, 0);
+
+// Symbols returned by Symbol.for() can be in Sets.
+var str = "how much wood would a woodchuck chuck if a woodchuck could chuck wood";
+var s2 = "how much wood would a woodchuck chuck if could";
+var arr = [for (word of str.split(" ")) Symbol.for(word)];
+s = new Set(arr);
+assertDeepEq([...s], [for (word of s2.split(" ")) Symbol.for(word)]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);