blob: 5fb561f282a5d3d27e00e15dfdd5e8432517db2d [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 = 2.9
// 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>(5);
List<int> values = new List<int>(5);
int index;
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(Object key, Object value) {
Expect.equals(map[key], value);
keys[index] = key;
values[index] = value;
index++;
}
testForEachValue(Object v) {
values[index++] = v;
}
testForEachKey(Object 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();
}