| // Copyright (c) 2011, 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 A function type (T1,...Tk,[Tk+1,...,Tn+m]) -> T is a subtype of |
| * the function type (S1,...,Sk+j,[Sk+j+1,...,Sn]) -> S, if all of the following |
| * conditions are met: |
| * 1. Either |
| * • S is void, or |
| * • T <=> S. |
| * 2. ∀i ∈ 1..n, Ti ⇐⇒ Si. |
| * @description Checks that this statement is true for function types with no |
| * arguments: S is some type, T is some other type assignable to S. |
| * @author iefremov |
| * @issue 42648 |
| */ |
| // Requirements=nnbd-strong |
| import "../../../Utils/expect.dart"; |
| |
| typedef returnsDynamic(); |
| typedef Object returnsObject(); |
| typedef num returnsNum(); |
| |
| //() -> T is () -> dynamic |
| void f1() {} |
| int f2() => 42; |
| String f3() => "Lily was here"; |
| double f4() => 3.14; |
| Object f5() => new Object(); |
| returnsDynamic? f6() {} |
| List f7() => []; |
| List<int> f8() => [3, 1, 4]; |
| Map<int, List<List<List>>>? f9() {} |
| //() -> T is () -> Object |
| int f10() => 0; |
| String f11() => ""; |
| double f12() => 0; |
| Object f13() => ""; |
| List f14() => []; |
| List<int> f15() => [3, 1, 4]; |
| Map<int, List<List<List>>>? f16() {} |
| //() -> T is () -> num |
| int f17() => 1; |
| double f18() => 2; |
| num f19() => 3; |
| |
| main() { |
| //() -> T is () -> dynamic |
| Expect.isTrue(f1 is returnsDynamic); |
| Expect.isTrue(f2 is returnsDynamic); |
| Expect.isTrue(f3 is returnsDynamic); |
| Expect.isTrue(f4 is returnsDynamic); |
| Expect.isTrue(f5 is returnsDynamic); |
| Expect.isTrue(f6 is returnsDynamic); |
| Expect.isTrue(f7 is returnsDynamic); |
| Expect.isTrue(f8 is returnsDynamic); |
| Expect.isTrue(f9 is returnsDynamic); |
| |
| //() -> T is () -> Object |
| Expect.isTrue(f10 is returnsObject); |
| Expect.isTrue(f11 is returnsObject); |
| Expect.isTrue(f12 is returnsObject); |
| Expect.isTrue(f13 is returnsObject); |
| Expect.isTrue(f14 is returnsObject); |
| Expect.isTrue(f15 is returnsObject); |
| Expect.isFalse(f16 is returnsObject); |
| |
| //() -> T is () -> num |
| Expect.isTrue(f17 is returnsNum); |
| Expect.isTrue(f18 is returnsNum); |
| Expect.isTrue(f19 is returnsNum); |
| } |