--- /dev/null
+// WeakSet constructor behaviors.
+
+if (typeof WeakSet !== 'function')
+ throw new Error("bad value" + typeof WeakSet);
+
+function testCallTypeError(item) {
+ var error = null;
+ try {
+ var set = WeakSet(item);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("error not thrown");
+ if (String(error) !== "TypeError: WeakSet cannot be called as a function")
+ throw new Error("bad error " + String(error));
+}
+var obj1 = {};
+var obj2 = [];
+var obj3 = new Date();
+var obj4 = new Error();
+
+var pass = [
+ null,
+ undefined,
+ [],
+ new Set(),
+ new Map(),
+ "",
+
+ [
+ obj1,
+ obj2,
+ obj3,
+ ],
+
+ [
+ obj1,
+ obj1,
+ obj1,
+ ],
+
+ [
+ obj2,
+ obj3,
+ obj4,
+ ],
+
+ new Map([
+ [obj1, 1],
+ [obj2, 2],
+ [obj3, 3],
+ ]),
+
+ new Map([
+ [obj1, 1],
+ [obj1, 2],
+ [obj1, 3],
+ ]),
+
+ new Set([
+ obj1,
+ obj2,
+ obj3,
+ ]),
+
+ new Set([
+ obj1,
+ obj1,
+ obj1,
+ ]),
+
+ new Map([
+ { 0: obj2, 1: 'O' },
+ { 0: obj3, 1: 'K' },
+ { 0: obj4, 1: 'K' },
+ ]),
+
+ new Set([
+ obj2,
+ obj3,
+ obj4,
+ ])
+];
+
+for (var value of pass) {
+ var set = new WeakSet(value);
+ testCallTypeError(value);
+}
+
+function testTypeError(item, message) {
+ var error = null;
+ try {
+ var set = new WeakSet(item);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("error not thrown");
+ if (!message)
+ message = "TypeError: Type error";
+ if (String(error) !== message)
+ throw new Error("bad error " + String(error));
+}
+
+var nonIterable = [
+ 42,
+ Symbol("Cappuccino"),
+ true,
+ false,
+ {},
+ new Date(),
+ new Error(),
+ Object(Symbol("Matcha")),
+ (function () { }),
+];
+
+for (var item of nonIterable) {
+ testTypeError(item);
+ testCallTypeError(item);
+}
+
+var nonObjectKeys = [
+ [
+ 0,
+ 1,
+ 1,
+ ],
+
+ [
+ 1,
+ 1,
+ 1,
+ ],
+
+ [
+ 'C',
+ 'C',
+ 'V',
+ ],
+];
+
+for (var item of nonObjectKeys) {
+ testTypeError(item, 'TypeError: Attempted to add a non-object key to a WeakSet');
+ testCallTypeError(item);
+}