#1243 Runtime type checks added for Control flow collections, Constructor tear-offs and Generic functions as type arguments
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
index fe2983c..ccdcf9e 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
@@ -23,4 +23,5 @@
 
 main() {
   Expect.isTrue(C.constr is C Function());
+  checkType(checkIs<C Function()>, true, C.constr);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
index d6e7af3..408020a 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
@@ -25,4 +25,6 @@
 main() {
   Expect.isTrue(C.constr is C<X> Function<X extends dynamic>(X));
   Expect.isTrue(C<int>.constr is C<int> Function(int));
+  checkType(checkIs<C<X> Function<X extends dynamic>(X)>, true,C.constr);
+  checkType(checkIs<C<int> Function(int)>, true, C<int>.constr);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart
index e79b4dc..75fa83f 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A03_t02.dart
@@ -47,4 +47,5 @@
 
   var v3 = C<dynamic>;
   Expect.isTrue(v3 is Type);
+  checkType(checkIs<Type>, true, v3);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart
index 14da224..caa4306 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t01.dart
@@ -28,22 +28,27 @@
 main() {
   C Function() v1 = C.constr1;
   Expect.isTrue(v1 is C Function());
+  checkType(checkIs<C Function()>, true, v1);
   v1();
 
   var v2 = C.constr2;
   Expect.isTrue(v2 is C Function(int));
+  checkType(checkIs<C Function(int)>, true, v2);
   v2(14);
 
   var v3 = C.constr3;
   Expect.isTrue(v3 is C Function(dynamic));
+  checkType(checkIs<C Function(dynamic)>, true, v3);
   v3(0);
   v3(null);
 
   var v4 = C.constr4;
   Expect.isTrue(v4 is C Function(int, String, List<int>));
+  checkType(checkIs<C Function(int, String, List<int>)>, true, v4);
   v4(1, "123", [1, 2, 3]);
 
   var v5 = C.constr5;
   Expect.isTrue(v5 is C Function(dynamic, dynamic, dynamic));
+  checkType(checkIs<C Function(dynamic, dynamic, dynamic)>, true, v5);
   v5(1, "123", [1, 2, 3]);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart
index a52cd60..0deeab7 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t06.dart
@@ -29,6 +29,7 @@
   final dynamic d = 0.5;
   var v = C.name;
   Expect.isTrue(v is C Function(int x, dynamic y));
+  checkType(checkIs<C Function(int x, dynamic y)>, true, v);
   var x = v(42, "Lily was here");
   Expect.equals(42, x.x);
   Expect.equals("Lily was here", x.y);
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart
index 07300c6..c2b81b9 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t09.dart
@@ -39,6 +39,7 @@
 main() {
   var v = C.constr;
   Expect.isTrue(v is C Function(int i, {int? j, String s}));
+  checkType(checkIs<C Function(int i, {int? j, String s})>, true, v);
 
   C c1 = v(1);
   c1.check(1, null, "testme");
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart
index 2a93689..4019277 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t10.dart
@@ -35,6 +35,7 @@
 main() {
   var v = C.constr;
   Expect.isTrue(v is C Function(int i, {int? j, String s}));
+  checkType(checkIs<C Function(int i, {int? j, String s})>, true, v);
 
   C c1 = v(1);
   c1.check(1, null, "default");
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart
index c257861..b879546 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t14.dart
@@ -39,6 +39,7 @@
 main() {
   var v = C.constr;
   Expect.isTrue(v is C Function(int i, [int? j, String s]));
+  checkType(checkIs<C Function(int i, [int? j, String s])>, true, v);
 
   C c1 = v(1);
   c1.check(1, null, "testme");
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart
index fdc98bc..1f621c1 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t15.dart
@@ -35,6 +35,7 @@
 main() {
   var v = C.constr;
   Expect.isTrue(v is C Function(int i, [int? j, String s]));
+  checkType(checkIs<C Function(int i, [int? j, String s])>, true, v);
 
   C c1 = v(1);
   c1.check(1, null, "default");
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart
index c759e09..d1a13f4 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t19.dart
@@ -31,6 +31,7 @@
 main() {
   var v = C.constr;
   Expect.isTrue(v is C Function({ required int i }));
+  checkType(checkIs<C Function({ required int i })>, true, v);
 
   C c1 = v(i: 1);
   Expect.equals(1, c1.ii);
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart
index 7e89540..6be38e4 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t20.dart
@@ -28,6 +28,7 @@
 main() {
   var v = C.constr;
   Expect.isTrue(v is C Function({ required int i }));
+  checkType(checkIs<C Function({ required int i })>, true, v);
 
   C c1 = v(i: 1);
   Expect.equals(1, c1.i);
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t23.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t23.dart
index bd2270b..60e57f1 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t23.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t23.dart
@@ -28,6 +28,7 @@
   final dynamic dn = 3.14;
   var v = C.name;
   Expect.isTrue(v is C Function(int x, dynamic y));
+  checkType(checkIs<C Function(int x, dynamic y)>, true, v);
   var x = v(42, "Lily was here");
   Expect.equals(42, x.x);
   Expect.equals("Lily was here", x.y);
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t24.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t24.dart
index d92e624..5296f6b 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t24.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A04_t24.dart
@@ -30,6 +30,7 @@
   final dynamic dn = 3.14;
   var v = C.name;
   Expect.isTrue(v is C Function(int x, dynamic y));
+  checkType(checkIs<C Function(int x, dynamic y)>, true, v);
   var x = v(0, "Lily was here");
   Expect.equals(42, x.x);
   Expect.equals("Lily was here", x.y);
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A05_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A05_t01.dart
index c521e72..b501765 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A05_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A05_t01.dart
@@ -24,6 +24,18 @@
 main() {
   Expect.isTrue(C.constr is C<T1, T2, T3>
       Function<T1 extends dynamic, T2 extends num, T3 extends String>());
+  checkType(
+      checkIs<
+          C<T1, T2, T3> Function<T1 extends dynamic, T2 extends num,
+              T3 extends String>()>,
+      true,
+      C.constr);
   Expect.isTrue(C.constr1 is C<T1, T2, T3>
       Function<T1 extends dynamic, T2 extends num, T3 extends String>(T1, T2));
+  checkType(
+      checkIs<
+          C<T1, T2, T3>
+          Function<T1 extends dynamic, T2 extends num, T3 extends String>(T1, T2)>,
+      true,
+      C.constr1);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A06_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A06_t01.dart
index 95b26ad..238682b 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A06_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A06_t01.dart
@@ -24,13 +24,17 @@
 main() {
   var v1 = C<dynamic, num, String>.constr;
   Expect.isTrue(v1 is C Function());
+  checkType(checkIs<C Function()>, true, v1);
 
   var v2 = C<dynamic, num, String>.constr1;
   Expect.isTrue(v2 is C Function(dynamic, num));
+  checkType(checkIs<C Function(dynamic, num)>, true, v2);
 
   var v3 = C<List<int>, int, String>.constr;
   Expect.isTrue(v3 is C Function());
+  checkType(checkIs<C Function()>, true, v3);
 
   var v4 = C<List<int>, int, String>.constr1;
   Expect.isTrue(v4 is C Function(List<int>, int));
+  checkType(checkIs<C Function(List<int>, int)>, true, v4);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/object_member_A02_t02.dart b/LanguageFeatures/Constructor-tear-offs/object_member_A02_t02.dart
index 04e83c0..086ad2d 100644
--- a/LanguageFeatures/Constructor-tear-offs/object_member_A02_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/object_member_A02_t02.dart
@@ -28,4 +28,8 @@
   Expect.isTrue(C.toString() is C);
   Expect.isTrue(C<int>.toString is Function);
   Expect.isTrue(C.toString is Function);
+  checkType(checkIs<C>, true, C<int>.toString());
+  checkType(checkIs<C>, true, C.toString());
+  checkType(checkIs<Function>, true, C<int>.toString);
+  checkType(checkIs<Function>, true, C.toString);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/object_member_A02_t03.dart b/LanguageFeatures/Constructor-tear-offs/object_member_A02_t03.dart
index 7e686f2..3a9a3e0 100644
--- a/LanguageFeatures/Constructor-tear-offs/object_member_A02_t03.dart
+++ b/LanguageFeatures/Constructor-tear-offs/object_member_A02_t03.dart
@@ -26,8 +26,12 @@
   var v1 = C<int>;
   Expect.isTrue(v1.toString() is String);
   Expect.isTrue(v1.toString is Function);
+  checkType(checkIs<String>, true, v1.toString());
+  checkType(checkIs<Function>, true, v1.toString);
 
   var v2 = C;
   Expect.isTrue(v2.toString() is String);
   Expect.isTrue(v2.toString is Function);
+  checkType(checkIs<String>, true, v2.toString());
+  checkType(checkIs<Function>, true, v2.toString);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/summary_A01_t01.dart b/LanguageFeatures/Constructor-tear-offs/summary_A01_t01.dart
index 43b2320..910bb43 100644
--- a/LanguageFeatures/Constructor-tear-offs/summary_A01_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/summary_A01_t01.dart
@@ -31,10 +31,13 @@
 main() {
   const filledList = List.filled;  // List<T> Function<T>(int, T)
   Expect.isTrue(filledList is Func1);
+  checkType(checkIs<Func1>, true, filledList);
   const filledIntList = List<int>.filled;  // List<int> Function(int, int)
   Expect.isTrue(filledIntList is Func2);
+  checkType(checkIs<Func2>, true, filledIntList);
   const filledListList = ListList.filled;  // List<List<T>> Function<T>(int, T)
   Expect.isTrue(filledListList is Func3);
+  checkType(checkIs<Func3>, true, filledListList);
   const filledIntListList = ListList<int>.filled;  // List<List<int>> Function(int, int)
   Expect.isTrue(filledIntListList is Func4);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/summary_A02_t01.dart b/LanguageFeatures/Constructor-tear-offs/summary_A02_t01.dart
index 4c24b73..afd8c2a 100644
--- a/LanguageFeatures/Constructor-tear-offs/summary_A02_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/summary_A02_t01.dart
@@ -49,48 +49,61 @@
   const c1 = const C.new(42); // Same as: `const C(42);`. (Inferred `T` = `int`.)
   Expect.equals(42, c1.x);
   Expect.isFalse(c1.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c1.x);
 
   const c2 = const C<num>(0); // Same as: `const C<num>(0);`.
   Expect.equals(0, c2.x);
   Expect.isTrue(c2.x is num);
   Expect.isFalse(c2.x is String); // to check that x is not dynamic
+  checkType(checkIs<num>, true, c2.x);
+  checkType(checkIs<String>, false, c2.x);
 
   var c3 = new C.new(0); // Same as `new C(0);`.
   Expect.equals(0, c3.x);
   Expect.isFalse(c3.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c3.x);
 
   var c4 = new C<num>.new(0); // Same as `new C<num>(0);`.
   Expect.equals(0, c4.x);
   Expect.isFalse(c4.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c4.x);
 
   var c5 = C.new(0); // Same as `C(0);`.
   Expect.equals(0, c5.x);
   Expect.isFalse(c5.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c5.x);
 
   var c6 = C<num>.new(0); // Same as `C<num>(0);`.
   Expect.equals(0, c6.x);
   Expect.isFalse(c6.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c6.x);
 
   var f1 = C.new; // New tear-off, not expressible without `.new`.
   var c7 = f1(42);
   Expect.equals(42, c7.x);
   Expect.isFalse(c7.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c7.x);
 
   var c8 = f1<num>(3.14);
   Expect.equals(3.14, c8.x);
   Expect.isFalse(c8.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c8.x);
 
   var f2 = C<num>.new; // New tear-off, not expressible without `.new`.
   var c9 = f2(3.14);
   Expect.equals(3.14, c9.x);
   Expect.isFalse(c9.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c9.x);
 
   var c10 = C.other(42);
   Expect.equals(42, c10.x);
   Expect.isFalse(c10.x is String); // to check that x is not dynamic
+  checkType(checkIs<String>, false, c10.x);
 
   var c11 = C.d(42);
   Expect.equals(42, c11.x);
   Expect.isFalse(c11.x is String); // to check that x is not dynamic
   Expect.isTrue(c11 is D);
+  checkType(checkIs<String>, false, c11.x);
+  checkType(checkIs<D>, true, c11);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/summary_A03_t01.dart b/LanguageFeatures/Constructor-tear-offs/summary_A03_t01.dart
index b37e653..fd16b2c 100644
--- a/LanguageFeatures/Constructor-tear-offs/summary_A03_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/summary_A03_t01.dart
@@ -86,6 +86,7 @@
     var f1 = stat<int>;
     Expect.equals(42, f1(42));
     Expect.isTrue(f1 is Func);
+    checkType(checkIs<Func>, true, f1);
 
     var f1TypeName = stat<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f1TypeName);
@@ -93,6 +94,7 @@
     var f2 = inst<int>;
     Expect.equals(42, f2(42));
     Expect.isTrue(f2 is Func);
+    checkType(checkIs<Func>, true, f2);
 
     var f2TypeName = inst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f2TypeName);
@@ -100,6 +102,7 @@
     var f3 = this.inst<int>;
     Expect.equals(42, f3(42));
     Expect.isTrue(f3 is Func);
+    checkType(checkIs<Func>, true, f3);
     var f3TypeName = this.inst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f3TypeName);
   }
diff --git a/LanguageFeatures/Constructor-tear-offs/summary_A03_t02.dart b/LanguageFeatures/Constructor-tear-offs/summary_A03_t02.dart
index 2bba30d..0a6ab33 100644
--- a/LanguageFeatures/Constructor-tear-offs/summary_A03_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/summary_A03_t02.dart
@@ -91,6 +91,7 @@
     var f1 = mstat<int>;
     Expect.equals(42, f1(42));
     Expect.isTrue(f1 is Func);
+    checkType(checkIs<Func>, true, f1);
 
     var f1TypeName = mstat<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f1TypeName);
@@ -98,6 +99,7 @@
     var f2 = minst<int>;
     Expect.equals(42, f2(42));
     Expect.isTrue(f2 is Func);
+    checkType(checkIs<Func>, true, f2);
 
     var f2TypeName = minst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f2TypeName);
@@ -105,6 +107,7 @@
     var f3 = this.minst<int>;
     Expect.equals(42, f3(42));
     Expect.isTrue(f3 is Func);
+    checkType(checkIs<Func>, true, f3);
     var f3TypeName = this.minst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f3TypeName);
   }
@@ -115,6 +118,7 @@
     var f4 = super.inst<int>; // works like (int $) => super.inst<int>($)
     Expect.equals(42, f4(42));
     Expect.isTrue(f4 is Func);
+    checkType(checkIs<Func>, true, f4);
 
     var f4TypeName = super.inst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f4TypeName);
diff --git a/LanguageFeatures/Constructor-tear-offs/summary_A03_t03.dart b/LanguageFeatures/Constructor-tear-offs/summary_A03_t03.dart
index 026ff15..c7f133e 100644
--- a/LanguageFeatures/Constructor-tear-offs/summary_A03_t03.dart
+++ b/LanguageFeatures/Constructor-tear-offs/summary_A03_t03.dart
@@ -91,6 +91,7 @@
     var f1 = estat<int>;
     Expect.equals(42, f1(42));
     Expect.isTrue(f1 is Func);
+    checkType(checkIs<Func>, true, f1);
 
     var f1TypeName = estat<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f1TypeName);
@@ -98,6 +99,7 @@
     var f2 = einst<int>;
     Expect.equals(42, f2(42));
     Expect.isTrue(f2 is Func);
+    checkType(checkIs<Func>, true, f2);
 
     var f2TypeName = einst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f2TypeName);
@@ -105,6 +107,7 @@
     var f3 = this.einst<int>;
     Expect.equals(42, f3(42));
     Expect.isTrue(f3 is Func);
+    checkType(checkIs<Func>, true, f3);
     var f3TypeName = this.einst<int>.runtimeType.toString();
     Expect.equals(Func.toString(), f3TypeName);
   }
