// 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. // A subtest of the larger MapTest. Will eliminate once the full // test is running. import "package:expect/expect.dart"; class MapTest { static void testDeletedElement(Map map) { map.clear(); for (int i = 0; i < 100; i++) { map[1] = 2; Expect.equals(1, map.length); int x = map.remove(1); Expect.equals(2, x); Expect.equals(0, map.length); } Expect.equals(0, map.length); for (int i = 0; i < 100; i++) { map[i] = 2; Expect.equals(1, map.length); int? x = map.remove(105); Expect.equals(null, x); Expect.equals(1, map.length); x = map.remove(i); Expect.equals(2, x); Expect.equals(0, map.length); } Expect.equals(0, map.length); map.remove(105); } static void test(Map map) { testDeletedElement(map); testMap(map, 1, 2, 3, 4, 5, 6, 7, 8); map.clear(); testMap(map, "value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"); } static void testMap(Map map, key1, key2, key3, key4, key5, key6, key7, key8) { int value1 = 10; int value2 = 20; int value3 = 30; int value4 = 40; int value5 = 50; int value6 = 60; int value7 = 70; int value8 = 80; Expect.equals(0, map.length); map[key1] = value1; Expect.equals(value1, map[key1]); map[key1] = value2; Expect.equals(false, map.containsKey(key2)); Expect.equals(1, map.length); map[key1] = value1; Expect.equals(value1, map[key1]); // Add enough entries to make sure the table grows. map[key2] = value2; Expect.equals(value2, map[key2]); Expect.equals(2, map.length); map[key3] = value3; Expect.equals(value2, map[key2]); Expect.equals(value3, map[key3]); map[key4] = value4; Expect.equals(value3, map[key3]); Expect.equals(value4, map[key4]); map[key5] = value5; Expect.equals(value4, map[key4]); Expect.equals(value5, map[key5]); map[key6] = value6; Expect.equals(value5, map[key5]); Expect.equals(value6, map[key6]); map[key7] = value7; Expect.equals(value6, map[key6]); Expect.equals(value7, map[key7]); map[key8] = value8; Expect.equals(value1, map[key1]); Expect.equals(value2, map[key2]); Expect.equals(value3, map[key3]); Expect.equals(value4, map[key4]); Expect.equals(value5, map[key5]); Expect.equals(value6, map[key6]); Expect.equals(value7, map[key7]); Expect.equals(value8, map[key8]); Expect.equals(8, map.length); map.remove(key4); Expect.equals(false, map.containsKey(key4)); Expect.equals(7, map.length); // Test clearing the table. map.clear(); Expect.equals(0, map.length); Expect.equals(false, map.containsKey(key1)); Expect.equals(false, map.containsKey(key2)); Expect.equals(false, map.containsKey(key3)); Expect.equals(false, map.containsKey(key4)); Expect.equals(false, map.containsKey(key5)); Expect.equals(false, map.containsKey(key6)); Expect.equals(false, map.containsKey(key7)); Expect.equals(false, map.containsKey(key8)); // Test adding and removing again. map[key1] = value1; Expect.equals(value1, map[key1]); Expect.equals(1, map.length); map[key2] = value2; Expect.equals(value2, map[key2]); Expect.equals(2, map.length); map[key3] = value3; Expect.equals(value3, map[key3]); map.remove(key3); Expect.equals(2, map.length); map[key4] = value4; Expect.equals(value4, map[key4]); map.remove(key4); Expect.equals(2, map.length); map[key5] = value5; Expect.equals(value5, map[key5]); map.remove(key5); Expect.equals(2, map.length); map[key6] = value6; Expect.equals(value6, map[key6]); map.remove(key6); Expect.equals(2, map.length); map[key7] = value7; Expect.equals(value7, map[key7]); map.remove(key7); Expect.equals(2, map.length); map[key8] = value8; Expect.equals(value8, map[key8]); map.remove(key8); Expect.equals(2, map.length); Expect.equals(true, map.containsKey(key1)); Expect.equals(true, map.containsValue(value1)); // Test Map.forEach. Map other_map = new Map(); void testForEachMap(key, value) { other_map[key] = value; } map.forEach(testForEachMap); Expect.equals(true, other_map.containsKey(key1)); Expect.equals(true, other_map.containsKey(key2)); Expect.equals(true, other_map.containsValue(value1)); Expect.equals(true, other_map.containsValue(value2)); Expect.equals(2, other_map.length); other_map.clear(); Expect.equals(0, other_map.length); // Test Collection.keys. void testForEachCollection(value) { other_map[value] = value; } Iterable keys = map.keys; keys.forEach(testForEachCollection); Expect.equals(true, other_map.containsKey(key1)); Expect.equals(true, other_map.containsKey(key2)); Expect.equals(true, other_map.containsValue(key1)); Expect.equals(true, other_map.containsValue(key2)); Expect.equals(true, !other_map.containsKey(value1)); Expect.equals(true, !other_map.containsKey(value2)); Expect.equals(true, !other_map.containsValue(value1)); Expect.equals(true, !other_map.containsValue(value2)); Expect.equals(2, other_map.length); other_map.clear(); Expect.equals(0, other_map.length); // Test Collection.values. Iterable values = map.values; values.forEach(testForEachCollection); Expect.equals(true, !other_map.containsKey(key1)); Expect.equals(true, !other_map.containsKey(key2)); Expect.equals(true, !other_map.containsValue(key1)); Expect.equals(true, !other_map.containsValue(key2)); Expect.equals(true, other_map.containsKey(value1)); Expect.equals(true, other_map.containsKey(value2)); Expect.equals(true, other_map.containsValue(value1)); Expect.equals(true, other_map.containsValue(value2)); Expect.equals(2, other_map.length); other_map.clear(); Expect.equals(0, other_map.length); // Test Map.putIfAbsent. map.clear(); Expect.equals(false, map.containsKey(key1)); map.putIfAbsent(key1, () => 10); Expect.equals(true, map.containsKey(key1)); Expect.equals(10, map[key1]); Expect.equals(10, map.putIfAbsent(key1, () => 11)); } static testKeys(Map map) { map[1] = 101; map[2] = 102; Iterable k = map.keys; Expect.equals(2, k.length); Iterable v = map.values; Expect.equals(2, v.length); Expect.equals(true, map.containsValue(101)); Expect.equals(true, map.containsValue(102)); Expect.equals(false, map.containsValue(103)); } static testMain() { test(new Map()); testKeys(new Map()); } } main() { MapTest.testMain(); }