// 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 Set<E> intersection(Set<Object> other)
/// Returns a new set which is the intersection between this set and other.
/// @description Checks that new set is returned and [:this:] is not changed.
/// @author msyabro

library intersection_A01_t03;
import "set.lib.dart";
import "../../../Utils/expect.dart";

test(Set create([Iterable content])) {
  Set s = create();
  Set newSet = s.intersection([1, 2, 3].toSet());
  Expect.setEquals(s, [].toSet());
  if(identical(newSet, s)) {
    Expect.fail("[:intersection():] has returned [:this:]");
  }

  s = create([1, 2 , 3]);
  newSet = s.intersection([1, 2, 3].toSet());
  Expect.setEquals(s, [1, 2, 3].toSet());
  if(identical(newSet, s)) {
    Expect.fail("[:intersection():] has returned [:this:]");
  }

  newSet = s.intersection([1].toSet());
  Expect.setEquals(s, [1, 2, 3].toSet());
  if(identical(newSet, s)) {
    Expect.fail("[:intersection():] has returned [:this:]");
  }
}

main() {
  test(create);
}
