// 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 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. Test [LinkedHashMap<int>]
/// @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<int, num> map =
      new LinkedHashMap<int, num>(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);
}
