// 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  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);
}
