/*
 * 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 HashMap({bool equals(K key1, K key2), int hashCode(K key),
 * bool isValidKey(potentialKey) })
 * The created map is not ordered in any way. When iterating the keys or values,
 * the iteration order is unspecified except that it will stay the same as long
 * as the map isn't changed.
 * @description Checks that iteration order does not change if map is not
 * changed.
 * @author iarkh@unipro.ru
 */
import "../../../Utils/expect.dart";
import "dart:collection";
import "dart:math";

main() {
  HashMap map = new HashMap();
  Random ran = new Random();
  for (int i = 0; i < 100; i++) {
    double num = ran.nextDouble();
    map.putIfAbsent(num, () => num);
  }

  List result = new List.empty(growable: true);

  map.forEach((key, value) {
    result.add(value);
  });

  int i = 0;
  map.forEach((key, value) {
    Expect.equals(value, result[i++]);
  });

  i = 0;
  map.forEach((key, value) {
    Expect.equals(value, result[i++]);
  });
}
