// 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 SplayTreeSet([int compare(E key1, E key2),
/// bool isValidKey(potentialKey)])
/// ...
/// If omitted, the isValidKey function defaults to checking against the type
/// parameter: other is E.
/// @description Checks that isValidKey function defaults to checking against the
/// type parameter: other is E and prevents calling of compare
/// @author sgrekhov@unipro.ru

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

bool startTesting = false;
bool compareCalled = false;

int compare(String key1, String key2) {
  if (startTesting) {
    compareCalled = true;
  }
  return 0;
}

main() {
  SplayTreeSet<String> set = new SplayTreeSet<String>(compare);
  set.add("");
  set.add("1");
  set.add("2");
  set.add("3");

  startTesting = true;
  set.contains(3);
  set.lookup(3);
  set.remove(3);
  set.removeAll([1, 3]);
  set.retainAll([1, 2, 3]);

  Expect.isFalse(compareCalled);
}
