// 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 HashMap({bool equals(K key1, K key2), int hashCode(K key),
/// bool isValidKey(potentialKey) })
/// The [isValidKey] function defaults to just testing if the object is a [K]
/// instance.
/// @description Checks that default [isValidKey] function checks if the object
/// is a [K] instance. This means that [equals] and [hashCode] functions are
/// never called when trying to call [containsKey] or [remove] for unsupported
/// keys.
/// @author iarkh@unipro.ru

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

int i = 0;
bool equals(dynamic key1, dynamic key2) {
  i++;
  return key1 == key2;
}

int hashCode(dynamic key) {
  i++;
  return key;
}

main() {
  HashMap<int, int> map =
      new HashMap<int, int>(equals: equals, hashCode: hashCode);
  map.addAll({0: 0, 1: 0, 2: 12, -3: 0, -4: 0});

  i = 0;
  bool j = map.containsKey(null);
  Expect.equals(0, i);
  j = map.containsKey("string");
  Expect.equals(0, i);
  int k = map["abcd"];
  Expect.equals(0, i);
  map.remove([]);
  Expect.equals(0, i);
}
