/*
 * 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> 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 consequtive 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
 */
import "dart:async";
import "../../../Utils/expect.dart";
import "IsolateStream.dart" as IsolateStream;

check(Iterable<int?> data) {
  Stream s = IsolateStream.fromIterable(data);
  Stream d = s.distinct();
  bool first = true;
  var previous;
  asyncStart();
  d.listen((var event) {
    if (first) {
      first = false;
    } else {
      Expect.isFalse(previous == event);
    }
    previous = event;
  }, onDone: () {
    asyncEnd();
  });
}

main() {
  check([]);
  check([1, 2, 2, 3]);
  check([1, 2, null, null]);
  check(new Iterable.generate(0, (int index) => 1));
}
