blob: d0422d0b7cda49778d9cf916cd4265369c5a14cf [file] [log] [blame]
// 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.
// Dart test for linked hash-maps.
library linkedHashMap.test;
import "package:expect/expect.dart";
import 'dart:collection' show LinkedHashMap;
class LinkedHashMapTest {
static void testMain() {
Map map = new LinkedHashMap();
map["a"] = 1;
map["b"] = 2;
map["c"] = 3;
map["d"] = 4;
map["e"] = 5;
List<String?> keys = new List<String?>.filled(5, null);
List<int?> values = new List<int?>.filled(5, null);
int index = 0;
clear() {
index = 0;
for (int i = 0; i < keys.length; i++) {
keys[i] = null;
values[i] = null;
}
}
verifyKeys(List<String> correctKeys) {
for (int i = 0; i < correctKeys.length; i++) {
Expect.equals(correctKeys[i], keys[i]);
}
}
verifyValues(List<int> correctValues) {
for (int i = 0; i < correctValues.length; i++) {
Expect.equals(correctValues[i], values[i]);
}
}
testForEachMap(dynamic key, dynamic value) {
Expect.equals(map[key], value);
keys[index] = key;
values[index] = value;
index++;
}
testForEachValue(dynamic v) {
values[index++] = v;
}
testForEachKey(dynamic v) {
keys[index++] = v;
}
final keysInOrder = const ["a", "b", "c", "d", "e"];
final valuesInOrder = const [1, 2, 3, 4, 5];
clear();
map.forEach(testForEachMap);
verifyKeys(keysInOrder);
verifyValues(valuesInOrder);
clear();
map.keys.forEach(testForEachKey);
verifyKeys(keysInOrder);
clear();
map.values.forEach(testForEachValue);
verifyValues(valuesInOrder);
// Remove and then insert.
map.remove("b");
map["b"] = 6;
final keysAfterBMove = const ["a", "c", "d", "e", "b"];
final valuesAfterBMove = const [1, 3, 4, 5, 6];
clear();
map.forEach(testForEachMap);
verifyKeys(keysAfterBMove);
verifyValues(valuesAfterBMove);
clear();
map.keys.forEach(testForEachKey);
verifyKeys(keysAfterBMove);
clear();
map.values.forEach(testForEachValue);
verifyValues(valuesAfterBMove);
// Update.
map["a"] = 0;
final valuesAfterAUpdate = const [0, 3, 4, 5, 6];
clear();
map.forEach(testForEachMap);
verifyKeys(keysAfterBMove);
verifyValues(valuesAfterAUpdate);
clear();
map.keys.forEach(testForEachKey);
verifyKeys(keysAfterBMove);
clear();
map.values.forEach(testForEachValue);
verifyValues(valuesAfterAUpdate);
}
}
main() {
LinkedHashMapTest.testMain();
}