// 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 If f is marked async*, then a fresh instance s implementing
/// the built-in class Stream is associated with the invocation and
/// immediately returned. When s is listened to, execution of the body of f will
/// begin. When f terminates:
///   • If the current return value is defined then, if s has been canceled
///   then its cancellation future is completed with null.
///   • If the current exception x is defined:
///     – x is added to s.
///     – If s has been canceled then its cancellation future is completed with
///     x as an error.
///   • s is closed.
///
/// @description Check that s is closed if the current return value is defined
/// and s has not been canceled.
///
/// @author a.semenov@unipro.ru
/// @issue 42220

import 'dart:async';
import '../../../Utils/expect.dart';

int sum = 0;

Stream generator() async* {
  for (int i = 0; i < 10000; i++) {
    sum += i;
    yield sum;
  }
}

main() {
  asyncStart();
  Stream stream = generator();
  stream.listen(
      (_) {},
      onDone: () {
        // make sure the generator function has finished
        Expect.equals(49995000, sum);
        asyncEnd();
      }
  );
}
