// 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.

// @dart = 2.9

/// @assertion LinkedHashMap.fromIterable(Iterable iterable,
/// {K key(element), V value(element)})
/// Creates a [LinkedHashMap] where the keys and values are computed from the
/// [iterable].
/// @description Checks that if [key] and [value] functions specified then they
/// are used for computing elements of this [iterable].
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";
import "dart:collection";

key(element) => element * 2;
value(element) => element * 3;

check(Iterable it) {
  LinkedHashMap m = new LinkedHashMap.fromIterable(it, key: key, value: value);
  Expect.equals(it.length, m.length);
  for (var v in it) {
    Expect.equals(v * 3, m[v * 2]);
  }
}

main() {
  check([]);
  check([-1, 1, 2, 3, 4, 0, 17]);
}