@@ -116,4 +119,5 @@
   var f6 = c.einst<int>; // int Function(int), works like (int $) => Ext(c).einst<int>($);
   Expect.equals(42, f6(42));
   Expect.isTrue(f6 is Func);
+  checkType(checkIs<Func>, true, f6);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/summary_A03_t04.dart b/LanguageFeatures/Constructor-tear-offs/summary_A03_t04.dart
index f207f62..74e5c74 100644
--- a/LanguageFeatures/Constructor-tear-offs/summary_A03_t04.dart
+++ b/LanguageFeatures/Constructor-tear-offs/summary_A03_t04.dart
@@ -92,11 +92,15 @@
   var t1 = List<int>; // Type object for `List<int>`.
   Expect.isTrue(t1 is Type);
   Expect.isFalse(t1 is Function);
+  checkType(checkIs<Type>, true, t1);
+  checkType(checkIs<Function>, false, t1);
   Expect.isTrue(typeOf<List<int>>() == t1);
 
   var t2 = ListList<int>; // Type object for `List<List<int>>`.
   Expect.isTrue(t2 is Type);
   Expect.isFalse(t2 is Function);
+  checkType(checkIs<Type>, true, t2);
+  checkType(checkIs<Function>, false, t2);
   Expect.isTrue(typeOf<List<List<int>>>() == t2);
 
   // Instantiated function tear-offs.
@@ -104,12 +108,15 @@
 
   const f1 = top<int>; // int Function(int), works like (int $) => top<int>($);
   Expect.isTrue(f1 is Func);
+  checkType(checkIs<Func>, true, f1);
 
   const f2 = C.stat<int>; // int Function(int), works like (int $) => C.stat<int>($);
   Expect.isTrue(f2 is Func);
+  checkType(checkIs<Func>, true, f2);
 
   var f3 = local<int>; // int Function(int), works like (int $) => local<int>($);
   Expect.isTrue(f3 is Func);
+  checkType(checkIs<Func>, true, f3);
 
   var typeName = (List<int>).toString();
   Expect.equals("List<int>", typeName);
