Index: tests/language/function_subtype1_test.dart |
diff --git a/tests/language/function_subtype1_test.dart b/tests/language/function_subtype1_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a7bd199e69915e34388edebab991e007c22b1ebc |
--- /dev/null |
+++ b/tests/language/function_subtype1_test.dart |
@@ -0,0 +1,74 @@ |
+// Copyright (c) 2013, 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. |
+// Dart test program for constructors and initializers. |
+ |
+// Check function subtyping. |
+ |
+import 'package:expect/expect.dart'; |
+ |
+class C<T> {} |
+ |
+typedef _(); |
+typedef void void_(); |
+typedef void void_2(); |
+typedef int int_(); |
+typedef int int_2(); |
+typedef Object Object_(); |
+typedef double double_(); |
+typedef void void__int(int i); |
+typedef int int__int(int i); |
+typedef int int__int2(int i); |
+typedef int int__Object(Object o); |
+typedef Object Object__int(int i); |
+typedef int int__double(double d); |
+typedef int int__int_int(int i1, int i2); |
+typedef void inline_void_(void f()); |
+typedef void inline_void__int(void f(int i)); |
+ |
+main() { |
+ // () -> int <: Function |
+ Expect.isTrue(new C<int_>() is C<Function>); |
+ // Function <: () -> int |
+ Expect.isFalse(new C<Function>() is C<int_>); |
+ // () -> dynamic <: () -> dynamic |
+ Expect.isTrue(new C<_>() is C<_>); |
+ // () -> dynamic <: () -> void |
+ Expect.isTrue(new C<_>() is C<void_>); |
+ // () -> void <: () -> dynamic |
+ Expect.isTrue(new C<void_>() is C<_>); |
+ // () -> int <: () -> void |
+ Expect.isTrue(new C<int_>() is C<void_>); |
+ // () -> void <: () -> int |
+ Expect.isFalse(new C<void_>() is C<int_>); |
+ // () -> void <: () -> void |
+ Expect.isTrue(new C<void_>() is C<void_2>); |
+ // () -> int <: () -> int |
+ Expect.isTrue(new C<int_>() is C<int_2>); |
+ // () -> int <: () -> Object |
+ Expect.isTrue(new C<int_>() is C<Object_>); |
+ // () -> int <: () -> double |
+ Expect.isFalse(new C<int_>() is C<double_>); |
+ // () -> int <: (int) -> void |
+ Expect.isFalse(new C<int_>() is C<void__int>); |
+ // () -> void <: (int) -> int |
+ Expect.isFalse(new C<void_>() is C<int__int>); |
+ // () -> void <: (int) -> void |
+ Expect.isFalse(new C<void_>() is C<void__int>); |
+ // (int) -> int <: (int) -> int |
+ Expect.isTrue(new C<int__int>() is C<int__int2>); |
+ // (Object) -> int <: (int) -> Object |
+ Expect.isTrue(new C<int__Object>() is C<Object__int>); |
+ // (int) -> int <: (double) -> int |
+ Expect.isFalse(new C<int__int>() is C<int__double>); |
+ // () -> int <: (int) -> int |
+ Expect.isFalse(new C<int_>() is C<int__int>); |
+ // (int) -> int <: (int,int) -> int |
+ Expect.isFalse(new C<int__int>() is C<int__int_int>); |
+ // (int,int) -> int <: (int) -> int |
+ Expect.isFalse(new C<int__int_int>() is C<int__int>); |
+ // (()->void) -> void <: ((int)->void) -> void |
+ Expect.isFalse(new C<inline_void_>() is C<inline_void__int>); |
+ // ((int)->void) -> void <: (()->void) -> void |
+ Expect.isFalse(new C<inline_void__int>() is C<inline_void_>); |
+} |