// Copyright (c) 2011, 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 void add(T value)
 * Adds [value] into the set. The method has no effect if [value] was already
 * in the set.
 * @description Checks correctness of the set after rehashing (triggered by add()).
 * @author pagolubev
 */
library add_A01_t04;
import "set.lib.dart";
import "../../../Utils/expect.dart";

test(Set create([Set content])) {
  Set s = create();

  s.addAll([-1, -3, -2, -5, -6]);
  Expect.isTrue(s.length == 5);
  Expect.isTrue(s.containsAll([-1, -3, -2, -5, -6]));

  List a = [-1, -3, -2, -5, -6];
  for(int i = 0; i < 1000; i++) {
    s.add(i);
    Expect.isTrue(s.contains(i));
    Expect.isTrue(s.containsAll(a));
    Expect.isTrue(s.length == 6 + i);
  }
}

main() {
  test(create);
}
