// 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 Stream<T> distinct([bool equals(T previous, T next)])
///    Skips data events if they are equal to the previous data event.
///    The returned stream provides the same events as this stream, except that it
/// never provides two consecutive data events that are equal.
///    Equality is determined by the provided equals method. If that is omitted,
/// the '==' operator on the last provided data element is used.
/// @description Checks that if parameter is omitted, returned stream does not
/// contain consecutive equal elements in terms of operator ==.
/// @author kaigorodov

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

void check<T>(Stream<T> s) {
  Stream<T> d = s.distinct();
  bool first = true;
  T previous;
  asyncStart();
  d.listen(
    (T event) {
      Expect.isTrue(first || !(previous == event));
      first = false;
      previous = event;
    },
    onDone:() {
      asyncEnd();
    }
  );
}

void test(CreateStreamFunction create) {
  check(create([]));
  check(create([1, 2, 2, 3]));
  check(create([1, 2, null, null]));
  check(create(new Iterable.generate(5, (int index) => 1)));
  check(create(new Iterable.generate(10, (int index) => [0])));
}
