--- /dev/null
+function test(object, name) {
+ return {
+ object,
+ name: '[object ' + name + ']'
+ };
+}
+
+function iter(object) {
+ return object[Symbol.iterator]();
+}
+
+var tests = [
+ test(iter([]), "Array Iterator"),
+ test(iter(new Array), "Array Iterator"),
+ test([].keys(), "Array Iterator"),
+ test([].entries(), "Array Iterator"),
+ test(iter(new Map), "Map Iterator"),
+ test((new Map()).keys(), "Map Iterator"),
+ test((new Map()).entries(), "Map Iterator"),
+ test(iter(new Set), "Set Iterator"),
+ test((new Set()).keys(), "Set Iterator"),
+ test((new Set()).entries(), "Set Iterator"),
+ test(iter(new String("")), "String Iterator"),
+ test(iter(""), "String Iterator"),
+];
+
+function check(actual, expected) {
+ if (actual !== expected)
+ throw new Error('bad value: ' + actual);
+}
+
+for (var { object, name } of tests) {
+ check(object.toString(), name);
+ check(Object.prototype.toString.call(object), name);
+}