// 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. // Requirements=nnbd-strong // In strong mode, `FutureOr` should be equivalent to the union of `Future` // and `T`. import 'dart:async'; import 'package:expect/expect.dart'; typedef void FunTakes(T x); typedef T FunReturns(); main() { Expect.isTrue(499 is FutureOr); // Same as `is Object?`. Expect.isTrue(499 is FutureOr); Expect.isFalse(499 is FutureOr); Expect.isTrue(new Future.value(499) is FutureOr); // Same as `is Object?`. Expect.isTrue(new Future.value(499) is FutureOr); Expect.isFalse(new Future.value(499) is FutureOr); void foo(FutureOr x) {} // Equivalent to `void bar(Object? x) {}`. // A function that takes Object? takes everything. Expect.isTrue(foo is FunTakes); Expect.isTrue(foo is FunTakes); Expect.isTrue(foo is FunTakes); Expect.isTrue(foo is FunTakes); Expect.isTrue(foo is FunTakes); Expect.isTrue(foo is FunTakes>); Expect.isTrue(foo is FunTakes>); Expect.isTrue(foo is FunTakes>); Expect.isTrue(foo is FunTakes>); Expect.isTrue(foo is FunTakes>); Expect.isTrue(foo is FunTakes>); Expect.isTrue(foo is FunTakes>>); Expect.isTrue(foo is FunTakes>>); Expect.isTrue(foo is FunTakes>>); Expect.isTrue(foo is FunTakes>>); FutureOr bar() => 499; // Equivalent to `Object? foo() => 499`. Expect.isTrue(bar is FunReturns); Expect.isFalse(bar is FunReturns); Expect.isTrue(bar is FunReturns); Expect.isFalse(bar is FunReturns); Expect.isFalse(bar is FunReturns); Expect.isFalse(bar is FunReturns>); Expect.isFalse(bar is FunReturns>); Expect.isFalse(bar is FunReturns>); Expect.isTrue(bar is FunReturns>); Expect.isFalse(bar is FunReturns>); Expect.isFalse(bar is FunReturns>); Expect.isFalse(bar is FunReturns>>); Expect.isTrue(bar is FunReturns>>); Expect.isFalse(bar is FunReturns>>); Expect.isFalse(bar is FunReturns>>); void foo2(FutureOr x) {} Expect.isFalse(foo2 is FunTakes); Expect.isFalse(foo2 is FunTakes); Expect.isFalse(foo2 is FunTakes); Expect.isFalse(foo2 is FunTakes); Expect.isTrue(foo2 is FunTakes); Expect.isFalse(foo2 is FunTakes>); Expect.isTrue(foo2 is FunTakes>); Expect.isFalse(foo2 is FunTakes>); Expect.isFalse(foo2 is FunTakes>); Expect.isFalse(foo2 is FunTakes>); Expect.isTrue(foo2 is FunTakes>); Expect.isFalse(foo2 is FunTakes>>); Expect.isFalse(foo2 is FunTakes>>); Expect.isFalse(foo2 is FunTakes>>); Expect.isFalse(foo2 is FunTakes>>); FutureOr bar2() => 499; Expect.isTrue(bar2 is FunReturns); Expect.isTrue(bar2 is FunReturns); Expect.isTrue(bar2 is FunReturns); Expect.isFalse(bar2 is FunReturns); Expect.isFalse(bar2 is FunReturns); Expect.isFalse(bar2 is FunReturns>); Expect.isFalse(bar2 is FunReturns>); Expect.isTrue(bar2 is FunReturns>); Expect.isTrue(bar2 is FunReturns>); Expect.isTrue(bar2 is FunReturns>); Expect.isFalse(bar2 is FunReturns>); Expect.isTrue(bar2 is FunReturns>>); Expect.isTrue(bar2 is FunReturns>>); Expect.isTrue(bar2 is FunReturns>>); Expect.isFalse(bar2 is FunReturns>>); void foo3(String x) {} Expect.isFalse(foo3 is FunTakes); Expect.isFalse(foo3 is FunTakes); Expect.isFalse(foo3 is FunTakes); Expect.isFalse(foo3 is FunTakes); Expect.isTrue(foo3 is FunTakes); Expect.isFalse(foo3 is FunTakes>); Expect.isFalse(foo3 is FunTakes>); Expect.isFalse(foo3 is FunTakes>); Expect.isFalse(foo3 is FunTakes>); Expect.isFalse(foo3 is FunTakes>); Expect.isFalse(foo3 is FunTakes>); Expect.isFalse(foo3 is FunTakes>>); Expect.isFalse(foo3 is FunTakes>>); Expect.isFalse(foo3 is FunTakes>>); Expect.isFalse(foo3 is FunTakes>>); int bar3() => 499; Expect.isTrue(bar3 is FunReturns); Expect.isTrue(bar3 is FunReturns); Expect.isTrue(bar3 is FunReturns); Expect.isTrue(bar3 is FunReturns); Expect.isFalse(bar3 is FunReturns); Expect.isFalse(bar3 is FunReturns>); Expect.isFalse(bar3 is FunReturns>); Expect.isTrue(bar3 is FunReturns>); Expect.isTrue(bar3 is FunReturns>); Expect.isTrue(bar3 is FunReturns>); Expect.isFalse(bar3 is FunReturns>); Expect.isTrue(bar3 is FunReturns>>); Expect.isTrue(bar3 is FunReturns>>); Expect.isTrue(bar3 is FunReturns>>); Expect.isFalse(bar3 is FunReturns>>); }