// Copyright (c) 2018, 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.

/*@testedFeatures=inference*/
library test;

import 'dart:async';

abstract class MyFuture implements Future<int> {}

void test(
    int x0,
    Future<int> x1,
    Future<Future<int>> x2,
    Future<FutureOr<int>> x3,
    Future<MyFuture> x4,
    FutureOr<int> x5,
    FutureOr<Future<int>> x6,
    FutureOr<FutureOr<int>> x7,
    FutureOr<MyFuture> x8,
    MyFuture x9) async {
  /*@returnType=Future<int>*/ test0() async => x0;
  /*@returnType=Future<int>*/ test1() async => x1;
  /*@returnType=Future<int>*/ test2() async => x2;
  /*@returnType=Future<int>*/ test3() async => x3;
  /*@returnType=Future<int>*/ test4() async => x4;
  /*@returnType=Future<int>*/ test5() async => x5;
  /*@returnType=Future<int>*/ test6() async => x6;
  /*@returnType=Future<int>*/ test7() async => x7;
  /*@returnType=Future<int>*/ test8() async => x8;
  /*@returnType=Future<int>*/ test9() async => x9;

  var /*@type=int*/ y0 = await x0;
  var /*@type=int*/ y1 = await x1;
  var /*@type=Future<int>*/ y2 = await x2;
  var /*@type=FutureOr<int>*/ y3 = await x3;
  var /*@type=MyFuture*/ y4 = await x4;
  var /*@type=int*/ y5 = await x5;
  var /*@type=Future<int>*/ y6 = await x6;
  var /*@type=FutureOr<int>*/ y7 = await x7;
  var /*@type=MyFuture*/ y8 = await x8;
  var /*@type=int*/ y9 = await x9;
}

main() {}
