Index: test/codegen/expect/corelib/hash_map2_test.js |
diff --git a/test/codegen/expect/corelib/hash_map2_test.js b/test/codegen/expect/corelib/hash_map2_test.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..84c7bd9962eaed8ea11b51ea8263793c0ddbf8f8 |
--- /dev/null |
+++ b/test/codegen/expect/corelib/hash_map2_test.js |
@@ -0,0 +1,294 @@ |
+dart_library.library('corelib/hash_map2_test', null, /* Imports */[ |
+ 'dart_sdk', |
+ 'expect' |
+], function load__hash_map2_test(exports, dart_sdk, expect) { |
+ 'use strict'; |
+ const core = dart_sdk.core; |
+ const collection = dart_sdk.collection; |
+ const dart = dart_sdk.dart; |
+ const dartx = dart_sdk.dartx; |
+ const expect$ = expect.expect; |
+ const hash_map2_test = Object.create(null); |
+ let VoidToMap = () => (VoidToMap = dart.constFn(dart.functionType(core.Map, [])))(); |
+ let MapToMap = () => (MapToMap = dart.constFn(dart.functionType(core.Map, [core.Map])))(); |
+ let HashMapOfint$String = () => (HashMapOfint$String = dart.constFn(collection.HashMap$(core.int, core.String)))(); |
+ let MapOfint$String = () => (MapOfint$String = dart.constFn(core.Map$(core.int, core.String)))(); |
+ let LinkedHashMapOfint$String = () => (LinkedHashMapOfint$String = dart.constFn(collection.LinkedHashMap$(core.int, core.String)))(); |
+ let HashMapOfString$int = () => (HashMapOfString$int = dart.constFn(collection.HashMap$(core.String, core.int)))(); |
+ let MapOfString$int = () => (MapOfString$int = dart.constFn(core.Map$(core.String, core.int)))(); |
+ let LinkedHashMapOfString$int = () => (LinkedHashMapOfString$int = dart.constFn(collection.LinkedHashMap$(core.String, core.int)))(); |
+ let intAndintToMap = () => (intAndintToMap = dart.constFn(dart.definiteFunctionType(core.Map, [core.int, core.int])))(); |
+ let intTobool = () => (intTobool = dart.constFn(dart.definiteFunctionType(core.bool, [core.int])))(); |
+ let dynamicAnddynamicTovoid = () => (dynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic])))(); |
+ let MapAndMapTovoid = () => (MapAndMapTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Map, core.Map])))(); |
+ let dynamicTobool = () => (dynamicTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))(); |
+ let VoidToint = () => (VoidToint = dart.constFn(dart.definiteFunctionType(core.int, [])))(); |
+ let VoidTovoid = () => (VoidTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [])))(); |
+ let FnAndFnTodynamic = () => (FnAndFnTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [VoidToMap(), MapToMap()])))(); |
+ let VoidToHashMap = () => (VoidToHashMap = dart.constFn(dart.definiteFunctionType(collection.HashMap, [])))(); |
+ let MapToHashMap = () => (MapToHashMap = dart.constFn(dart.definiteFunctionType(collection.HashMap, [core.Map])))(); |
+ let VoidToLinkedHashMap = () => (VoidToLinkedHashMap = dart.constFn(dart.definiteFunctionType(collection.LinkedHashMap, [])))(); |
+ let MapToLinkedHashMap = () => (MapToLinkedHashMap = dart.constFn(dart.definiteFunctionType(collection.LinkedHashMap, [core.Map])))(); |
+ hash_map2_test.testMap = function(newMap, newMapFrom) { |
+ function gen(from, to) { |
+ let map = collection.LinkedHashMap.new(); |
+ for (let i = from; dart.notNull(i) < dart.notNull(to); i = dart.notNull(i) + 1) |
+ map[dartx.set](i, i); |
+ return map; |
+ } |
+ dart.fn(gen, intAndintToMap()); |
+ function odd(n) { |
+ return (dart.notNull(n) & 1) == 1; |
+ } |
+ dart.fn(odd, intTobool()); |
+ function even(n) { |
+ return (dart.notNull(n) & 1) == 0; |
+ } |
+ dart.fn(even, intTobool()); |
+ function addAll(toMap, fromMap) { |
+ fromMap[dartx.forEach](dart.fn((k, v) => { |
+ toMap[dartx.set](k, v); |
+ }, dynamicAnddynamicTovoid())); |
+ } |
+ dart.fn(addAll, MapAndMapTovoid()); |
+ { |
+ let map = newMap(); |
+ for (let i = 0; i < 256; i++) { |
+ map[dartx.set](i, i); |
+ } |
+ addAll(map, gen(256, 512)); |
+ addAll(map, newMapFrom(gen(512, 1000))); |
+ expect$.Expect.equals(1000, map[dartx.length]); |
+ for (let i = 0; i < 1000; i = i + 2) |
+ map[dartx.remove](i); |
+ expect$.Expect.equals(500, map[dartx.length]); |
+ expect$.Expect.isFalse(map[dartx.keys][dartx.any](even)); |
+ expect$.Expect.isTrue(map[dartx.keys][dartx.every](odd)); |
+ addAll(map, gen(0, 1000)); |
+ expect$.Expect.equals(1000, map[dartx.length]); |
+ } |
+ { |
+ let map = newMap(); |
+ map[dartx.set](0, 0); |
+ for (let i = 0; i < 1000; i++) { |
+ map[dartx.set](i + 1, i + 1); |
+ map[dartx.remove](i); |
+ expect$.Expect.equals(1, map[dartx.length]); |
+ } |
+ } |
+ { |
+ let map = newMap(); |
+ for (let i = 0; i < 1000; i++) { |
+ map[dartx.set](new hash_map2_test.BadHashCode(), 0); |
+ } |
+ expect$.Expect.equals(1000, map[dartx.length]); |
+ } |
+ { |
+ let map = newMap(); |
+ map[dartx.set](0, 0); |
+ map[dartx.set](1, 1); |
+ { |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ iter.moveNext(); |
+ map[dartx.set](1, 9); |
+ iter.moveNext(); |
+ map[dartx.set](2, 2); |
+ expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); |
+ } |
+ { |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ expect$.Expect.equals(3, map[dartx.length]); |
+ iter.moveNext(); |
+ iter.moveNext(); |
+ iter.moveNext(); |
+ map[dartx.set](3, 3); |
+ expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); |
+ } |
+ { |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ iter.moveNext(); |
+ map[dartx.remove](1000); |
+ iter.moveNext(); |
+ let n = core.int._check(iter.current); |
+ map[dartx.remove](n); |
+ expect$.Expect.equals(n, iter.current); |
+ expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); |
+ } |
+ { |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ expect$.Expect.equals(3, map[dartx.length]); |
+ iter.moveNext(); |
+ iter.moveNext(); |
+ iter.moveNext(); |
+ let n = core.int._check(iter.current); |
+ map[dartx.remove](n); |
+ expect$.Expect.equals(n, iter.current); |
+ expect$.Expect.throws(dart.bind(iter, 'moveNext'), dart.fn(e => core.Error.is(e), dynamicTobool())); |
+ } |
+ { |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ expect$.Expect.equals(2, map[dartx.length]); |
+ iter.moveNext(); |
+ let n = core.int._check(iter.current); |
+ map[dartx.set](n, dart.notNull(n) * 2); |
+ iter.moveNext(); |
+ expect$.Expect.equals(map[dartx.get](iter.current), iter.current); |
+ } |
+ { |
+ map[dartx.putIfAbsent](4, dart.fn(() => { |
+ map[dartx.set](5, 5); |
+ map[dartx.set](4, -1); |
+ return 4; |
+ }, VoidToint())); |
+ expect$.Expect.equals(4, map[dartx.get](4)); |
+ expect$.Expect.equals(5, map[dartx.get](5)); |
+ } |
+ { |
+ let map2 = newMap(); |
+ for (let key of map[dartx.keys]) { |
+ map2[dartx.set](key, dart.dsend(map[dartx.get](key), '+', 1)); |
+ } |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ addAll(map, map2); |
+ iter.moveNext(); |
+ } |
+ } |
+ { |
+ let map = newMap(); |
+ map[dartx.putIfAbsent]("S", dart.fn(() => 0, VoidToint())); |
+ map[dartx.putIfAbsent]("T", dart.fn(() => 0, VoidToint())); |
+ map[dartx.putIfAbsent]("U", dart.fn(() => 0, VoidToint())); |
+ map[dartx.putIfAbsent]("C", dart.fn(() => 0, VoidToint())); |
+ map[dartx.putIfAbsent]("a", dart.fn(() => 0, VoidToint())); |
+ map[dartx.putIfAbsent]("b", dart.fn(() => 0, VoidToint())); |
+ map[dartx.putIfAbsent]("n", dart.fn(() => 0, VoidToint())); |
+ expect$.Expect.isTrue(map[dartx.containsKey]("n")); |
+ } |
+ { |
+ let map = newMap(); |
+ for (let i = 0; i < 128; i++) { |
+ map[dartx.putIfAbsent](i, dart.fn(() => i, VoidToint())); |
+ expect$.Expect.isTrue(map[dartx.containsKey](i)); |
+ map[dartx.putIfAbsent](i[dartx['>>']](1), dart.fn(() => -1, VoidToint())); |
+ } |
+ for (let i = 0; i < 128; i++) { |
+ expect$.Expect.equals(i, map[dartx.get](i)); |
+ } |
+ } |
+ { |
+ for (let i = 1; i < 128; i++) { |
+ let map = newMapFrom(gen(0, i)); |
+ map[dartx.forEach](dart.fn((key, v) => { |
+ expect$.Expect.equals(key, map[dartx.get](key)); |
+ map[dartx.set](key, dart.dsend(key, '+', 1)); |
+ map[dartx.remove](1000); |
+ map[dartx.putIfAbsent](key, dart.fn(() => expect$.Expect.fail("SHOULD NOT BE ABSENT"), VoidTovoid())); |
+ }, dynamicAnddynamicTovoid())); |
+ for (let key of map[dartx.keys]) { |
+ core.int._check(key); |
+ expect$.Expect.equals(dart.notNull(key) + 1, map[dartx.get](key)); |
+ map[dartx.set](key, dart.dsend(map[dartx.get](key), '+', 1)); |
+ map[dartx.remove](1000); |
+ map[dartx.putIfAbsent](key, dart.fn(() => expect$.Expect.fail("SHOULD NOT BE ABSENT"), VoidTovoid())); |
+ } |
+ let iter = map[dartx.keys][dartx.iterator]; |
+ for (let key = 0; key < i; key++) { |
+ expect$.Expect.equals(key + 2, map[dartx.get](key)); |
+ map[dartx.set](key, key + 3); |
+ map[dartx.remove](1000); |
+ map[dartx.putIfAbsent](key, dart.fn(() => expect$.Expect.fail("SHOULD NOT BE ABSENT"), VoidTovoid())); |
+ } |
+ iter.moveNext(); |
+ for (let key = 1; key < i; key++) { |
+ expect$.Expect.equals(key + 3, map[dartx.get](key)); |
+ map[dartx.remove](key); |
+ } |
+ iter = map[dartx.keys][dartx.iterator]; |
+ map[dartx.set](0, 2); |
+ iter.moveNext(); |
+ } |
+ } |
+ { |
+ let map = newMap(); |
+ map[dartx.set](null, 0); |
+ expect$.Expect.equals(1, map[dartx.length]); |
+ expect$.Expect.isTrue(map[dartx.containsKey](null)); |
+ expect$.Expect.isNull(map[dartx.keys][dartx.first]); |
+ expect$.Expect.isNull(map[dartx.keys][dartx.last]); |
+ map[dartx.set](null, 1); |
+ expect$.Expect.equals(1, map[dartx.length]); |
+ expect$.Expect.isTrue(map[dartx.containsKey](null)); |
+ map[dartx.remove](null); |
+ expect$.Expect.isTrue(map[dartx.isEmpty]); |
+ expect$.Expect.isFalse(map[dartx.containsKey](null)); |
+ map = newMapFrom((() => { |
+ let _ = core.Map.new(); |
+ _[dartx.set](null, 0); |
+ return _; |
+ })()); |
+ expect$.Expect.equals(1, map[dartx.length]); |
+ expect$.Expect.isTrue(map[dartx.containsKey](null)); |
+ expect$.Expect.isNull(map[dartx.keys][dartx.first]); |
+ expect$.Expect.isNull(map[dartx.keys][dartx.last]); |
+ map[dartx.set](null, 1); |
+ expect$.Expect.equals(1, map[dartx.length]); |
+ expect$.Expect.isTrue(map[dartx.containsKey](null)); |
+ map[dartx.remove](null); |
+ expect$.Expect.isTrue(map[dartx.isEmpty]); |
+ expect$.Expect.isFalse(map[dartx.containsKey](null)); |
+ let fromMap = core.Map.new(); |
+ fromMap[dartx.set](1, 0); |
+ fromMap[dartx.set](2, 0); |
+ fromMap[dartx.set](3, 0); |
+ fromMap[dartx.set](null, 0); |
+ fromMap[dartx.set](4, 0); |
+ fromMap[dartx.set](5, 0); |
+ fromMap[dartx.set](6, 0); |
+ expect$.Expect.equals(7, fromMap[dartx.length]); |
+ map = newMapFrom(fromMap); |
+ expect$.Expect.equals(7, map[dartx.length]); |
+ for (let i = 7; i < 128; i++) { |
+ map[dartx.set](i, 0); |
+ } |
+ expect$.Expect.equals(128, map[dartx.length]); |
+ expect$.Expect.isTrue(map[dartx.containsKey](null)); |
+ map[dartx.set](null, 1); |
+ expect$.Expect.equals(128, map[dartx.length]); |
+ expect$.Expect.isTrue(map[dartx.containsKey](null)); |
+ map[dartx.remove](null); |
+ expect$.Expect.equals(127, map[dartx.length]); |
+ expect$.Expect.isFalse(map[dartx.containsKey](null)); |
+ } |
+ }; |
+ dart.fn(hash_map2_test.testMap, FnAndFnTodynamic()); |
+ let const$; |
+ hash_map2_test.main = function() { |
+ expect$.Expect.isTrue(MapOfint$String().is(HashMapOfint$String().new())); |
+ expect$.Expect.isTrue(MapOfint$String().is(LinkedHashMapOfint$String().new())); |
+ expect$.Expect.isTrue(MapOfString$int().is(HashMapOfString$int().from(dart.map()))); |
+ expect$.Expect.isTrue(MapOfString$int().is(LinkedHashMapOfString$int().from(dart.map()))); |
+ expect$.Expect.isTrue(MapOfString$int().is(dart.map({}, core.String, core.int))); |
+ expect$.Expect.isTrue(MapOfString$int().is(const$ || (const$ = dart.const(dart.map({}, core.String, core.int))))); |
+ hash_map2_test.testMap(dart.fn(() => collection.HashMap.new(), VoidToHashMap()), dart.fn(m => collection.HashMap.from(m), MapToHashMap())); |
+ hash_map2_test.testMap(dart.fn(() => collection.LinkedHashMap.new(), VoidToLinkedHashMap()), dart.fn(m => collection.LinkedHashMap.from(m), MapToLinkedHashMap())); |
+ }; |
+ dart.fn(hash_map2_test.main, VoidTovoid()); |
+ hash_map2_test.BadHashCode = class BadHashCode extends core.Object { |
+ new() { |
+ this.id = (() => { |
+ let x = hash_map2_test.BadHashCode.idCounter; |
+ hash_map2_test.BadHashCode.idCounter = dart.notNull(x) + 1; |
+ return x; |
+ })(); |
+ } |
+ get hashCode() { |
+ return 42; |
+ } |
+ }; |
+ dart.setSignature(hash_map2_test.BadHashCode, { |
+ constructors: () => ({new: dart.definiteFunctionType(hash_map2_test.BadHashCode, [])}) |
+ }); |
+ hash_map2_test.BadHashCode.idCounter = 0; |
+ // Exports: |
+ exports.hash_map2_test = hash_map2_test; |
+}); |