Index: test/codegen/corelib/splay_tree_from_iterable_test.dart |
diff --git a/test/codegen/corelib/splay_tree_from_iterable_test.dart b/test/codegen/corelib/splay_tree_from_iterable_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6ba1818b51ca49371c8a06bea0ef468cfd458f29 |
--- /dev/null |
+++ b/test/codegen/corelib/splay_tree_from_iterable_test.dart |
@@ -0,0 +1,173 @@ |
+// 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. |
+ |
+import "package:expect/expect.dart"; |
+import 'dart:collection'; |
+ |
+main() { |
+ defaultFunctionValuesTest(); |
+ defaultKeyFunctionTest(); |
+ defaultValueFunctionTest(); |
+ noDefaultValuesTest(); |
+ emptyIterableTest(); |
+ equalElementsTest(); |
+ genericTypeTest(); |
+ typedTest(); |
+} |
+ |
+void defaultFunctionValuesTest() { |
+ var map = new SplayTreeMap.fromIterable([1, 2, 3]); |
+ |
+ Expect.isTrue(map is Map); |
+ Expect.isTrue(map is SplayTreeMap); |
+ Expect.isFalse(map is HashMap); |
+ |
+ Expect.equals(3, map.length); |
+ Expect.equals(3, map.keys.length); |
+ Expect.equals(3, map.values.length); |
+ |
+ Expect.equals(1, map[1]); |
+ Expect.equals(2, map[2]); |
+ Expect.equals(3, map[3]); |
+} |
+ |
+void defaultKeyFunctionTest() { |
+ var map = new SplayTreeMap.fromIterable([1, 2, 3], value: (x) => x + 1); |
+ |
+ Expect.isTrue(map is Map); |
+ Expect.isTrue(map is SplayTreeMap); |
+ Expect.isFalse(map is HashMap); |
+ |
+ Expect.equals(3, map.length); |
+ Expect.equals(3, map.keys.length); |
+ Expect.equals(3, map.values.length); |
+ |
+ Expect.equals(2, map[1]); |
+ Expect.equals(3, map[2]); |
+ Expect.equals(4, map[3]); |
+} |
+ |
+void defaultValueFunctionTest() { |
+ var map = new SplayTreeMap.fromIterable([1, 2, 3], key: (x) => x + 1); |
+ |
+ Expect.isTrue(map is Map); |
+ Expect.isTrue(map is SplayTreeMap); |
+ Expect.isFalse(map is HashMap); |
+ |
+ Expect.equals(3, map.length); |
+ Expect.equals(3, map.keys.length); |
+ Expect.equals(3, map.values.length); |
+ |
+ Expect.equals(1, map[2]); |
+ Expect.equals(2, map[3]); |
+ Expect.equals(3, map[4]); |
+} |
+ |
+void noDefaultValuesTest() { |
+ var map = new SplayTreeMap.fromIterable([1, 2, 3], |
+ key: (x) => x + 1, value: (x) => x - 1); |
+ |
+ Expect.isTrue(map is Map); |
+ Expect.isTrue(map is SplayTreeMap); |
+ Expect.isFalse(map is HashMap); |
+ |
+ Expect.equals(3, map.length); |
+ Expect.equals(3, map.keys.length); |
+ Expect.equals(3, map.values.length); |
+ |
+ Expect.equals(0, map[2]); |
+ Expect.equals(1, map[3]); |
+ Expect.equals(2, map[4]); |
+} |
+ |
+void emptyIterableTest() { |
+ var map = new SplayTreeMap.fromIterable([]); |
+ |
+ Expect.isTrue(map is Map); |
+ Expect.isTrue(map is SplayTreeMap); |
+ Expect.isFalse(map is HashMap); |
+ |
+ Expect.equals(0, map.length); |
+ Expect.equals(0, map.keys.length); |
+ Expect.equals(0, map.values.length); |
+} |
+ |
+void equalElementsTest() { |
+ var map = new SplayTreeMap.fromIterable([1, 2, 2], key: (x) => x + 1); |
+ |
+ Expect.isTrue(map is Map); |
+ Expect.isTrue(map is SplayTreeMap); |
+ Expect.isFalse(map is HashMap); |
+ |
+ Expect.equals(2, map.length); |
+ Expect.equals(2, map.keys.length); |
+ Expect.equals(2, map.values.length); |
+ |
+ Expect.equals(1, map[2]); |
+ Expect.equals(2, map[3]); |
+} |
+ |
+void genericTypeTest() { |
+ var map = new SplayTreeMap<int, String>.fromIterable([1, 2, 3], value: (x) => '$x'); |
+ Expect.isTrue(map is Map<int, String>); |
+ Expect.isTrue(map is SplayTreeMap<int, String>); |
+ |
+ // Make sure it is not just SplayTreeMap<dynamic, dynamic>. |
+ Expect.isFalse(map is SplayTreeMap<String, dynamic>); |
+ Expect.isFalse(map is SplayTreeMap<dynamic, int>); |
+} |
+ |
+// Test in checked mode with explicitly given types. |
+void typedTest() { |
+ bool isCheckedMode = false; |
+ assert((isCheckedMode = true)); |
+ if (!isCheckedMode) return; |
+ |
+ // Assign functions to untyped function variables. |
+ Function key = (int v) => "$v"; |
+ Function value = (int v) => v.isOdd; |
+ Function id = (int i) => i; |
+ |
+ Expect.throws(() { |
+ new SplayTreeMap<String,bool>.fromIterable(<int>[1, 2, 3], |
+ key: key |
+ // No "value" map, defaults to identity, which returns int, not bool. |
+ ); |
+ }); |
+ |
+ Expect.throws(() { |
+ new SplayTreeMap<String,bool>.fromIterable(<int>[1, 2, 3], |
+ // No "key" map, defaults to identity, which returns int, not String. |
+ value: value |
+ ); |
+ }); |
+ |
+ Expect.throws(() { |
+ new SplayTreeMap<String,bool>.fromIterable(<int>[1, 2, 3], |
+ key: id, // wrong type. |
+ value: value |
+ ); |
+ }); |
+ |
+ Expect.throws(() { |
+ new SplayTreeMap<String,bool>.fromIterable(<int>[1, 2, 3], |
+ key: key, |
+ value: id // wrong type. |
+ ); |
+ }); |
+ |
+ // But it works with explicit types when used correctly. |
+ SplayTreeMap<String, bool> map = |
+ new SplayTreeMap<String, bool>.fromIterable(<int>[1, 2, 3], |
+ key: key, |
+ value: value); |
+ Iterable<String> keys = map.keys; |
+ Iterable<bool> values = map.values; |
+ List<String> keyList = keys.toList(); |
+ List<bool> valueList = values.toList(); |
+ Expect.equals(3, keyList.length); |
+ Expect.equals(3, valueList.length); |
+ Expect.equals(keys.first, map.firstKey()); |
+ Expect.equals(keys.last, map.lastKey()); |
+} |