// 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 SplayTreeMap.fromIterable(Iterable iterable,
 * {K key(element), V value(element), int compare(K key1, K key2),
 * bool isValidKey(potentialKey)})
 * If no functions are specified for [key] and [value] the default is to use the
 * [iterable] value itself.
 * @description Checks that if no functions for keys and values specified then
 * [iterable] values are used
 * @author sgrekhov@unipro.ru
 */
import "dart:collection";
import "../../../Utils/expect.dart";

check(Iterable source, Map m2) {
  Expect.equals(source.length, m2.length);
  source.forEach((var element) {
    Expect.isTrue(m2.containsKey(element));
    Expect.equals(element, m2[element]);
  });
}

main() {
  Iterable source = [];
  SplayTreeMap map = new SplayTreeMap.fromIterable(source);
  check(source, map);

  source = [1, 2, 3, 4];
  map = new SplayTreeMap.fromIterable(source);
  check(source, map);

  source = ["1", "2", "3", "4", "5", "6"];
  map = new SplayTreeMap.fromIterable(source);
  check(source, map);


  source = [new DateTime.now(), new DateTime(1970), new DateTime(2016)];
  map = new SplayTreeMap.fromIterable(source);
  check(source, map);

  source = [new Duration(), new Duration(hours: 1), new Duration(days: 1)];
  map = new SplayTreeMap.fromIterable(source);
  check(source, map);
}
