// 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 o implementing the
/// built-in class Future is associated with the invocation and immediately
/// returned to the caller. The body of f is scheduled for execution at some
/// future time. The future o will complete when f terminates. The value used
/// to complete o is the current return value, if it is defined, and the
/// current exception otherwise.
///
/// @description Check that returned future o is completed with value returned
/// by the body of the executed function
///
/// @author a.semenov@unipro.ru

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

Future test1() async {
  return null;
}

Future<int> test2() async {
  return 1;
}

Future test3() async {
  return 'abc';
}

Future test4(x) async {
  return x;
}

Future test5(x) async {
  try {
    return x;
  } finally {
    return 'finally';
  }
}

main() {
  asyncStart();
  List expected = [null, 1, 'abc', 3.14, 'finally'];
  Future.wait([test1(), test2(), test3(), test4(3.14), test5(3.14)]).then(
      (List actual) {
        Expect.listEquals(expected, actual);
        asyncEnd();
      }
  );
}
