// 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({bool equals(K key1, K key2), int hashCode(K key),
/// bool isValidKey(potentialKey)})
/// ...
/// If using methods like operator [], [remove] and [containsKey] together with a
/// custom equality and hashcode, an extra [isValidKey] function can be supplied.
/// This function is called before calling [equals] or [hashCode] with an
/// argument that may not be a [K] instance, and if the call returns [false], the
/// key is assumed to not be in the set. The [isValidKey] function defaults to
/// just testing if the object is a [K] instance.
/// @description Checks that [isValidKey] is not ignored if [equals] and
/// [hashCode] are not specified
/// @author sgrekhov@unipro.ru

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

bool called = false;

bool isValidKey(var potentialKey) {
  called = true;
  return (potentialKey is int) && potentialKey < 100;
}

main() {
  LinkedHashMap map = new LinkedHashMap(isValidKey: isValidKey);

  map[101] = 1.1;

  Expect.isNull(map[101]);
  Expect.isTrue(called);

  called = false;
  Expect.isFalse(map.containsKey(101));
  Expect.isTrue(called);

  called = false;
  Expect.isNull(map.remove(101));
  Expect.isTrue(called);
}
