// 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  abstract void removeAll(Iterable<Object> elements)
 * Removes each element of elements from this set.
 * @description Checks that removeAll() works as specified in various simple
 * scenarios.
 * @author pagolubev
 */
library removeAll_A01_t01;
import "set.lib.dart";
import "../../../Utils/expect.dart";

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

  s.removeAll([].toSet());
  Expect.isTrue(s.length == 0);

  s.removeAll([-1, 5, 0].toSet());
  Expect.isTrue(s.length == 0);

  s.addAll([1, 19, -3, 8, -6, -2]);

  s.removeAll([].toSet());
  Expect.isTrue(s.length == 6);
  Expect.isTrue(s.containsAll([1, 19, -3, 8, -6, -2]));

  s.removeAll([5, -6, 2, 19, 8, 8].toSet());
  Expect.isTrue(s.length == 3);
  Expect.isTrue(s.containsAll([1, -3, -2]));
  Expect.isFalse(s.contains(-6));
  Expect.isFalse(s.contains(19));
  Expect.isFalse(s.contains(8));
  Expect.isFalse(s.contains(2));
}

main() {
  test(create);
}
