// 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 bool contains(Object element)
/// The equality used to determine whether [element] is equal to an element of
/// the iterable defaults to the [Object.operator==] of the element. The equality
/// used to determine whether [element] is equal to an element of the iterable
/// defaults to the [Object.operator==] of the element.
/// @description Checks that [true] is returned if collection contains [element]
/// and [false] is returned otherwise for list elements.
/// @author iarkh@unipro.ru

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

class MyIterable extends Object with IterableMixin {
  List _content;
  MyIterable(List list): _content = list;

  Iterator get iterator {
    return _content.iterator;
  }
}

main() {
  List list1 = [1];
  List list2 = [2];
  List list3 = [3];
  MyIterable iterable = new MyIterable([list1, list2, list3]);

  Expect.isTrue(iterable.contains(list1));
  Expect.isTrue(iterable.contains(list2));
  Expect.isTrue(iterable.contains(list3));

  Expect.isFalse(iterable.contains([1]));
  Expect.isFalse(iterable.contains([2]));
  Expect.isFalse(iterable.contains([3]));
}
