// 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.

// @dart = 2.9

/// @assertion Future<bool> contains(Object needle)
/// Checks whether needle occurs in the elements provided by this stream.
/// @description Checks that the method correctly checks whether match
/// occurs in the elements provided by this stream.
/// @author kaigorodov

library contains_A01_t01;
import "../../../Utils/expect.dart";

void test(CreateStreamFunction create) {
  AsyncExpect.value(false, create([]).contains(null));
  AsyncExpect.value(false, create([1, 2, []]).contains(null));
  AsyncExpect.value(true, create([1, 2, null, []]).contains(null));
  AsyncExpect.value(false, create([1, 2, []]).contains(4));
  AsyncExpect.value(true, create([1, 2, null, []]).contains(2));
}
