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

/// @assertion  Stream<T> distinct([bool equals(T previous, T next)])
/// The returned stream is a broadcast stream if this stream is.
///
/// @description Checks that the returned stream is a broadcast stream
/// if source stream is. [equals] is provided
/// @author a.semenov@unipro.ru

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

void check<T>(Stream<T> stream, bool equals(T previous, T next)) {
  Expect.equals(stream.isBroadcast, stream.distinct(equals).isBroadcast);
}

void test(CreateStreamFunction create) {

  check(create([]), (p,n) => true);
  check(create([]).asBroadcastStream(), (p,n) => true);
  check(create([]), (p,n) => false);
  check(create([]).asBroadcastStream(), (p,n) => false);

  check(create([1,2,3,4,5]), (p,n) => true);
  check(create([1,2,3,4,5]).asBroadcastStream(), (p,n) => true);
  check(create([1,2,3,4,5]), (p,n) => false);
  check(create([1,2,3,4,5]).asBroadcastStream(), (p,n) => false);
  check(create([1,2,3,4,5]), (p,n) => p==n);
  check(create([1,2,3,4,5]).asBroadcastStream(), (p,n) => p==n);
}
