// 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 interface HashSet<E>
/// HashSet({bool equals(E e1, E e2), int hashCode(E e),
/// bool isValidKey(potentialKey) })
/// If [equals] or [hashCode] are omitted, the set uses the elements' intrinsic
/// [Object.operator==] and [Object.hashCode]. ...
/// If neither [equals], [hashCode], nor [isValidKey] is provided, the default
/// [isValidKey] instead accepts all values. The default equality and hashcode
/// operations are assumed to work on all objects.
/// @description Checks that default [HashSet] implementation can contain
/// elements of different types including [null], and [Object.equals],
/// [Object.hashCode] functions are used for the comparison.
/// @author iarkh@unipro.ru

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

check(HashSet set, List list1, List list2, List list3) {
  list1.forEach((element) => Expect.isTrue(set.contains(element)));
  list2.forEach((element) => Expect.isFalse(set.contains(element)));
}

main() {
  HashSet set = new HashSet();
  List aList = [-1, 0, 1, 2, 3, null, "test", "", [], [1, 2, null],
      {0 : 15, 1 : -9, 123 : "I am here"}, new Error()];
  set.addAll(aList);
  Expect.equals(aList.length, set.length);
  aList.forEach((element) => Expect.isTrue(set.contains(element)));
}
