// 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.periodic(Duration period,
 *     [T computation(int computationCount)])
 * Creates a stream that repeatedly emits events at period intervals.
 * If computation is omitted the event values will all be null.
 * @description Checks Stream interface methods (error processing)
 * @author a.semenov@unipro.ru
 */
import "dart:async";
import "allTests_A02.lib.dart" as all;

Stream<T> create<T>(Iterable<T> data, {bool isError(T x)?, required T defVal}) {
  int count = data.length;
  Iterator<T> iterator = data.iterator;
  return new Stream<T>.periodic(
      new Duration(milliseconds: 10),
      (_) {
        count--;
        if (iterator.moveNext()) {
          T x = iterator.current;
          if (isError != null && isError(x) && count >= 0) {
            throw x!;
          }
          return x;
        }
        return defVal;
      }
  ).takeWhile((_) => count >= 0);
}

main() {
  all.test(create);
}
