Index: test/codegen/corelib/map_from_test.dart |
diff --git a/test/codegen/corelib/map_from_test.dart b/test/codegen/corelib/map_from_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..736ead08162100dab5a40a19cdea6df39cd2fea5 |
--- /dev/null |
+++ b/test/codegen/corelib/map_from_test.dart |
@@ -0,0 +1,94 @@ |
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library map.from.test; |
+import "package:expect/expect.dart"; |
+import 'dart:collection'; |
+ |
+main() { |
+ testWithConstMap(); |
+ testWithNonConstMap(); |
+ testWithHashMap(); |
+ testWithLinkedMap(); |
+} |
+ |
+testWithConstMap() { |
+ var map = const { 'b': 42, 'a': 43 }; |
+ var otherMap = new Map.from(map); |
+ Expect.isTrue(otherMap is Map); |
+ Expect.isTrue(otherMap is HashMap); |
+ Expect.isTrue(otherMap is LinkedHashMap); |
+ |
+ Expect.equals(2, otherMap.length); |
+ Expect.equals(2, otherMap.keys.length); |
+ Expect.equals(2, otherMap.values.length); |
+ |
+ var count = (map) { |
+ int cnt = 0; |
+ map.forEach((a, b) { cnt += b; }); |
+ return cnt; |
+ }; |
+ |
+ Expect.equals(42 + 43, count(map)); |
+ Expect.equals(count(map), count(otherMap)); |
+} |
+ |
+testWithNonConstMap() { |
+ var map = { 'b': 42, 'a': 43 }; |
+ var otherMap = new Map.from(map); |
+ Expect.isTrue(otherMap is Map); |
+ Expect.isTrue(otherMap is HashMap); |
+ Expect.isTrue(otherMap is LinkedHashMap); |
+ |
+ Expect.equals(2, otherMap.length); |
+ Expect.equals(2, otherMap.keys.length); |
+ Expect.equals(2, otherMap.values.length); |
+ |
+ int count(map) { |
+ int count = 0; |
+ map.forEach((a, b) { count += b; }); |
+ return count; |
+ }; |
+ |
+ Expect.equals(42 + 43, count(map)); |
+ Expect.equals(count(map), count(otherMap)); |
+ |
+ // Test that adding to the original map does not change otherMap. |
+ map['c'] = 44; |
+ Expect.equals(3, map.length); |
+ Expect.equals(2, otherMap.length); |
+ Expect.equals(2, otherMap.keys.length); |
+ Expect.equals(2, otherMap.values.length); |
+ |
+ // Test that adding to otherMap does not change the original map. |
+ otherMap['c'] = 44; |
+ Expect.equals(3, map.length); |
+ Expect.equals(3, otherMap.length); |
+ Expect.equals(3, otherMap.keys.length); |
+ Expect.equals(3, otherMap.values.length); |
+} |
+ |
+testWithHashMap() { |
+ var map = const { 'b': 1, 'a': 2, 'c': 3 }; |
+ var otherMap = new HashMap.from(map); |
+ Expect.isTrue(otherMap is Map); |
+ Expect.isTrue(otherMap is HashMap); |
+ Expect.isTrue(otherMap is !LinkedHashMap); |
+ var i = 1; |
+ for (var val in map.values) { |
+ Expect.equals(i++, val); |
+ } |
+} |
+ |
+testWithLinkedMap() { |
+ var map = const { 'b': 1, 'a': 2, 'c': 3 }; |
+ var otherMap = new LinkedHashMap.from(map); |
+ Expect.isTrue(otherMap is Map); |
+ Expect.isTrue(otherMap is HashMap); |
+ Expect.isTrue(otherMap is LinkedHashMap); |
+ var i = 1; |
+ for (var val in map.values) { |
+ Expect.equals(i++, val); |
+ } |
+} |