diff --git a/LanguageFeatures/Constructor-tear-offs/type_literal_static_type_A01_t01.dart b/LanguageFeatures/Constructor-tear-offs/type_literal_static_type_A01_t01.dart
index 3b458ee..3ff9f67 100644
--- a/LanguageFeatures/Constructor-tear-offs/type_literal_static_type_A01_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/type_literal_static_type_A01_t01.dart
@@ -15,5 +15,6 @@
 main() {
   var intList = List<int>;
   Expect.isTrue(intList is Type);
-  Expect.isFalse(intList is List<double>); // to check that intList is not dynamic
+  Expect.isFalse(intList is List<String>); // to check that intList is not dynamic
+  checkType(checkIs<List<String>>, false, intList);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t01.dart b/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t01.dart
index 1125c74..ee2fe74 100644
--- a/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t01.dart
@@ -36,4 +36,6 @@
 main() {
   Expect.isTrue(C.toString() is C);
   Expect.isTrue((C).toString() is String);
+    checkType(checkIs<C>, true, C.toString());
+    checkType(checkIs<String>, true, (C).toString());
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t02.dart b/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t02.dart
index b388e10..abd0d15 100644
--- a/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/type_object_member_ambiguity_A01_t02.dart
@@ -36,4 +36,6 @@
 main() {
   Expect.isTrue(C<int>.toString() is C);
   Expect.isTrue((C<int>).toString() is String);
+  checkType(checkIs<C>, true, C<int>.toString());
+  checkType(checkIs<String>, true, (C<int>).toString());
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart
index 66d8541..10d122a 100644
--- a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart
@@ -20,4 +20,5 @@
 
 main() {
   Expect.isTrue(C.new is C Function());
+  checkType(checkIs<C Function()>, true, C.new);
 }
\ No newline at end of file
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart
index 873b875..5c76d58 100644
--- a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart
@@ -25,4 +25,7 @@
   Expect.isTrue(C.new is C Function<X>(int i, X d));
   Expect.isTrue(C<int>.new is C<int> Function(int i, int d));
   Expect.isTrue(((C.new)<int>) is C<int> Function(int i, int d));
+  checkType(checkIs<C Function<X>(int i, X d)>, true, C.new);
+  checkType(checkIs<C<int> Function(int i, int d)>, true, C<int>.new);
+  checkType(checkIs<C<int> Function(int i, int d)>, true, ((C.new)<int>));
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A01_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A01_t01.dart
index f5faffe..a412687db 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A01_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A01_t01.dart
@@ -59,11 +59,13 @@
   }
   list1exp.add(2);
   Expect.isTrue(list1exp is List<int>);
+  checkType(checkIs<List<int>>, true, list1exp);
 
   var list1 = <int>[if (t) x else x + 10, if (!t) x else x + 10, 2];
   // list1exp [11, 1, 2]
   Expect.listEquals(list1exp, list1);
   Expect.isTrue(list1 is List<int>);
+  checkType(checkIs<List<int>>, true, list1);
 
   var list2exp = <int>[];
   if (t) {
@@ -82,6 +84,7 @@
   }
   list2exp.add(2);
   Expect.isTrue(list2exp is List<int>);
+  checkType(checkIs<List<int>>, true, list2exp);
 
   var list2 = <int>[
     if (t) x else if (!t) x else x + 10,
@@ -90,6 +93,7 @@
   // list2exp [1, 1, 2]
   Expect.listEquals(list2exp, list2);
   Expect.isTrue(list2 is List<int>);
+  checkType(checkIs<List<int>>, true, list2);
 
   var list3exp = <int>[];
   if (t) {
@@ -116,4 +120,5 @@
   // list3exp [11, 11, 2]
   Expect.listEquals(list3exp, list3);
   Expect.isTrue(list3 is List<int>);
+  checkType(checkIs<List<int>>, true, list3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A02_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A02_t01.dart
index 8d33a27..4478492 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A02_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A02_t01.dart
@@ -64,9 +64,11 @@
     list1exp.add(id + 1);
   }
   Expect.isTrue(list1exp is List<int>);
+  checkType(checkIs<List<int>>, true, list1exp);
 
   var list1 = <int>[for (var v in l1) v, for (var v in l2) v + 1];
   // list1exp [1, 2, 4, 5, 6]
   Expect.isTrue(list1 is List<int>);
+  checkType(checkIs<List<int>>, true, list1);
   Expect.listEquals(list1exp, list1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t01.dart
index b2c7079..4a2fca6 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t01.dart
@@ -64,5 +64,6 @@
 
   var list1 = [await for (var v in s1) v, await for (var v in s2) v];
   Expect.isTrue(list1 is List<Object?>);
+  checkType(checkIs<List<Object?>>, true, list1);
   Expect.listEquals(list1exp, list1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t02.dart
index 644cef7..5b5f5ff 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A03_t02.dart
@@ -64,5 +64,6 @@
 
   var list1 = <int>[await for (var v in s1) v, await for (var v in s2) v + 1];
   Expect.isTrue(list1 is List<int>);
+  checkType(checkIs<List<int>>, true, list1);
   Expect.listEquals(list1exp, list1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t01.dart
index bc06dd7..ef90fe7 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t01.dart
@@ -54,6 +54,7 @@
   var list1 = <int>[for (var i = 1; i < 10; i += 3) i];
   // list1exp [1, 4, 7]
   Expect.isTrue(list1 is List<int>);
+  checkType(checkIs<List<int>>, true, list1);
   Expect.listEquals(list1exp, list1);
 
   var list2exp = <double>[];
@@ -61,10 +62,12 @@
     list2exp.add(i + 2);
   }
   Expect.isTrue(list2exp is List<double>);
+  checkType(checkIs<List<double>>, true, list2exp);
 
   var list2 = <double>[for (var i = 1.1; i < 10; i += 5) i + 2];
   // list2exp [3.1, 8.1]
   Expect.isTrue(list2 is List<double>);
+  checkType(checkIs<List<double>>, true, list2);
   Expect.listEquals(list2exp, list2);
 
   var list3exp = <num>[];
@@ -75,11 +78,13 @@
     list3exp.add(i + 3);
   }
   Expect.isTrue(list3exp is List<num>);
+  checkType(checkIs<List<num>>, true, list3exp);
 
   var list3 = <num>[for (var i = 1.1; i < 10; i += 5) i + 2,
       for (var i = 2; i < 6; i++) i + 3];
   // list2exp [3.1, 8.1, 5, 6, 7, 8]
   Expect.isTrue(list3 is List<num>);
+  checkType(checkIs<List<num>>, true, list3);
   Expect.listEquals(list3exp, list3);
 
   var list4exp = <Function>[];
@@ -87,6 +92,7 @@
     list4exp.add(() => i);
   }
   Expect.isTrue(list4exp is List<Function>);
+  checkType(checkIs<List<Function>>, true, list4exp);
   var list4expRes = <int>[];
   for (var v in list4exp) {
     list4expRes.add(v());
@@ -95,6 +101,7 @@
   var list4 = <Function>[for (var i = 1; i < 4; i++) () => i];
   // list4exp [Closure: () => int, Closure: () => int, Closure: () => int]
   Expect.isTrue(list4 is List<Function>);
+  checkType(checkIs<List<Function>>, true, list4);
   var list4res = <int>[];
   for (var v in list4) {
     list4res.add(v());
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t02.dart
index 29836c8..6b3c1e4 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t02.dart
@@ -57,11 +57,13 @@
   }
   list1exp.add(i);
   Expect.isTrue(list1exp is List<num>);
+  checkType(checkIs<List<num>>, true, list1exp);
 
   i = 2;
   var list1 = <num>[for (; i < 10; i += 3) if (i.isOdd) i + 0.5 else i];
   list1.add(i);
   // list1exp [2, 5.5, 8, 11]
   Expect.isTrue(list1 is List<num>);
+  checkType(checkIs<List<num>>, true, list1);
   Expect.listEquals(list1exp, list1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A01_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A01_t01.dart
index d631b8f..e8a76dc 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A01_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A01_t01.dart
@@ -54,6 +54,7 @@
     map1exp[x + 10] = "11";
   }
   Expect.isTrue(map1exp is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map1exp);
 
   var map1 = <int, String>{
     if (t) x - 1: "0" else x + 10: "11",
@@ -62,6 +63,7 @@
   // map1exp {11: 11, 0: 0}
   Expect.mapEquals(map1exp, map1);
   Expect.isTrue(map1 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map1);
 
   var map2exp = <int, String>{};
   if (t) {
@@ -79,6 +81,7 @@
     map2exp[x + 10] = "11";
   }
   Expect.isTrue(map2exp is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map2exp);
 
   var map2 = <int, String>{
     if (t) x - 1: "0" else x + 10: "11",
@@ -87,6 +90,7 @@
   // map2exp {11: 11, 12: 12}
   Expect.mapEquals(map2exp, map2);
   Expect.isTrue(map2 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map2);
 
   var map3exp = <int, String>{};
   if (t) {
@@ -104,6 +108,7 @@
     map3exp[x + 10] = "11";
   }
   Expect.isTrue(map3exp is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map3exp);
 
   var map3 = <int, String>{
     if (t) x - 1: "0" else if (!t) x + 1: "2" else x + 10: "11",
@@ -112,4 +117,5 @@
   // map3exp {2: 2, 0: 0}
   Expect.mapEquals(map3exp, map3);
   Expect.isTrue(map3 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t01.dart
index c54c7dc..5e0ea2c 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t01.dart
@@ -60,6 +60,7 @@
     map1exp[id] = id + 20;
   }
   Expect.isTrue(map1exp is Map<int, int>);
+  checkType(checkIs<Map<int, int>>, true, map1exp);
 
   var map1 = <int, int>{
     for (var v in list2) v: v + 10,
@@ -67,5 +68,6 @@
   };
   // map1exp {3: 13, 4: 14, 5: 15, 1: 21, 2: 22}
   Expect.isTrue(map1 is Map<int, int>);
+  checkType(checkIs<Map<int, int>>, true, map1);
   Expect.mapEquals(map1exp, map1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t02.dart
index 45975df..09d4aeb 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A02_t02.dart
@@ -55,9 +55,11 @@
     map1exp[id.key] = id.value;
   }
   Expect.isTrue(map1exp is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map1exp);
 
   var map1 = <int, String>{for (var v in m2) v.key: v.value};
   // map1exp {1: a, 2: b, 3: c, 4: d, 5: e}
   Expect.isTrue(map1 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map1);
   Expect.mapEquals(map1exp, map1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t01.dart
index fad5788..faed764 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t01.dart
@@ -63,5 +63,6 @@
   var map1 = {await for (var v in s1) v.key: v.value,
       await for (var v in s2) v.key: v.value};
   Expect.isTrue(map1 is Map<Object?, Object?>);
+  checkType(checkIs<Map<Object?, Object?>>, true, map1);
   Expect.mapEquals(map1exp, map1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t02.dart
index d371664..57027c4 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A03_t02.dart
@@ -64,5 +64,6 @@
   var map1 = <int, String>{await for (var v in s1) v.key: v.value,
       await for (var v in s2) v.key: v.value + 'n'};
   Expect.isTrue(map1 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map1);
   Expect.mapEquals(map1exp, map1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t01.dart
index fcab1d0..17f1877 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t01.dart
@@ -47,9 +47,11 @@
     map1exp[i] = i + 1;
   }
   Expect.isTrue(map1exp is Map<int, int>);
+  checkType(checkIs<Map<int, int>>, true, map1exp);
 
   var map1 = <int, int>{for (var i = 1; i < 10; i += 3) i: i + 1};
   Expect.isTrue(map1 is Map<int, int>);
+  checkType(checkIs<Map<int, int>>, true, map1);
   Expect.mapEquals(map1exp, map1);
 
   var map2exp = <int, double>{};
@@ -57,9 +59,11 @@
     map2exp[i] = i + .5;
   }
   Expect.isTrue(map2exp is Map<int, double>);
+  checkType(checkIs<Map<int, double>>, true, map2exp);
 
   var map2 = <int, double>{for (var i = 1; i < 10; i += 5) i: i + .5};
   Expect.isTrue(map2 is Map<int, double>);
+  checkType(checkIs<Map<int, double>>, true, map2);
   Expect.mapEquals(map2exp, map2);
 
   var map3exp = <double, int>{};
@@ -67,9 +71,11 @@
     map3exp[i + 1.5] = i;
   }
   Expect.isTrue(map3exp is Map<double, int>);
+  checkType(checkIs<Map<double, int>>, true, map3exp);
 
   var map3 = <double,int>{for (var i = 1; i < 10; i += 5) i + 1.5: i};
   Expect.isTrue(map3 is Map<double, int>);
+  checkType(checkIs<Map<double, int>>, true, map3);
   Expect.mapEquals(map3exp, map3);
 
   var map4exp = <num, num>{};
@@ -80,10 +86,12 @@
     map4exp[i] = i + 3;
   }
   Expect.isTrue(map4exp is Map<num, num>);
+  checkType(checkIs<Map<num, num>>, true, map4exp);
 
   var map4 = <num, num>{for (var i = 1.1; i < 10; i += 5) i: i + 2,
       for (var i = 2; i < 6; i++) i: i + 3};
   Expect.isTrue(map4 is Map<num, num>);
+  checkType(checkIs<Map<num, num>>, true, map4);
   Expect.mapEquals(map4exp, map4);
 
   var map5exp = <int, Function>{};
@@ -94,5 +102,6 @@
   }
   var map5 = <int, Function>{for (var i = 1; i < 4; i++) i: fs[i - 1]};
   Expect.isTrue(map5 is Map<int, Function>);
+  checkType(checkIs<Map<int, Function>>, true, map5);
   Expect.mapEquals(map5exp, map5);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t02.dart
index bca35ca..76ca6b7 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t02.dart
@@ -54,6 +54,7 @@
   }
   map1exp[i] = i;
   Expect.isTrue(map1exp is Map<int, num>);
+  checkType(checkIs<Map<int, num>>, true, map1exp);
 
   i = 0;
   var map1 = <int, num>{
@@ -62,5 +63,6 @@
   // map1exp {0: 1, 3: 4.5, 6: 7, 9: 10.5, 12: 12}
   map1[i] = i;
   Expect.isTrue(map1 is Map<int, num>);
+  checkType(checkIs<Map<int, num>>, true, map1);
   Expect.mapEquals(map1exp, map1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A01_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A01_t01.dart
index 3df0cc6..10955a8 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A01_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A01_t01.dart
@@ -53,11 +53,13 @@
   }
   set1exp.add(-1);
   Expect.isTrue(set1exp is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1exp);
 
   var set1 = <int>{if (t) x else x + 10, if (!t) x + 1 else x + 11, -1};
   // set1exp {11, 2, -1}
   Expect.setEquals(set1exp, set1);
   Expect.isTrue(set1 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1);
 
   var set2exp = new Set<int>();
   if (t) {
@@ -76,6 +78,7 @@
   }
   set2exp.add(-1);
   Expect.isTrue(set2exp is Set<int>);
+  checkType(checkIs<Set<int>>, true, set2exp);
 
   var set2 = <int>{
     if (t) x else if (!t) x else x + 10,
@@ -84,6 +87,7 @@
   // set2exp {1, 2, -1}
   Expect.setEquals(set2exp, set2);
   Expect.isTrue(set2 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set2);
 
   var set3exp = new Set<int>();
   if (t) {
@@ -102,6 +106,7 @@
   }
   set3exp.add(-1);
   Expect.isTrue(set3exp is Set<int>);
+  checkType(checkIs<Set<int>>, true, set3exp);
 
   var set3 = {
     if (t) x else x + 10,
@@ -110,4 +115,5 @@
   // set3exp {11, 12, -1}
   Expect.setEquals(set3exp, set3);
   Expect.isTrue(set3 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A02_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A02_t01.dart
index e7d6516..da8bd70 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A02_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A02_t01.dart
@@ -60,9 +60,11 @@
     }
   }
   Expect.isTrue(set1exp is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1exp);
 
   var set1 = <int>{for (var v in l1) v, for (var v in l2) if (v.isOdd) (v + 1)};
   // set1exp {1, 2, 4, 6}
   Expect.setEquals(set1exp, set1);
   Expect.isTrue(set1 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t01.dart
index b112f86..6aab448 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t01.dart
@@ -58,5 +58,6 @@
 
   var set1 = {await for (var v in s1) v, await for (var v in s2) v};
   Expect.isTrue(set1 is Set<Object?>);
+  checkType(checkIs<Set<Object?>>, true, set1);
   Expect.setEquals(set1exp, set1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t02.dart
index 3c1abae..034b220 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A03_t02.dart
@@ -59,5 +59,6 @@
   var set1 = <int>{await for (var v in s1) v,
       await for (var v in s2) if (v.isOdd) (v + 1)};
   Expect.isTrue(set1 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1);
   Expect.setEquals(set1exp, set1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t01.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t01.dart
index e5ef3f0..ae57854 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t01.dart
@@ -45,9 +45,11 @@
     set1exp.add(i);
   }
   Expect.isTrue(set1exp is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1exp);
 
   var set1 = <int>{for (var i = 1; i < 10; i += 3) i};
   Expect.isTrue(set1 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1);
   Expect.setEquals(set1exp, set1);
 
   var set2exp = new Set<double>();
@@ -55,9 +57,11 @@
     set2exp.add(i + 2);
   }
   Expect.isTrue(set2exp is Set<double>);
+  checkType(checkIs<Set<double>>, true, set2exp);
 
   var set2 = <double>{for (var i = 1.1; i < 10; i += 5) i + 2};
   Expect.isTrue(set2 is Set<double>);
+  checkType(checkIs<Set<double>>, true, set2);
   Expect.setEquals(set2exp, set2);
 
   var set3exp = new Set<num>();
@@ -68,10 +72,12 @@
     set3exp.add(i + 3);
   }
   Expect.isTrue(set3exp is Set<num>);
+  checkType(checkIs<Set<num>>, true, set3exp);
 
   var set3 = <num>{for (var i = 1.1; i < 10; i += 5) i + 2,
       for (var i = 2; i < 6; i++) i + 3};
   Expect.isTrue(set3 is Set<num>);
+  checkType(checkIs<Set<num>>, true, set3);
   Expect.setEquals(set3exp, set3);
 
   var set4exp = new Set<Function>();
@@ -83,5 +89,6 @@
 
   var set4 = <Function>{for (var i = 1; i < 4; i++) fs[i - 1]};
   Expect.isTrue(set4 is Set<Function>);
+  checkType(checkIs<Set<Function>>, true, set4);
   Expect.setEquals(set4exp, set4);
 }
diff --git a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t02.dart b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t02.dart
index 1de994c..1cfecd9 100644
--- a/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t02.dart
@@ -51,10 +51,12 @@
     }
   }
   Expect.isTrue(set1exp is Set<num>);
+  checkType(checkIs<Set<num>>, true, set1exp);
 
   i = 0;
   var set1 = <num>{for (; i < 10; i += 3) if (i.isOdd) i + 0.5 else i};
   // set1exp {0, 3.5, 6, 9.5, 12}
   Expect.isTrue(set1 is Set<num>);
+  checkType(checkIs<Set<num>>, true, set1);
   Expect.setEquals(set1exp, set1);
 }
diff --git a/LanguageFeatures/Control-flow-collections/static_semantics_A01_t01.dart b/LanguageFeatures/Control-flow-collections/static_semantics_A01_t01.dart
index ed01422..84da89c 100644
--- a/LanguageFeatures/Control-flow-collections/static_semantics_A01_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/static_semantics_A01_t01.dart
@@ -24,6 +24,7 @@
     for (int i = 5; i < 10; i++) i
   ];
   Expect.isTrue(list1 is List<int>);
+  checkType(checkIs<List<int>>, true, list1);
 
   var list2 = <int>[
     if (b) 1,
@@ -32,29 +33,36 @@
     for (int i = 5; i < 10; i++) i
   ];
   Expect.isTrue(list2 is List<int>);
+  checkType(checkIs<List<int>>, true, list2);
 
   var list3 = [
-    if (b) 1.0,
+    if (b) 1.1,
     if (!b) 2,
     if (b) for (var v in collection) if (v.isOdd) v,
     for (int i = 5; i < 10; i++) i
   ];
   Expect.isTrue(list3 is List<num>);
   Expect.isFalse(list3 is List<int>);
+  checkType(checkIs<List<num>>, true, list3);
+  checkType(checkIs<List<int>>, false, list3);
 
   const list4 = [
-    if (2 > 1) 1.0,
+    if (2 > 1) 1.1,
     if (1 > 2) 2,
     3
   ];
   Expect.isTrue(list4 is List<num>);
   Expect.isFalse(list4 is List<int>);
+  checkType(checkIs<List<num>>, true, list4);
+  checkType(checkIs<List<int>>, false, list4);
 
   var list5 = const [
-    if (2 > 1) 1.0,
+    if (2 > 1) 1.1,
     if (1 > 2) "2",
     3
   ];
   Expect.isTrue(list5 is List<Object>);
   Expect.isFalse(list5 is List<num>);
+  checkType(checkIs<List<Object>>, true, list5);
+  checkType(checkIs<List<num>>, false, list5);
 }
diff --git a/LanguageFeatures/Control-flow-collections/static_semantics_A01_t02.dart b/LanguageFeatures/Control-flow-collections/static_semantics_A01_t02.dart
index efff64a..46c46be 100644
--- a/LanguageFeatures/Control-flow-collections/static_semantics_A01_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/static_semantics_A01_t02.dart
@@ -14,13 +14,13 @@
 
 main() {
   bool b = true;
-  var collection = <double>[3, 1.0, 4, 1, 5];
+  var collection = <double>[3, 1.1, 4, 1, 5];
 
-  List<int> list1 = [if (b) 1.0];
+  List<int> list1 = [if (b) 1.1];
   //                        ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
-  List<int> list2 = [if (!b) 1.0,];
+  List<int> list2 = [if (!b) 1.1,];
   //                         ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -33,11 +33,11 @@
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
 
-  List lis5t = <int>[if (b) 1.0];
+  List lis5t = <int>[if (b) 1.1];
   //                        ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
-  List list6 = <int>[if (!b) 1.0,];
+  List list6 = <int>[if (!b) 1.1,];
   //                         ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -50,20 +50,20 @@
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
 
-  const list9 = <int>[if (1 > 2) 1.0];
+  const list9 = <int>[if (1 > 2) 1.1];
   //                             ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
-  const list10 = <int>[if (2 > 1) 1.0,];
+  const list10 = <int>[if (2 > 1) 1.1,];
   //                              ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
 
-  var list11 = const <int>[if (1 > 2) 1.0];
+  var list11 = const <int>[if (1 > 2) 1.1];
   //                                  ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
-  var list12 = const <int>[if (2 > 1) 1.0,];
+  var list12 = const <int>[if (2 > 1) 1.1,];
   //                                  ^^^
   // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
diff --git a/LanguageFeatures/Control-flow-collections/static_semantics_A02_t01.dart b/LanguageFeatures/Control-flow-collections/static_semantics_A02_t01.dart
index c126587..ae9668f 100644
--- a/LanguageFeatures/Control-flow-collections/static_semantics_A02_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/static_semantics_A02_t01.dart
@@ -24,6 +24,7 @@
     for (int i = 5; i < 10; i++) "$i": i
   };
   Expect.isTrue(map1 is Map<String, int>);
+  checkType(checkIs<Map<String, int>>, true, map1);
 
   var map2 = <String, int>{
     if (b) "1": 1,
@@ -32,15 +33,18 @@
     for (int i = 5; i < 10; i++) "$i": i
   };
   Expect.isTrue(map2 is Map<String, int>);
+  checkType(checkIs<Map<String, int>>, true, map2);
 
   var map3 = {
-    if (b) "1": 1.0,
+    if (b) "1": 1.1,
     if (!b) "": 2,
     if (b) for (var v in collection) if (v.isOdd) "$v": v,
     for (int i = 5; i < 10; i++) "$i": i
   };
   Expect.isTrue(map3 is Map<String, num>);
   Expect.isFalse(map3 is Map<String, int>);
+  checkType(checkIs<Map<String, num>>, true, map3);
+  checkType(checkIs<Map<String, int>>, false, map3);
 
   const map4 = {
     if (2 > 1) "1": 1.0,
@@ -49,6 +53,8 @@
   };
   Expect.isTrue(map4 is Map<String, num>);
   Expect.isFalse(map4 is Map<String, int>);
+  checkType(checkIs<Map<String, num>>, true, map4);
+  checkType(checkIs<Map<String, int>>, false, map4);
 
   var map5 = const {
     if (2 > 1) 1: "1",
@@ -56,4 +62,5 @@
     3: "3"
   };
   Expect.isTrue(map5 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map5);
 }
