// 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 LinkedHashSet({bool equals(E e1, E e2), int hashCode(E e),
 * bool isValidKey(potentialKey)})
 * Create an insertion-ordered hash set using the provided [equals] and
 * [hashCode]. The provided [equals] must define a stable equivalence relation,
 * and [hashCode] must be consistent with [equals]
 * @description Checks that if consistent [equals] and [hashCode] are provided,
 * they are used to compare the keys and produce hash value for keys
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";
import "dart:collection";

bool myEquals(var key1, var key2) =>
    key1 > 0 && key2 > 0 || key1 <= 0 && key2 <= 0;
int myHashCode(var key) => key > 0 ? 1 : -1;

check(LinkedHashSet set, List expected) {
  Expect.equals(expected.length, set.length);
  int i = 0;
  for(var v in expected) {
    Expect.equals(v, set.elementAt(i++));
  }
}

main() {
  LinkedHashSet set = new LinkedHashSet(equals: myEquals, hashCode: myHashCode);
  set.add(1);
  set.add(2);
  set.add(3);
  check(set, [1]);

  set.add(2);
  check(set, [1]);

  set.add(-2);
  check(set, [1, -2]);

  set.add(-20);
  check(set, [1, -2]);

  set.remove(10);
  set.add(15);
  check(set, [-2, 15]);
}
