| function assert(b) { |
| if (!b) |
| throw new Error("Bad result!"); |
| } |
| noInline(assert); |
| |
| function test1() { |
| let map = new Map; |
| map.set(20, 30); |
| let iter = map[Symbol.iterator](); |
| let {value, done} = iter.next(); |
| assert(value[0] === 20); |
| assert(value[1] === 30); |
| assert(!done); |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test1(); |
| |
| function test2() { |
| let map = new Map; |
| map.set(20, 30); |
| let iter = map[Symbol.iterator](); |
| let {value, done} = iter.next(); |
| assert(value[0] === 20); |
| assert(value[1] === 30); |
| assert(!done); |
| |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| |
| map.set(40, 50); |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test2(); |
| |
| function test3() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map[Symbol.iterator](); |
| let {value, done} = iter.next(); |
| assert(value[0] === 20); |
| assert(value[1] === 30); |
| assert(!done); |
| |
| ({value, done} = iter.next()); |
| assert(!done); |
| assert(value[0] === 50); |
| assert(value[1] === 60); |
| |
| map.set("foo", "bar"); |
| ({value, done} = iter.next()); |
| assert(!done); |
| assert(value[0] === "foo"); |
| assert(value[1] === "bar"); |
| |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test3(); |
| |
| function test4() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map[Symbol.iterator](); |
| let {value, done} = iter.next(); |
| assert(value[0] === 20); |
| assert(value[1] === 30); |
| assert(!done); |
| |
| map.clear(); |
| |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test4(); |
| |
| function test5() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map[Symbol.iterator](); |
| let {value, done} = iter.next(); |
| assert(value[0] === 20); |
| assert(value[1] === 30); |
| assert(!done); |
| |
| map.clear(); |
| map.set(50, 60); |
| |
| ({value, done} = iter.next()); |
| assert(!done); |
| assert(value[0] === 50); |
| assert(value[1] === 60); |
| |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test5(); |
| |
| function test6() { |
| let map = new Map; |
| map.set(20, 30); |
| let i = 0; |
| for (let [key, value] of map) { |
| map.delete(key); |
| map.set(key, value); |
| i++; |
| if (i === 1000) |
| break; |
| } |
| assert(i === 1000); |
| } |
| test6(); |
| |
| function test7() { |
| let map = new Map; |
| map.set(20, 30); |
| let i = 0; |
| for (let [key, value] of map) { |
| map.clear(); |
| map.set(key, value); |
| i++; |
| if (i === 1000) |
| break; |
| } |
| assert(i === 1000); |
| } |
| test7(); |
| |
| function test8() { |
| let map = new Map; |
| map.set(20, 30); |
| for (let i = 0; i < 500; i++) |
| map.set(i, i); |
| let i = 0; |
| for (let [key, value] of map) { |
| assert(key === value); |
| i++; |
| if (key === 250) |
| break; |
| } |
| assert(i === 251); |
| } |
| test8(); |
| |
| function test9() { |
| assert(1/(-0) === -Infinity); |
| |
| let map = new Map; |
| map.set(-0, 50); // We should normalize -0 to +0 in the key. |
| for (let [key, value] of map) { |
| assert(1/key === Infinity); |
| } |
| assert(map.get(0.0) === 50); |
| assert(map.get(0) === 50); |
| assert(map.get(-0) === 50); |
| assert(map.get(+0) === 50); |
| } |
| for (let i = 0; i < 100; i++) |
| test9(); |
| |
| function test10() { |
| let map = new Map; |
| map.set("negZero", -0); // We should *not* normalize -0 to +0 in the value. |
| for (let [key, value] of map) { |
| assert(1/value === -Infinity); |
| } |
| } |
| for (let i = 0; i < 100; i++) |
| test10(); |
| |
| function test11() { |
| let map = new Map; |
| map.set(20, 30); |
| let iter = map.keys(); |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 20); |
| |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test11(); |
| |
| function test12() { |
| let map = new Map; |
| map.set(20, 30); |
| let iter = map.values(); |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 30); |
| |
| ({value, done} = iter.next()); |
| assert(done); |
| assert(value === undefined); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test12(); |
| |
| function test13() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map.keys(); |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 20); |
| |
| map.clear(); |
| map.set("foo", "bar"); |
| |
| ({value, done} = iter.next()); |
| assert(!done); |
| assert(value === "foo"); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test13(); |
| |
| function test14() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map.values(); |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 30); |
| |
| map.clear(); |
| map.set("foo", "bar"); |
| |
| ;({value, done} = iter.next()) |
| assert(!done); |
| assert(value === "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test14(); |
| |
| function test15() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map.keys(); |
| |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 20); |
| |
| ;({value, done} = iter.next()) |
| assert(!done); |
| assert(value === 50); |
| |
| map.clear(); |
| |
| map.set("foo", "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(!done); |
| assert(value === "foo"); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test15(); |
| |
| function test16() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map.values(); |
| |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 30); |
| |
| ;({value, done} = iter.next()) |
| assert(!done); |
| assert(value === 60); |
| |
| map.clear(); |
| |
| map.set("foo", "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(!done); |
| assert(value === "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test16(); |
| |
| function test17() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map.keys(); |
| |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 20); |
| |
| ;({value, done} = iter.next()) |
| assert(!done); |
| assert(value === 50); |
| |
| map.clear(); |
| |
| map.set("foo", "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(!done); |
| assert(value === "foo"); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| |
| map.set("hello", "world"); |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test17(); |
| |
| function test18() { |
| let map = new Map; |
| map.set(20, 30); |
| map.set(50, 60); |
| let iter = map.values(); |
| |
| let {value, done} = iter.next(); |
| assert(!done); |
| assert(value === 30); |
| |
| ;({value, done} = iter.next()) |
| assert(!done); |
| assert(value === 60); |
| |
| map.clear(); |
| |
| map.set("foo", "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(!done); |
| assert(value === "bar"); |
| |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| |
| map.set("hello", "world"); |
| ({value, done} = iter.next()) |
| assert(done); |
| assert(value === undefined); |
| } |
| for (let i = 0; i < 100; i++) |
| test18(); |