diff --git a/LanguageFeatures/Control-flow-collections/static_semantics_A02_t02.dart b/LanguageFeatures/Control-flow-collections/static_semantics_A02_t02.dart
index 44c3fe4..3965426 100644
--- a/LanguageFeatures/Control-flow-collections/static_semantics_A02_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/static_semantics_A02_t02.dart
@@ -16,7 +16,7 @@
   bool b = true;
   var collection = [3, 1, 4, 1, 5];
 
-  Map<String, int> map1 = {if (b) "1": 1.0};
+  Map<String, int> map1 = {if (b) "1": 1.1};
   //                                   ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -24,7 +24,7 @@
   //                              ^
   // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
-  Map<String, int> map3 = {if (!b) "1": 1.0,};
+  Map<String, int> map3 = {if (!b) "1": 1.1,};
   //                                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -51,7 +51,7 @@
   // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
 
-  Map map9  = <String, int>{if (b) "1": 1.0};
+  Map map9  = <String, int>{if (b) "1": 1.1};
   //                                    ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -59,7 +59,7 @@
   //                               ^
   // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
-  Map map11 = <String, int>{if (!b) "1": 1.0,};
+  Map map11 = <String, int>{if (!b) "1": 1.1,};
   //                                     ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -86,11 +86,11 @@
   // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
 
