Issue #462: NNBD type-normalization tests for weak mode added.
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A01_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A01_t01.dart
new file mode 100644
index 0000000..d53b174
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A01_t01.dart
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   T?? == T?
+ *
+ * @description Checks that T?? == T?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+
+class T {}
+class A<X> {}
+class B<X> implements A<X?> {}
+
+class C extends B<T?> implements A<T?> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/equations_A02_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A02_t01.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/equations_A02_t01.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/equations_A02_t01.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/equations_A03_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A03_t01.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/equations_A03_t01.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/equations_A03_t01.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/equations_A04_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A04_t01.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/equations_A04_t01.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/equations_A04_t01.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A05_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A05_t01.dart
new file mode 100644
index 0000000..4f7a710
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A05_t01.dart
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 20201 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   Null? == Null
+ *
+ * @description Checks that Null? == Null
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<Null?> implements A<Null> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A06_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A06_t01.dart
new file mode 100644
index 0000000..97ac1dc
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A06_t01.dart
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   Never? == Null
+ *
+ * @description Checks that Null? == Null
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<Never?> implements A<Null> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A07_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A07_t01.dart
new file mode 100644
index 0000000..1266103
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A07_t01.dart
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   dynamic? == dynamic
+ *
+ * @description Checks that dynamic? == dynamic
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<dynamic?> implements A<dynamic> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A08_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A08_t01.dart
new file mode 100644
index 0000000..a3d86d1
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A08_t01.dart
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   void? == void
+ *
+ * @description Checks that void? == void
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+
+class A<X> {}
+class B<X> implements A<X?> {}
+
+class C extends B<void> implements A<void> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/equations_A09_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A09_t01.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/equations_A09_t01.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/equations_A09_t01.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/equations_A10_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A10_t01.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/equations_A10_t01.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/equations_A10_t01.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A11_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A11_t01.dart
new file mode 100644
index 0000000..ca815ef
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A11_t01.dart
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   FutureOr<T> == T if Future<T> <: T
+ *
+ * @description Checks that if Future<T> <: T then FutureOr<T> == T
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class CO extends B<FutureOr<Object>> implements A<Object> {}
+class CD extends B<FutureOr<dynamic>> implements A<dynamic> {}
+class CV extends B<FutureOr<void>> implements A<void> {}
+
+main() {
+  new CO();
+  new CD();
+  new CV();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A12_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A12_t01.dart
new file mode 100644
index 0000000..388eec8
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A12_t01.dart
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   FutureOr<T> == Future<T> if T <: Future<T>
+ *
+ * @description Checks that if T <: Future<T> then FutureOr<T> == Future<T>
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<FutureOr<Null>> implements A<Future<Null>?> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/equations_A13_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/equations_A13_t01.dart
new file mode 100644
index 0000000..b6a6449
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/equations_A13_t01.dart
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2021, 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 NORM relation defines the canonical representative of classes
+ * of equivalent types...
+ * This is based on the following equations:
+ *   X extend Never == Never
+ *
+ * @description Checks that X extend Never == Never
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+
+class A<X> {}
+class B<X extends Never> implements A<X> {}
+
+class C extends B<Never> implements A<Never> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t01.dart
new file mode 100644
index 0000000..cabe482
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t01.dart
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(FutureOr<T>) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Object then S
+ *  if S is Object* then S
+ *  if S is Never then Future<Never>
+ *  if S is Null then Future<Null>?
+ *  else FutureOr<S>
+ *
+ * @description Checks that if NORM(T) is a top type then NORM(FutureOr<T>) =
+ * NORM(T)
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class CD1 extends B<FutureOr<dynamic>> implements A<dynamic> {}
+class CD2 extends B<FutureOr<dynamic>> implements A<dynamic?> {}
+
+class CO extends B<FutureOr<Object?>> implements A<Object?> {}
+class CV extends B<FutureOr<void>> implements A<void> {}
+
+main() {
+  new CD1();
+  new CD2();
+  new CO();
+  new CV();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t02.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t02.dart
new file mode 100644
index 0000000..a9d5efa
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t02.dart
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(FutureOr<T>) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Object then S
+ *  if S is Object* then S
+ *  if S is Never then Future<Never>
+ *  if S is Null then Future<Null>?
+ *  else FutureOr<S>
+ *
+ * @description Checks that if NORM(T) is Object then
+ * NORM(FutureOr<T>) = Object
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<FutureOr<Object>> implements A<Object> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A02_t03.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t03.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A02_t03.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t03.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t04.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t04.dart
new file mode 100644
index 0000000..5ab0562
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t04.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(FutureOr<T>) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Object then S
+ *  if S is Object* then S
+ *  if S is Never then Future<Never>
+ *  if S is Null then Future<Null>?
+ *  else FutureOr<S>
+ *
+ * @description Checks that if NORM(T) is Never then
+ * NORM(FutureOr<T>) = Future<Never>
+ *
+ * @author sgrekhov@unipro.ru
+ * @issue 41632
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<FutureOr<Never>> implements A<Future<Never>> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t05.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t05.dart
new file mode 100644
index 0000000..ec96451
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t05.dart
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(FutureOr<T>) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Object then S
+ *  if S is Object* then S
+ *  if S is Never then Future<Never>
+ *  if S is Null then Future<Null>?
+ *  else FutureOr<S>
+ *
+ * @description Checks that if NORM(T) is Null then
+ * NORM(FutureOr<T>) = Future<Null>?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<FutureOr<Null>> implements A<Future<Null>?> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t07.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t07.dart
new file mode 100644
index 0000000..7697a08
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A02_t07.dart
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(FutureOr<T>) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Object then S
+ *  if S is Object* then S
+ *  if S is Never then Future<Never>
+ *  if S is Null then Future<Null>?
+ *  else FutureOr<S>
+ *
+ * @description Checks that otherwise NORM(FutureOr<T>) = FutureOr<NORM(T)>.
+ * Test that NORM(FutureOr<T??>) == FutureOr<T?> and
+ * NORM(FutureOr<Never?>) == FutureOr<Null>
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class T {}
+class A<X> {}
+class B<X> implements A<FutureOr<X?>> {}
+class D<X> implements A<X> {}
+
+class C1 extends B<T?> implements A<FutureOr<T?>> {}
+class C2 extends B<Never?> implements A<FutureOr<Null>> {}
+
+main() {
+  new C1();
+  new C2();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t01.dart
new file mode 100644
index 0000000..1d382e6
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t01.dart
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(T?) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Never then Null
+ *  if S is Never* then Null
+ *  if S is Null then Null
+ *  if S is FutureOr<R> and R is nullable then S
+ *  if S is FutureOr<R>* and R is nullable then FutureOr<R>
+ *  if S is R? then R?
+ *  if S is R* then R?
+ *  else S?
+ *
+ * @description Checks that if NORM(T) is a top type then NORM(T?) = NORM(T)
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+
+class A<X> {}
+class B1<X> implements A<X> {}
+class B2<X> implements A<X?> {}
+
+class CD extends B1<dynamic?> implements A<dynamic> {}
+class CO extends B1<Object?> implements A<Object?> {}
+class CV extends B2<void> implements A<void> {}
+
+main() {
+  new CD();
+  new CO();
+  new CV();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t02.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t02.dart
new file mode 100644
index 0000000..8274bd0
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t02.dart
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+ * Copyright (c) 2021, 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
+ * NORM(T?) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Never then Null
+ *  if S is Never* then Null
+ *  if S is Null then Null
+ *  if S is FutureOr<R> and R is nullable then S
+ *  if S is FutureOr<R>* and R is nullable then FutureOr<R>
+ *  if S is R? then R?
+ *  if S is R* then R?
+ *  else S?
+ *
+ * @description Checks that if NORM(T) is Never then NORM(T?) = Null
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C extends B<Never?> implements A<Null> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A03_t03.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t03.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A03_t03.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t03.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t04.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t04.dart
new file mode 100644
index 0000000..a8df00e
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t04.dart
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(T?) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Never then Null
+ *  if S is Never* then Null
+ *  if S is Null then Null
+ *  if S is FutureOr<R> and R is nullable then S
+ *  if S is FutureOr<R>* and R is nullable then FutureOr<R>
+ *  if S is R? then R?
+ *  if S is R* then R?
+ *  else S?
+ *
+ * @description Checks that if NORM(T) is Null then NORM(T?) = Null
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B1<X> implements A<X> {}
+class B2<X> implements A<X?> {}
+
+class C1 extends B1<Null?> implements A<Null> {}
+class C2 extends B1<Never?> implements A<Null> {}
+
+main() {
+  new C1();
+  new C2();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t05.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t05.dart
new file mode 100644
index 0000000..eb35ea3
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t05.dart
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(T?) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Never then Null
+ *  if S is Never* then Null
+ *  if S is Null then Null
+ *  if S is FutureOr<R> and R is nullable then S
+ *  if S is FutureOr<R>* and R is nullable then FutureOr<R>
+ *  if S is R? then R?
+ *  if S is R* then R?
+ *  else S?
+ *
+ * @description Checks that if NORM(T) is FutureOr<R> and R is nullable then
+ * NORM(T?) = FutureOr<R>
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+class A<X> {}
+class B1<X> implements A<X> {}
+class B2<X> implements A<FutureOr<X?>?> {}
+
+class C1 extends B1<FutureOr<String?>?> implements A<FutureOr<String?>> {}
+class C2 extends B2<String> implements A<FutureOr<String?>> {}
+
+main() {
+  new C1();
+  new C2();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A03_t07.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t07.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A03_t07.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t07.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t08.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t08.dart
new file mode 100644
index 0000000..46af41e
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t08.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(T?) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Never then Null
+ *  if S is Never* then Null
+ *  if S is Null then Null
+ *  if S is FutureOr<R> and R is nullable then S
+ *  if S is FutureOr<R>* and R is nullable then FutureOr<R>
+ *  if S is R? then R?
+ *  if S is R* then R?
+ *  else S?
+ *
+ * @description Checks that if NORM(T) is R? then NORM(T?) = R?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class T {}
+class A<X> {}
+class B<X> implements A<X?> {}
+
+class C extends B<T?> implements A<T?> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A03_t09.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t09.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A03_t09.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t09.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t10.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t10.dart
new file mode 100644
index 0000000..f467f02
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A03_t10.dart
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(T?) =
+ *  let S be NORM(T)
+ *  if S is a top type then S
+ *  if S is Never then Null
+ *  if S is Never* then Null
+ *  if S is Null then Null
+ *  if S is FutureOr<R> and R is nullable then S
+ *  if S is FutureOr<R>* and R is nullable then FutureOr<R>
+ *  if S is R? then R?
+ *  if S is R* then R?
+ *  else S?
+ *
+ * @description Checks that if NORM(T) is S then NORM(T?) = S?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class T {}
+class A<X> {}
+class B<X> implements A<X?> {}
+
+class C extends B<T?> implements A<T?> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A04_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t01.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A04_t01.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t01.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A04_t02.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t02.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A04_t02.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t02.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A04_t03.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t03.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A04_t03.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t03.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A04_t04.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t04.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A04_t04.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A04_t04.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A05_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A05_t01.dart
new file mode 100644
index 0000000..ff862f7
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A05_t01.dart
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(X extends T) =
+ *  let S be NORM(T)
+ *  if S is Never then Never
+ *  else X extends T
+ *
+ * @description Checks that if NORM(T) is Never then NORM(X extends T) = Never
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X extends Never> implements A<X> {}
+
+class C extends B<Never> implements A<Never> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A05_t02.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A05_t02.dart
new file mode 100644
index 0000000..3f0d9af
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A05_t02.dart
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(X extends T) =
+ *  let S be NORM(T)
+ *  if S is Never then Never
+ *  else X extends T
+ *
+ * @description Checks that if NORM(T) is NORM(X extends T)
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class T {}
+class T1 extends T {}
+class T2 extends T {}
+class A<X> {}
+class B<X extends T> implements A<X> {}
+
+class C extends B<T1> implements A<T1> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t01.dart
new file mode 100644
index 0000000..d70dd4f
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t01.dart
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
+ *
+ * @description Checks that NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is
+ * NORM(Ti). Test T?? == T?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class T {}
+class A<X> {}
+class B<X> implements A<C<X?>> {}
+
+class C<X> {}
+
+class Test extends B<T?> implements A<C<T?>> {}
+
+main() {
+  new Test();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A06_t02.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t02.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A06_t02.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t02.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A06_t03.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t03.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A06_t03.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t03.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A06_t04.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t04.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A06_t04.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t04.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t05.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t05.dart
new file mode 100644
index 0000000..ca7aa87
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t05.dart
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
+ *
+ * @description Checks that NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is
+ * NORM(Ti). Test Null?, dynamic?, Never?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<X> {}
+
+class C<T1, T2, T3> {}
+
+class Test extends B<C<Null?, dynamic?, Never?>> implements
+  A<C<Null, dynamic, Null>> {}
+
+main() {
+  new Test();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t06.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t06.dart
new file mode 100644
index 0000000..020fde4
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t06.dart
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
+ *
+ * @description Checks that NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is
+ * NORM(Ti). Test void?
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<C<X?>> {}
+
+class C<X> {}
+
+class Test extends B<void> implements A<C<void>> {}
+
+main() {
+  new Test();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A06_t07.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t07.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A06_t07.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t07.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/norm_A06_t08.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t08.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/norm_A06_t08.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t08.dart
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t09.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t09.dart
new file mode 100644
index 0000000..8915b52
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t09.dart
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
+ *
+ * @description Checks that NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is
+ * NORM(Ti). Test FutureOr<T> where Future<T> <: T
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+class C<X> {}
+
+class CO extends B<C<FutureOr<Object>>> implements A<C<Object>> {}
+class CD extends B<C<FutureOr<dynamic>>> implements A<C<dynamic>> {}
+class CV extends B<C<FutureOr<void>>> implements A<C<void>> {}
+
+main() {
+  new CO();
+  new CD();
+  new CV();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t10.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t10.dart
new file mode 100644
index 0000000..a365a96
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t10.dart
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
+ *
+ * @description Checks that NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is
+ * NORM(Ti). Test FutureOr<T> == Future<T> where T <: Future<T>
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+import 'dart:async';
+
+class A<X> {}
+class B<X> implements A<X> {}
+class C<X> {}
+
+class C0 extends B<C<FutureOr<Null>>> implements A<C<Future<Null>?>> {}
+
+main() {
+  new C0();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t11.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t11.dart
new file mode 100644
index 0000000..5df1c95
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A06_t11.dart
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
+ *
+ * @description Checks that NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is
+ * NORM(Ti). Test X extend Never == Never
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X extends Never> implements A<C<X>> {}
+class C<X> {}
+
+class C0 extends B<Never> implements A<C<Never>> {}
+
+main() {
+  new C0();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A07_t01.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A07_t01.dart
new file mode 100644
index 0000000..db38870
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A07_t01.dart
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(R Function<X extends B>(S)) = R1 Function<X extends B1>(S1)
+ *  where R1 = NORM(R)
+ *  and B1 = NORM(B)
+ *  and S1 = NORM(S)
+ *
+ * @description Checks that NORM(R Function<X extends B>(S)) =
+ * R1 Function<X extends B1>(S1).
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<X> {}
+
+typedef Null? F1<X extends Never>(dynamic? x);
+typedef Null F2<X>(dynamic x);
+
+class C extends B<F1<Never>> implements A<F2<Never>> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/weak/type-normalization/norm_A07_t02.dart b/LanguageFeatures/nnbd/weak/type-normalization/norm_A07_t02.dart
new file mode 100644
index 0000000..5b86cd0
--- /dev/null
+++ b/LanguageFeatures/nnbd/weak/type-normalization/norm_A07_t02.dart
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2021, 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
+ * NORM(R Function<X extends B>(S)) = R1 Function<X extends B1>(S1)
+ *  where R1 = NORM(R)
+ *  and B1 = NORM(B)
+ *  and S1 = NORM(S)
+ *
+ * @description Checks that NORM(R Function<X extends B>(S)) =
+ * R1 Function<X extends B1>(S1).
+ *
+ * @author sgrekhov@unipro.ru
+ */
+// Requirements=nnbd-weak
+class A<X> {}
+class B<X> implements A<X> {}
+
+typedef dynamic? F1<X>(Never? x);
+typedef dynamic F2<X>(Null x);
+
+class C extends B<F1<Never?>> implements A<F2<Null>> {}
+
+main() {
+  new C();
+}
diff --git a/LanguageFeatures/nnbd/type-normalization/opted_in_lib.dart b/LanguageFeatures/nnbd/weak/type-normalization/opted_in_lib.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/opted_in_lib.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/opted_in_lib.dart
diff --git a/LanguageFeatures/nnbd/type-normalization/opted_out_lib.dart b/LanguageFeatures/nnbd/weak/type-normalization/opted_out_lib.dart
similarity index 100%
rename from LanguageFeatures/nnbd/type-normalization/opted_out_lib.dart
rename to LanguageFeatures/nnbd/weak/type-normalization/opted_out_lib.dart