diff --git a/LanguageFeatures/nnbd/Null_promotion_A01_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A01_t01.dart
new file mode 100644
index 0000000..59273e0
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A01_t01.dart
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion A check of the form [e == null] or of the form [e is Null] where
+ * [e] has static type [T] promotes the type of [e] to [Null] in the [true]
+ * continuation, and to [NonNull(T)] in the [false] continuation.
+ *
+ * @description Check that [e] is promoted to [Null] in the [true] condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.equals(Null, x.runtimeType);
+  Expect.isTrue(x == null);
+  Expect.isTrue(x is Null);
+  Expect.isFalse(x is NonNull(expectedType));
+}
+
+main() {
+  checkme(null, Null);
+
+  A ? a = null;
+  checkme(a, A);
+
+  B? b1 = null;
+  checkme(b1, B);
+
+  B<int> ? b2 = null;
+  checkme(b2, B);
+
+  dynamic ? d = null;
+  checkme(d, dynamic);
+
+  Object ? o = null;
+  checkme(o, Object);
+
+  Null n = null;
+  checkme(n, Null);
+
+  AA ? aa = null;
+  checkme(aa, AA);
+  checkme(aa, A);
+
+  AAA aaa = null;
+  checkme(aaa, AAA);
+  checkme(aaa, A);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A01_t02.dart b/LanguageFeatures/nnbd/Null_promotion_A01_t02.dart
new file mode 100644
index 0000000..b8a48b2
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A01_t02.dart
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion A check of the form [e == null] or of the form [e is Null] where
+ * [e] has static type [T] promotes the type of [e] to [Null] in the [true]
+ * continuation, and to [NonNull(T)] in the [false] continuation.
+ *
+ * @description Check that [e] is promoted to [NonNull(T)] in the [false]
+ * condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.isFalse(x == null);
+  Expect.isFalse(x is Null);
+  Expect.isTrue(x is NonNull(expectedType));
+  Expect.isTrue(x is NonNull(Object));
+}
+
+main() {
+  A a1 = A();
+  checkme(a1, A);
+
+  A? a2 = A();
+  checkme(a2, A);
+
+  B b1 = B();
+  checkme(b1, B);
+
+  B? b2 = B();
+  checkme(b2, B);
+
+  B<int> b3 = B<int>();
+  checkme(b3, B);
+
+  B<int> ? b4 = B<int>();
+  checkme(b4, B);
+
+  dynamic d = 12345;
+  checkme(d, int);
+  checkme(d, dynamic);
+
+  Object o = "14";
+  checkme(o, String);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A02_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A02_t01.dart
new file mode 100644
index 0000000..8ad2012
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A02_t01.dart
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion A check of the form [e != null] or of the form [e is T] where [e]
+ * has static type [T?] promotes the type of [e] to [T] in the [true]
+ * continuation, and to [Null] in the [false] continuation.
+ *
+ * @description Check that type of [e] is promoted to [T] in the [true]
+ * condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.isTrue(x != null);
+  Expect.isTrue(x is expectedType);
+}
+
+main() {
+  A ? a = A();
+  checkme(a, A);
+
+  B ? b1 = B();
+  checkme(b1, B);
+
+  B<int> ? b2 = B<int>();
+  checkme(b2, B);
+
+  Object ? o = 12345;
+  checkme(o, Object);
+
+  AA ? aa = A();
+  checkme(aa, AA);
+  checkme(aa, A);
+
+  AAA aaa = A();
+  checkme(aaa, AAA);
+  checkme(aaa, A);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A02_t02.dart b/LanguageFeatures/nnbd/Null_promotion_A02_t02.dart
new file mode 100644
index 0000000..6496f2d
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A02_t02.dart
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion A check of the form [e != null] or of the form [e is T] where [e]
+ * has static type [T?] promotes the type of [e] to [T] in the [true]
+ * continuation, and to [Null] in the [false] continuation.
+ *
+ * @description Check that type of [e] is promoted to [Null] in the [false]
+ * condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.isFalse(x != null);
+  Expect.isFalse(x is expectedType);
+}
+
+main() {
+  Expect.isFalse(null != null);
+
+  A ? a = null;
+  checkme(a, A);
+
+  B? b1 = null;
+  checkme(b1, B);
+
+  B<int> ? b2 = null;
+  checkme(b2, B);
+
+  dynamic ? d = null;
+  checkme(d, dynamic);
+
+  Object ? o = null;
+  checkme(o, Object);
+
+  AA ? aa = null;
+  checkme(aa, AA);
+  checkme(aa, A);
+
+  AAA aaa = null;
+  checkme(aaa, AAA);
+  checkme(aaa, A);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A03_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A03_t01.dart
new file mode 100644
index 0000000..c90731d
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A03_t01.dart
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion The static type of an expression [e!] is [NonNull(T)] where [T] is
+ * the static type of [e].
+ *
+ * @description Check that [e!] is [NonNull(T)] if [e] is of static type [T}.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+main() {
+  A a = A();
+  Expect.isTrue(a! is NonNull(A));
+
+  B b1 = B();
+  Expect.isTrue(b1! is NonNull(B));
+
+  B<int> b2 = B<int>();
+  Expect.isTrue(b2! is NonNull(B<int>));
+
+  AA aa = AA();
+  Expect.isTrue(aa! is NonNull(AA));
+
+  AAA aaa = AAA();
+  Expect.isTrue(aaa! is NonNull(AAA));
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A04_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A04_t01.dart
new file mode 100644
index 0000000..b7713c3
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A04_t01.dart
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+/**
+ * @assertion The NonNull function defines the null-promoted version of a type,
+ * and is defined as follows.
+ *     NonNull(Null) = Never
+ *
+ * @description Check that NonNull(Null) = Never.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+import "../../Utils/expect.dart";
+
+main() {
+  Expect.isTrue(NonNull(int) == int);
+}