-  const map17 = <String, int>{if (1 > 2) "1": 1.0};
+  const map17 = <String, int>{if (1 > 2) "1": 1.1};
   //                                          ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
-  const map18 = <String, int>{if (2 > 1) "1": 1.0,};
+  const map18 = <String, int>{if (2 > 1) "1": 1.1,};
   //                                          ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
@@ -103,11 +103,11 @@
   // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
 
-  var map21 = const <String, int>{if (1 > 2) "1": 1.0};
+  var map21 = const <String, int>{if (1 > 2) "1": 1.1};
   //                                              ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
-  var map22 = const <String, int>{if (2 > 1) "1": 1.0,};
+  var map22 = const <String, int>{if (2 > 1) "1": 1.1,};
   //                                              ^^^
   // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
   // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A01_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A01_t01.dart
index 7aaec92..a72fb37 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A01_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A01_t01.dart
@@ -21,6 +21,7 @@
     for (var i = 0; i < 1; i++) []
   ];
   Expect.isTrue(list1 is List<List<String>>);
+  checkType(checkIs<List<List<String>>>, true, list1);
   Expect.listEquals([[], [], []], list1);
 
   var list2 = <List<int>> [
@@ -29,6 +30,7 @@
     for (var i = 0; i < 1; i++) []
   ];
   Expect.isTrue(list2 is List<List<int>>);
+  checkType(checkIs<List<List<int>>>, true, list2);
   Expect.listEquals([[], [], []], list2);
 
   var list3 = const <List<String>> [
@@ -36,6 +38,7 @@
     if (false) [] else [],
   ];
   Expect.isTrue(list3 is List<List<String>>);
+  checkType(checkIs<List<List<String>>>, true, list3);
   Expect.listEquals([[], []], list3);
 
   const list4 = <List<C>> [
@@ -43,5 +46,6 @@
     if (false) [] else []
   ];
   Expect.isTrue(list4 is List<List<C>>);
+  checkType(checkIs<List<List<C>>>, true, list4);
   Expect.listEquals([[], []], list4);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A02_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A02_t01.dart
index d29fc5a..cc8f670 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A02_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A02_t01.dart
@@ -21,12 +21,14 @@
     if (i > 0) "",
   ];
   Expect.isTrue(list1 is List<String>);
+  checkType(checkIs<List<String>>, true, list1);
 
   var list2 = [
     "",
     if (i < 0) 1,
   ];
   Expect.isTrue(list2 is List<Object>);
+  checkType(checkIs<List<Object>>, true, list2);
 
   var list3 = [
     new C(),
@@ -34,4 +36,5 @@
     if (i < 0) new A()
   ];
   Expect.isTrue(list3 is List<A>);
+  checkType(checkIs<List<A>>, true, list3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A03_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A03_t01.dart
index 125cdcd..6b27206 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A03_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A03_t01.dart
@@ -23,12 +23,14 @@
     if (i > 0) new B() else new A()
   ];
   Expect.isTrue(list1 is List<A>);
+  checkType(checkIs<List<A>>, true, list1);
 
   var list2 = [
     "",
     if (i < 0) "" else 1,
   ];
   Expect.isTrue(list2 is List<Object>);
+  checkType(checkIs<List<Object>>, true, list2);
 
   var list3 = [
     1,
@@ -36,4 +38,5 @@
     if (i < 0) 2
   ];
   Expect.isTrue(list3 is List<num>);
+  checkType(checkIs<List<num>>, true, list3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A04_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A04_t01.dart
index 5695c3f..7db6650 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A04_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A04_t01.dart
@@ -23,16 +23,19 @@
       new B()
   ];
   Expect.isTrue(list1 is List<B>);
+  checkType(checkIs<List<B>>, true, list1);
 
   var list2 = [
     "",
     for (int i = 0; i < 2; i++)  1,
   ];
   Expect.isTrue(list2 is List<Object>);
+  checkType(checkIs<List<Object>>, true, list2);
 
   var list3 = [
     1,
     for (var i in []) 3.14
   ];
   Expect.isTrue(list3 is List<num>);
+  checkType(checkIs<List<num>>, true, list3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A05_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A05_t01.dart
index dc765d7..6091ab5 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A05_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A05_t01.dart
@@ -20,6 +20,7 @@
     for (var i = 0; i < 1; i++) i: []
   };
   Expect.isTrue(map1 is Map<num, List<int>>);
+  checkType(checkIs<Map<num, List<int>>>, true, map1);
   Expect.isFalse(map1 is Map<int, List<int>>);
   Expect.mapEquals({11: [], 22: [], 0: []}, map1);
 
@@ -29,6 +30,7 @@
     for (var i = 0; i < 1; i++) i: []
   };
   Expect.isTrue(map2 is Map<num, List<int>>);
+  checkType(checkIs<Map<num, List<int>>>, true, map2);
   Expect.isFalse(map2 is Map<int, List<int>>);
   Expect.mapEquals({11: [], 22: [], 0: []}, map2);
 
