// 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 Stream<T> skip(int count)
/// The returned stream is a broadcast stream if this stream is.
/// @description Checks that the returned stream is a broadcast stream if this
/// stream is.
/// @author a.semenov@unipro.ru

library skip_A02_t01;
import "dart:async";
import "../../../Utils/expect.dart";

void check<T>(Stream<T> s, int count) {
  Expect.equals(s.isBroadcast, s.skip(count).isBroadcast);
}

void test(CreateStreamFunction create) {
  check(create([]), 0);
  check(create([]).asBroadcastStream(), 0);
  check(create([]), 1);
  check(create([]).asBroadcastStream(), 1);
  check(create([null]), 0);
  check(create([null]).asBroadcastStream(), 0);
  check(create([null]), 1);
  check(create([null]).asBroadcastStream(), 1);
  check(create([1, 2, 3]), 0);
  check(create([1, 2, 3]).asBroadcastStream(), 0);
  check(create([1, 2, 3]), 1);
  check(create([1, 2, 3]).asBroadcastStream(), 1);
  check(create([1, 2, 3]), 12);
  check(create([1, 2, 3]).asBroadcastStream(), 12);
}
