// Copyright (c) 2016, 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.

/**
 * @assertion LinkedHashMap.fromIterables(Iterable<K> keys, Iterable<V> values)
 * ...
 * If [keys] contains the same object multiple times, the last occurrence
 * overwrites the previous value.
 * @description Checks that if [keys] contains the same object multiple times,
 * the last occurrence overwrites the previous value.
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";
import "dart:collection";

check(Iterable keys, Iterable keysExpected, Iterable values,
    Iterable valuesExpected) {
  LinkedHashMap m = new LinkedHashMap.fromIterables(keys, values);
  Expect.equals(keysExpected.length, m.length);
  for (int i = 0; i < keysExpected.length; i++) {
    Expect.equals(valuesExpected.elementAt(i), m[keysExpected.elementAt(i)]);
  }
}

main() {
  check([1, 2, 1, 1], [1, 2], [1, 2, 3, 4], [4, 2]);
  check([1, 1, 1, 1], [1], [1, 2, 3, 4], [4]);
  check([1, 1, null, null], [1, null], [1, 2, 3, 4], [2, 4]);
}