@@ -37,6 +39,7 @@
     if (false) 2: [] else 3: [],
   };
   Expect.isTrue(map3 is Map<num, List<int>>);
+  checkType(checkIs<Map<num, List<int>>>, true, map3);
   Expect.isFalse(map2 is Map<int, List<int>>);
   Expect.mapEquals({1: [], 3: []}, map3);
 
@@ -45,6 +48,7 @@
     if (false) 2: [] else 3: [],
   };
   Expect.isTrue(map4 is Map<num, List<int>>);
+  checkType(checkIs<Map<num, List<int>>>, true, map4);
   Expect.isFalse(map4 is Map<int, List<int>>);
   Expect.mapEquals({1: [], 3: []}, map4);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A06_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A06_t01.dart
index ab66c95..a67d2c1 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A06_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A06_t01.dart
@@ -22,12 +22,14 @@
     if (i > 0) "": i,
   };
   Expect.isTrue(map1 is Map<String, int>);
+  checkType(checkIs<Map<String, int>>, true, map1);
 
   var map2 = {
     "": "",
     if (i < 0) "": 1,
   };
   Expect.isTrue(map2 is Map<String, Object>);
+  checkType(checkIs<Map<String, Object>>, true, map2);
 
   var map3 = {
     new C(): new C(),
@@ -35,4 +37,5 @@
     if (i < 0) new B(): new A()
   };
   Expect.isTrue(map3 is Map<B, A>);
+  checkType(checkIs<Map<B, A>>, true, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A06_t02.dart b/LanguageFeatures/Control-flow-collections/type_inference_A06_t02.dart
index db1055a..b011a18 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A06_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A06_t02.dart
@@ -19,6 +19,7 @@
     if (i > 0) ...?x,
   };
   Expect.isTrue(map1 is Map<int, String>);
+  checkType(checkIs<Map<int, String>>, true, map1);
 
   var map2 = {
     "": "",
@@ -27,4 +28,7 @@
   Expect.isTrue(map2 is Map<Object, String>);
   Expect.isFalse(map2 is Map<String, String>);
   Expect.isFalse(map2 is Map<num, String>);
+  checkType(checkIs<Map<Object, String>>, true, map2);
+  checkType(checkIs<Map<String, String>>, false, map2);
+  checkType(checkIs<Map<num, String>>, false, map2);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A07_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A07_t01.dart
index 6faa2d8..a6d0abe 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A07_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A07_t01.dart
@@ -24,12 +24,14 @@
     if (i > 0) new B(): new B() else new B(): new A()
   };
   Expect.isTrue(map1 is Map<B, A>);
+  checkType(checkIs<Map<B, A>>, true, map1);
 
   var map2 = {
     "": "",
     if (i < 0) "": "" else "": 1,
   };
   Expect.isTrue(map2 is Map<String, Object>);
+  checkType(checkIs<Map<String, Object>>, true, map2);
 
   var map3 = {
     1: 1,
@@ -37,4 +39,5 @@
     if (i < 0) 2: 2
   };
   Expect.isTrue(map3 is Map<num, int>);
+  checkType(checkIs<Map<num, int>>, true, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A08_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A08_t01.dart
index 9227486..aadf9ce 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A08_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A08_t01.dart
@@ -23,16 +23,19 @@
       new B(): A()
   };
   Expect.isTrue(map1 is Map<B, A>);
+  checkType(checkIs<Map<B, A>>, true, map1);
 
   var map2 = {
     "": "",
     for (int i = 0; i < 2; i++)  "": 1,
   };
   Expect.isTrue(map2 is Map<String, Object>);
+  checkType(checkIs<Map<String, Object>>, true, map2);
 
   var map3 = {
     1: 1,
     for (var i in []) 3.14: 1
   };
   Expect.isTrue(map3 is Map<num, int>);
+  checkType(checkIs<Map<num, int>>, true, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A09_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A09_t01.dart
index 82b1c09..9173afb 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A09_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A09_t01.dart
@@ -26,6 +26,7 @@
     if (i > 0) "",
   };
   Expect.isTrue(set1 is Set<String>);
+  checkType(checkIs<Set<String>>, true, set1);
 
   var set2 = {
     "",
@@ -34,6 +35,9 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<String>);
   Expect.isFalse(set2 is Set<num>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<String>>, false, set2);
+  checkType(checkIs<Set<num>>, false, set2);
 
   var set3 = {
     new C(),
@@ -42,4 +46,6 @@
   };
   Expect.isTrue(set3 is Set<A>);
   Expect.isFalse(set3 is Set<B>);
+  checkType(checkIs<Set<A>>, true, set3);
+  checkType(checkIs<Set<B>>, false, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A09_t02.dart b/LanguageFeatures/Control-flow-collections/type_inference_A09_t02.dart
index fe60bbf..49e5dad 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A09_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A09_t02.dart
@@ -23,6 +23,7 @@
     if (i > 0) ...?x,
   };
   Expect.isTrue(set1 is Set<int>);
+  checkType(checkIs<Set<int>>, true, set1);
 
   var set2 = {
     "",
@@ -31,4 +32,7 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<String>);
   Expect.isFalse(set2 is Set<num>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<String>>, false, set2);
+  checkType(checkIs<Set<num>>, false, set2);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A10_t02.dart b/LanguageFeatures/Control-flow-collections/type_inference_A10_t02.dart
index 1f29062..8605f69 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A10_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A10_t02.dart
@@ -28,6 +28,9 @@
   Expect.isTrue(set1 is Set<num>);
   Expect.isFalse(set1 is Set<int>);
   Expect.isFalse(set1 is Set<double>);
+  checkType(checkIs<Set<Object>>, true, set1);
+  checkType(checkIs<Set<int>>, false, set1);
+  checkType(checkIs<Set<double>>, false, set1);
 
   var set2 = {
     "",
@@ -36,6 +39,9 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<String>);
   Expect.isFalse(set2 is Set<num>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<String>>, false, set2);
+  checkType(checkIs<Set<double>>, false, set2);
 
   var set3 = {
     new C(),
@@ -43,4 +49,6 @@
   };
   Expect.isTrue(set3 is Set<A>);
   Expect.isFalse(set3 is Set<B>);
+  checkType(checkIs<Set<A>>, true, set3);
+  checkType(checkIs<Set<B>>, false, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A10_t03.dart b/LanguageFeatures/Control-flow-collections/type_inference_A10_t03.dart
index 608f6a9..71d74b9 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A10_t03.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A10_t03.dart
@@ -26,6 +26,9 @@
   Expect.isTrue(set1 is Set<num>);
   Expect.isFalse(set1 is Set<double>);
   Expect.isFalse(set1 is Set<int>);
+  checkType(checkIs<Set<num>>, true, set1);
+  checkType(checkIs<Set<int>>, false, set1);
+  checkType(checkIs<Set<double>>, false, set1);
 
   var set2 = {
     "",
@@ -34,4 +37,7 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<String>);
   Expect.isFalse(set2 is Set<num>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<String>>, false, set2);
+  checkType(checkIs<Set<num>>, false, set2);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A11_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A11_t01.dart
index ccf04d3..4dfb80b 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A11_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A11_t01.dart
@@ -33,6 +33,11 @@
   Expect.isFalse(map1 is Map<double, num>);
   Expect.isFalse(map1 is Map<num, int>);
   Expect.isFalse(map1 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map1);
+  checkType(checkIs<Map<int, num>>, false, map1);
+  checkType(checkIs<Map<double, num>>, false, map1);
+  checkType(checkIs<Map<num, int>>, false, map1);
+  checkType(checkIs<Map<num, double>>, false, map1);
 
   var map2 = {
     "": "",
@@ -43,6 +48,11 @@
   Expect.isFalse(map2 is Map<Object, String>);
   Expect.isFalse(map2 is Map<String, Object>);
   Expect.isFalse(map2 is Map<num, Object>);
+  checkType(checkIs<Map<Object, Object>>, true, map2);
+  checkType(checkIs<Map<Object, num>>, false, map2);
+  checkType(checkIs<Map<Object, String>>, false, map2);
+  checkType(checkIs<Map<String, Object>>, false, map2);
+  checkType(checkIs<Map<num, Object>>, false, map2);
 
   var map3 = {
     new C(): new B(),
@@ -51,4 +61,7 @@
   Expect.isTrue(map3 is Map<A, B>);
   Expect.isFalse(map3 is Map<B, B>);
   Expect.isFalse(map3 is Map<A, C>);
+  checkType(checkIs<Map<A, B>>, true, map3);
+  checkType(checkIs<Map<B, B>>, false, map3);
+  checkType(checkIs<Map<A, C>>, false, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A11_t02.dart b/LanguageFeatures/Control-flow-collections/type_inference_A11_t02.dart
index acbd944..424c500 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A11_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A11_t02.dart
@@ -31,6 +31,11 @@
   Expect.isFalse(map1 is Map<double, num>);
   Expect.isFalse(map1 is Map<num, int>);
   Expect.isFalse(map1 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map1);
+  checkType(checkIs<Map<int, num>>, false, map1);
+  checkType(checkIs<Map<double, num>>, false, map1);
+  checkType(checkIs<Map<num, int>>, false, map1);
+  checkType(checkIs<Map<num, double>>, false, map1);
 
   var map2 = {
     "": 1,
@@ -41,4 +46,9 @@
   Expect.isFalse(map2 is Map<Object, double>);
   Expect.isFalse(map2 is Map<String, Object>);
   Expect.isFalse(map2 is Map<num, Object>);
+  checkType(checkIs<Map<Object, num>>, true, map2);
+  checkType(checkIs<Map<Object, int>>, false, map2);
+  checkType(checkIs<Map<Object, double>>, false, map2);
+  checkType(checkIs<Map<String, Object>>, false, map2);
+  checkType(checkIs<Map<num, Object>>, false, map2);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A12_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A12_t01.dart
index 2af7580..649ee45 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A12_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A12_t01.dart
@@ -29,6 +29,9 @@
   Expect.isTrue(set1 is Set<num>);
   Expect.isFalse(set1 is Set<int>);
   Expect.isFalse(set1 is Set<double>);
+  checkType(checkIs<Set<num>>, true, set1);
+  checkType(checkIs<Set<int>>, false, set1);
+  checkType(checkIs<Set<double>>, false, set1);
 
   var set2 = {
     "",
@@ -38,6 +41,9 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<int>);
   Expect.isFalse(set2 is Set<double>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<int>>, false, set2);
+  checkType(checkIs<Set<double>>, false, set2);
 
   var set3 = {
     new C(),
@@ -45,4 +51,6 @@
   };
   Expect.isTrue(set3 is Set<B>);
   Expect.isFalse(set3 is Set<C>);
+  checkType(checkIs<Set<B>>, true, set3);
+  checkType(checkIs<Set<C>>, false, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A12_t02.dart b/LanguageFeatures/Control-flow-collections/type_inference_A12_t02.dart
index fe644a1..79a7cfd 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A12_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A12_t02.dart
@@ -30,6 +30,9 @@
   Expect.isTrue(set1 is Set<num>);
   Expect.isFalse(set1 is Set<int>);
   Expect.isFalse(set1 is Set<double>);
+  checkType(checkIs<Set<num>>, true, set1);
+  checkType(checkIs<Set<int>>, false, set1);
+  checkType(checkIs<Set<double>>, false, set1);
 
   var set2 = {
     "",
@@ -39,6 +42,9 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<int>);
   Expect.isFalse(set2 is Set<double>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<int>>, false, set2);
+  checkType(checkIs<Set<double>>, false, set2);
 
   var set3 = {
     new C(),
@@ -46,4 +52,6 @@
   };
   Expect.isTrue(set3 is Set<B>);
   Expect.isFalse(set3 is Set<C>);
+  checkType(checkIs<Set<B>>, true, set3);
+  checkType(checkIs<Set<C>>, false, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A12_t03.dart b/LanguageFeatures/Control-flow-collections/type_inference_A12_t03.dart
index 7b59d0e..822c732 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A12_t03.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A12_t03.dart
@@ -27,6 +27,9 @@
   Expect.isTrue(set1 is Set<num>);
   Expect.isFalse(set1 is Set<int>);
   Expect.isFalse(set1 is Set<double>);
+  checkType(checkIs<Set<num>>, true, set1);
+  checkType(checkIs<Set<int>>, false, set1);
+  checkType(checkIs<Set<double>>, false, set1);
 
   var set2 = {
     "",
@@ -36,6 +39,9 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<int>);
   Expect.isFalse(set2 is Set<double>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<int>>, false, set2);
+  checkType(checkIs<Set<double>>, false, set2);
 
   c1 = null;
   c2 = null;
@@ -43,7 +49,10 @@
     for (var i = 1; i < 5; i++)
       if (i.isEven) ...?c1 else ...?c2
   };
-  Expect.isTrue(set1 is Set<num>);
-  Expect.isFalse(set1 is Set<int>);
-  Expect.isFalse(set1 is Set<double>);
+  Expect.isTrue(set3 is Set<num>);
+  Expect.isFalse(set3 is Set<int>);
+  Expect.isFalse(set3 is Set<double>);
+  checkType(checkIs<Set<num>>, true, set3);
+  checkType(checkIs<Set<int>>, false, set3);
+  checkType(checkIs<Set<double>>, false, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A12_t04.dart b/LanguageFeatures/Control-flow-collections/type_inference_A12_t04.dart
index 6210f4f..ff48cc9 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A12_t04.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A12_t04.dart
@@ -28,6 +28,9 @@
   Expect.isTrue(set1 is Set<num>);
   Expect.isFalse(set1 is Set<int>);
   Expect.isFalse(set1 is Set<double>);
+  checkType(checkIs<Set<num>>, true, set1);
+  checkType(checkIs<Set<int>>, false, set1);
+  checkType(checkIs<Set<double>>, false, set1);
 
   var set2 = {
     "",
@@ -37,6 +40,9 @@
   Expect.isTrue(set2 is Set<Object>);
   Expect.isFalse(set2 is Set<int>);
   Expect.isFalse(set2 is Set<double>);
+  checkType(checkIs<Set<Object>>, true, set2);
+  checkType(checkIs<Set<int>>, false, set2);
+  checkType(checkIs<Set<double>>, false, set2);
 
   c1 = null;
   c2 = null;
@@ -44,7 +50,10 @@
     for (var i in collection)
       if (i.isEven) ...?c1 else ...?c2
   };
-  Expect.isTrue(set1 is Set<num>);
-  Expect.isFalse(set1 is Set<int>);
-  Expect.isFalse(set1 is Set<double>);
+  Expect.isTrue(set3 is Set<num>);
+  Expect.isFalse(set3 is Set<int>);
+  Expect.isFalse(set3 is Set<double>);
+  checkType(checkIs<Set<num>>, true, set3);
+  checkType(checkIs<Set<int>>, false, set3);
+  checkType(checkIs<Set<double>>, false, set3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A13_t01.dart b/LanguageFeatures/Control-flow-collections/type_inference_A13_t01.dart
index f4dc0f5..08c57ef 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A13_t01.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A13_t01.dart
@@ -31,6 +31,11 @@
   Expect.isFalse(map1 is Map<double, num>);
   Expect.isFalse(map1 is Map<num, int>);
   Expect.isFalse(map1 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map1);
+  checkType(checkIs<Map<int, num>>, false, map1);
+  checkType(checkIs<Map<double, num>>, false, map1);
+  checkType(checkIs<Map<num, int>>, false, map1);
+  checkType(checkIs<Map<num, double>>, false, map1);
 
   var map2 = {
     "": "",
@@ -42,6 +47,11 @@
   Expect.isFalse(map2 is Map<Object, String>);
   Expect.isFalse(map2 is Map<String, Object>);
   Expect.isFalse(map2 is Map<num, Object>);
+  checkType(checkIs<Map<Object, Object>>, true, map2);
+  checkType(checkIs<Map<Object, num>>, false, map2);
+  checkType(checkIs<Map<Object, String>>, false, map2);
+  checkType(checkIs<Map<String, Object>>, false, map2);
+  checkType(checkIs<Map<num, Object>>, false, map2);
 
   var map3 = {
     new C(): new B(),
@@ -50,4 +60,7 @@
   Expect.isTrue(map3 is Map<B, A>);
   Expect.isFalse(map3 is Map<B, B>);
   Expect.isFalse(map3 is Map<A, C>);
+  checkType(checkIs<Map<B, A>>, true, map3);
+  checkType(checkIs<Map<B, B>>, false, map3);
+  checkType(checkIs<Map<A, C>>, false, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A13_t02.dart b/LanguageFeatures/Control-flow-collections/type_inference_A13_t02.dart
index 5579f4a..d8d04d5 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A13_t02.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A13_t02.dart
@@ -32,6 +32,11 @@
   Expect.isFalse(map1 is Map<double, num>);
   Expect.isFalse(map1 is Map<num, int>);
   Expect.isFalse(map1 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map1);
+  checkType(checkIs<Map<int, num>>, false, map1);
+  checkType(checkIs<Map<double, num>>, false, map1);
+  checkType(checkIs<Map<num, int>>, false, map1);
+  checkType(checkIs<Map<num, double>>, false, map1);
 
   var map2 = {
     "": "",
@@ -43,6 +48,11 @@
   Expect.isFalse(map2 is Map<Object, String>);
   Expect.isFalse(map2 is Map<String, Object>);
   Expect.isFalse(map2 is Map<num, Object>);
+  checkType(checkIs<Map<Object, Object>>, true, map2);
+  checkType(checkIs<Map<Object, num>>, false, map2);
+  checkType(checkIs<Map<Object, String>>, false, map2);
+  checkType(checkIs<Map<String, Object>>, false, map2);
+  checkType(checkIs<Map<num, Object>>, false, map2);
 
   var map3 = {
     new C(): new B(),
@@ -51,4 +61,7 @@
   Expect.isTrue(map3 is Map<B, A>);
   Expect.isFalse(map3 is Map<B, B>);
   Expect.isFalse(map3 is Map<A, C>);
+  checkType(checkIs<Map<B, A>>, true, map3);
+  checkType(checkIs<Map<B, B>>, false, map3);
+  checkType(checkIs<Map<A, C>>, false, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A13_t03.dart b/LanguageFeatures/Control-flow-collections/type_inference_A13_t03.dart
index 4321fe6..75b627c 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A13_t03.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A13_t03.dart
@@ -30,6 +30,11 @@
   Expect.isFalse(map1 is Map<double, num>);
   Expect.isFalse(map1 is Map<num, int>);
   Expect.isFalse(map1 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map1);
+  checkType(checkIs<Map<int, num>>, false, map1);
+  checkType(checkIs<Map<double, num>>, false, map1);
+  checkType(checkIs<Map<num, int>>, false, map1);
+  checkType(checkIs<Map<num, double>>, false, map1);
 
   var map2 = {
     "": "",
@@ -41,6 +46,11 @@
   Expect.isFalse(map2 is Map<Object, String>);
   Expect.isFalse(map2 is Map<String, Object>);
   Expect.isFalse(map2 is Map<num, Object>);
+  checkType(checkIs<Map<Object, Object>>, true, map2);
+  checkType(checkIs<Map<Object, num>>, false, map2);
+  checkType(checkIs<Map<Object, String>>, false, map2);
+  checkType(checkIs<Map<String, Object>>, false, map2);
+  checkType(checkIs<Map<num, Object>>, false, map2);
 
   c1 = null;
   c2 = null;
@@ -53,4 +63,9 @@
   Expect.isFalse(map3 is Map<double, num>);
   Expect.isFalse(map3 is Map<num, int>);
   Expect.isFalse(map3 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map3);
+  checkType(checkIs<Map<int, num>>, false, map3);
+  checkType(checkIs<Map<double, num>>, false, map3);
+  checkType(checkIs<Map<num, int>>, false, map3);
+  checkType(checkIs<Map<num, double>>, false, map3);
 }
diff --git a/LanguageFeatures/Control-flow-collections/type_inference_A13_t04.dart b/LanguageFeatures/Control-flow-collections/type_inference_A13_t04.dart
index 64f5da5..eb8a971 100644
--- a/LanguageFeatures/Control-flow-collections/type_inference_A13_t04.dart
+++ b/LanguageFeatures/Control-flow-collections/type_inference_A13_t04.dart
@@ -31,6 +31,11 @@
   Expect.isFalse(map1 is Map<double, num>);
   Expect.isFalse(map1 is Map<num, int>);
   Expect.isFalse(map1 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map1);
+  checkType(checkIs<Map<int, num>>, false, map1);
+  checkType(checkIs<Map<double, num>>, false, map1);
+  checkType(checkIs<Map<num, int>>, false, map1);
+  checkType(checkIs<Map<num, double>>, false, map1);
 
   var map2 = {
     "": "",
@@ -42,6 +47,11 @@
   Expect.isFalse(map2 is Map<Object, String>);
   Expect.isFalse(map2 is Map<String, Object>);
   Expect.isFalse(map2 is Map<num, Object>);
+  checkType(checkIs<Map<Object, Object>>, true, map2);
+  checkType(checkIs<Map<Object, num>>, false, map2);
+  checkType(checkIs<Map<Object, String>>, false, map2);
+  checkType(checkIs<Map<String, Object>>, false, map2);
+  checkType(checkIs<Map<num, Object>>, false, map2);
 
   c1 = null;
   c2 = null;
@@ -54,4 +64,9 @@
   Expect.isFalse(map3 is Map<double, num>);
   Expect.isFalse(map3 is Map<num, int>);
   Expect.isFalse(map3 is Map<num, double>);
+  checkType(checkIs<Map<num, num>>, true, map3);
+  checkType(checkIs<Map<int, num>>, false, map3);
+  checkType(checkIs<Map<double, num>>, false, map3);
+  checkType(checkIs<Map<num, int>>, false, map3);
+  checkType(checkIs<Map<num, double>>, false, map3);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t01.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t01.dart
index ea85c6e..a84cb57 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t01.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t01.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
@@ -54,4 +53,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, true, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t02.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t02.dart
index 81b0b39..42d4368 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t02.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t02.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t03.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t03.dart
index b2a275f..9c6f3bb 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t03.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t03.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, true, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t04.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t04.dart
index 2a5facb..9d7bbe4 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t04.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t04.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isTrue(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, true, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t05.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t05.dart
index ee292db..5bd685f 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t05.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t05.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isTrue(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, true, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t06.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t06.dart
index b9fbf31..4e184b0 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t06.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t06.dart
@@ -31,7 +31,6 @@
 /// bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t07.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t07.dart
index 7918820..6dfe0c7 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t07.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t07.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>()> = TT Function();
@@ -54,4 +53,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, true, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t08.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t08.dart
index f011f39..fe6c7c7 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t08.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t08.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>()> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t09.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t09.dart
index 4634fb8..9a4e015 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t09.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t09.dart
@@ -52,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, true, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t10.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t10.dart
index d69d304..c01c9f4 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t10.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t10.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>()> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isTrue(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, true, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t11.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t11.dart
index 6fcd52b..037a419 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t11.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t11.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>()> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isTrue(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, true, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t12.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t12.dart
index aa2f258..5b69bf0 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t12.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t12.dart
@@ -31,7 +31,6 @@
 /// bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>()> = TT Function();
@@ -52,4 +51,11 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
+
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t13.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t13.dart
index 50ca11e..9344e69 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t13.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t13.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, true, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t14.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t14.dart
index 1f7ecea..d110841 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t14.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t14.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t15.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t15.dart
index a2ccb56..1c0d7b0 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t15.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t15.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, true, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t16.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t16.dart
index 77675b4..713d952 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t16.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t16.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isTrue(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, true, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t17.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t17.dart
index 33100aa..bb2abdf 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t17.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t17.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isTrue(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, true, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t18.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t18.dart
index 29ac367..d17beb8 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t18.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t18.dart
@@ -31,7 +31,6 @@
 /// bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t19.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t19.dart
index 32114a5..3559825 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t19.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t19.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, true, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t20.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t20.dart
index f2a8f32..f14adc5 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t20.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t20.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t21.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t21.dart
index e10a17e..5be3a21 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t21.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t21.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, true, testme);
+  checkType(checkIs<T3>, true, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t22.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t22.dart
index db7a428..a256460 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t22.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t22.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isTrue(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, true, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t23.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t23.dart
index 2b98a15..c95bc04 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t23.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t23.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
@@ -53,4 +52,10 @@
   Expect.isFalse(testme is T4);
   Expect.isTrue(testme is T5);
   Expect.isFalse(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, true, testme);
+  checkType(checkIs<T6>, false, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t24.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t24.dart
index 3e32176..4bc7757 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t24.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A01_t24.dart
@@ -31,7 +31,6 @@
 /// bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
@@ -52,4 +51,10 @@
   Expect.isFalse(testme is T4);
   Expect.isFalse(testme is T5);
   Expect.isTrue(testme is T6);
+  checkType(checkIs<T1>, false, testme);
+  checkType(checkIs<T2>, false, testme);
+  checkType(checkIs<T3>, false, testme);
+  checkType(checkIs<T4>, false, testme);
+  checkType(checkIs<T5>, false, testme);
+  checkType(checkIs<T6>, true, testme);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t01.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t01.dart
index d66d8aa6..e296e59 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t01.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t01.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>(T)> = TT Function();
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t02.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t02.dart
index 0f823fa..6e5532c 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t02.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t02.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>(T)> = TT Function();
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t03.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t03.dart
index e99f34a..65c0aba 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t03.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t03.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends T Function<T>()> = TT Function();
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t04.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t04.dart
index d4d1e85..7d2c242 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t04.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A02_t04.dart
@@ -31,7 +31,6 @@
 /// argument and bound.
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T1<TT extends void Function<T>()> = TT Function();
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A03_t01.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A03_t01.dart
index 051607d..6e8d3cd 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef1_A03_t01.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef1_A03_t01.dart
@@ -31,7 +31,6 @@
 /// @author iarkh@unipro.ru
 /// @Issue 45317
 
-
 typedef T1<TT extends void Function<T extends TT>()> = TT Function();
 
 typedef T2<TT extends T Function<T extends TT>()> = TT Function();
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t01.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t01.dart
index 58b1db8..5abc423 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t01.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t01.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends void Function<TT>()>();
@@ -44,5 +43,7 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
 
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t02.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t02.dart
index 44bf359..50e88db 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t02.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t02.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends TT Function<TT>()>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t03.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t03.dart
index 4fca372..7eecc02 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t03.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t03.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends void Function<TT>(TT t)>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t04.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t04.dart
index 295cb52..661baf4 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t04.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t04.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends TT Function<TT>(TT t)>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t05.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t05.dart
index a049623..a92a557 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t05.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t05.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends void Function<TT>()>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t06.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t06.dart
index e199fef..10ecc42 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t06.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t06.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends TT Function<TT>()>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t07.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t07.dart
index 36bcaa9..25b96f4 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t07.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t07.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends void Function<TT>(TT t)>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t08.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t08.dart
index f16d31c..704de3f 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t08.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t08.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends void Function<TT>(TT t)>();
@@ -44,4 +43,6 @@
   TEST t = testme;
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t09.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t09.dart
index f57584f..5c814a1 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t09.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t09.dart
@@ -33,7 +33,6 @@
 /// @Issue 45313, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends void Function<TT>()>(T t);
@@ -48,7 +47,11 @@
   // See https://github.com/dart-lang/sdk/issues/45718 evaluation for more details
   Expect.isFalse(testme is TEST);
   Expect.isTrue(testme1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
 
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t10.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t10.dart
index 0ef5728..caffbdc 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t10.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t10.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends TT Function<TT>()>(T t);
@@ -50,5 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
-  Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t11.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t11.dart
index dd94915..53d2cd4 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t11.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t11.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends void Function<TT>(TT t)>(T t);
@@ -50,4 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t12.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t12.dart
index 5b45eed..c7b465b 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t12.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t12.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef void TEST<T extends TT Function<TT>(TT t)>(T t);
@@ -50,4 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t13.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t13.dart
index 932a5a5..e603622 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t13.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t13.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends void Function<TT>()>(T t);
@@ -50,4 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t14.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t14.dart
index d55658d..94718b0 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t14.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t14.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends TT Function<TT>()>(T t);
@@ -50,4 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t15.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t15.dart
index 5a2b8de..e29d25d 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t15.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t15.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends void Function<TT>(TT t)>(T t);
@@ -50,4 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }
diff --git a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t16.dart b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t16.dart
index 5a2b8de..e29d25d 100644
--- a/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t16.dart
+++ b/LanguageFeatures/Generic-functions-as-type-args/typedef2_A01_t16.dart
@@ -32,7 +32,6 @@
 /// @Issue 45313, 45322, 45718
 /// @author iarkh@unipro.ru
 
-
 import "../../Utils/expect.dart";
 
 typedef T TEST<T extends void Function<TT>(TT t)>(T t);
@@ -50,4 +49,8 @@
   Expect.isTrue(testme1 is TEST);
   Expect.isTrue(t is TEST);
   Expect.isTrue(t1 is TEST);
+  checkType(checkIs<TEST>, false, testme);
+  checkType(checkIs<TEST>, true, testme1);
+  checkType(checkIs<TEST>, true, t);
+  checkType(checkIs<TEST>, true, t1);
 }