diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A10_t01.dart b/LanguageFeatures/Enhanced-Enum/semantics_A10_t01.dart
new file mode 100644
index 0000000..ca3ab6a
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A10_t01.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or mixing in a member which is not a valid override of a
+/// super-interface member declaration, including, but not limited to, the index
+/// and toString members of Enum.
+///
+/// @description Check that it is a compile-time error to declare a member which
+/// is not a valid override of a super-interface member declaration
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  String get index => "Lily was here";
+//           ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  String toString(int index) => "E1";
+//       ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+  String index() => "Lily was here";
+//       ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  void set toString(int index) {}
+//         ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A10_t02.dart b/LanguageFeatures/Enhanced-Enum/semantics_A10_t02.dart
new file mode 100644
index 0000000..ee23872
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A10_t02.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or mixing in a member which is not a valid override of a
+/// super-interface member declaration, including, but not limited to, the index
+/// and toString members of Enum.
+///
+/// @description Check that it is a compile-time error to declare a member which
+/// is not a valid override of a super-interface member declaration
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  static int get index => "Lily was here";
+//               ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  static String toString() => "E1";
+//              ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+  static String index() => "Lily was here";
+//              ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  static void set toString() {}
+//                ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A10_t03.dart b/LanguageFeatures/Enhanced-Enum/semantics_A10_t03.dart
new file mode 100644
index 0000000..bdcb100
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A10_t03.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or mixing in a member which is not a valid override of a
+/// super-interface member declaration, including, but not limited to, the index
+/// and toString members of Enum.
+///
+/// @description Check that it is a compile-time error to mixin a member which
+/// is not a valid override of a super-interface member declaration
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+mixin M1 on Enum {
+  String get index => "Lily was here";
+//           ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  int toString() => 42;
+//    ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+enum E1 with M1 {
+  e1,
+  e2,
+  e3;
+}
+
+mixin M2 on Enum {
+  int index() => 42;
+//    ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  void set toString(int index) {}
+//         ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum E2<T> with M2 {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A10_t04.dart b/LanguageFeatures/Enhanced-Enum/semantics_A10_t04.dart
new file mode 100644
index 0000000..675c2b1
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A10_t04.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or mixing in a member which is not a valid override of a
+/// super-interface member declaration, including, but not limited to, the index
+/// and toString members of Enum.
+///
+/// @description Check that it is a compile-time error to declare a member which
+/// is not a valid override of a super-interface member declaration
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  int operator ==(E1 other) {
+//             ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+    return 42;
+  }
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+  int operator ==(E2 other) {
+//             ^^
+// [analyzer] unspecified
+// [cfe] unspecified
+    return 42;
+  }
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart b/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart
new file mode 100644
index 0000000..98bdf85
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart
@@ -0,0 +1,70 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or mixing in a member which is not a valid override of a
+/// super-interface member declaration, including, but not limited to, the index
+/// and toString members of Enum.
+///
+/// @description Check that it is no compile-time error to declare a member
+/// which is a valid override of a super-interface member declaration
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+import "../../Utils/expect.dart";
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  int get index => 0;
+  String toString([int index = 0]) => "E1";
+  bool operator ==(covariant E1 other) {
+    return true;
+  }
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+  int get index => 1;
+
+  String toString([int index = 0]) => "E2";
+
+  bool operator ==(covariant E2 other) {
+    return false;
+  }
+}
+
+main() {
+  Expect.equals(0, E1.e1.index);
+  Expect.equals(0, E1.e2.index);
+  Expect.equals(0, E1.e3.index);
+  Expect.equals("E1", E1.e1.toString());
+  Expect.equals("E1", E1.e2.toString(1));
+  Expect.equals("E1", E1.e3.toString());
+  Expect.isTrue(E1.e1 == E1.e2);
+  Expect.isTrue(E1.e1 == E1.e3);
+  Expect.isTrue(E1.e3 == E1.e2);
+  Expect.equals(1, E2.e1.index);
+  Expect.equals(1, E2.e2.index);
+  Expect.equals(1, E2.e3.index);
+  Expect.equals("E2", E2.e1.toString());
+  Expect.equals("E2", E2.e2.toString(1));
+  Expect.equals("E2", E2.e3.toString());
+  Expect.isFalse(E2.e1 == E2.e2);
+  Expect.isFalse(E2.e1 == E2.e3);
+  Expect.isFalse(E2.e3 == E2.e2);
+  Expect.isFalse(E2.e1 == E2.e1);
+  Expect.isFalse(E2.e2 == E2.e2);
+  Expect.isFalse(E2.e3 == E2.e3);
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A11_t01.dart b/LanguageFeatures/Enhanced-Enum/semantics_A11_t01.dart
new file mode 100644
index 0000000..4cb5d5e
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A11_t01.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or inheriting a member signature with no corresponding
+/// implementation. (For example declaring an abstract `Never get index` or
+/// `String toString([int optional])`, but not providing an implementation.)
+///
+/// @description Check that it is a compile-time error to declare a member
+/// signature with no corresponding implementation
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  String toString([int index]);
+//       ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  void foo();
+//     ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+
+  String toString();
+//       ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  void foo();
+//     ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A11_t02.dart b/LanguageFeatures/Enhanced-Enum/semantics_A11_t02.dart
new file mode 100644
index 0000000..bf2d456
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A11_t02.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or inheriting a member signature with no corresponding
+/// implementation. (For example declaring an abstract `Never get index` or
+/// `String toString([int optional])`, but not providing an implementation.)
+///
+/// @description Check that it is a compile-time error to inherit a member
+/// signature with no corresponding implementation
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+abstract class I {
+  String toString([int index]);
+}
+
+enum E1 implements I {
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e1,
+  e2,
+  e3;
+}
+
+enum E2<T> implements I {
+//                    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A11_t03.dart b/LanguageFeatures/Enhanced-Enum/semantics_A11_t03.dart
new file mode 100644
index 0000000..05de5c4
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A11_t03.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring or inheriting a member signature with no corresponding
+/// implementation. (For example declaring an abstract `Never get index` or
+/// `String toString([int optional])`, but not providing an implementation.)
+///
+/// @description Check that it is a compile-time error to inherit a member
+/// signature with no corresponding implementation
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+abstract class I {
+  void foo();
+}
+
+enum E1 implements I {
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e1,
+  e2,
+  e3;
+}
+
+enum E2<T> implements I {
+//                    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A12_t01.dart b/LanguageFeatures/Enhanced-Enum/semantics_A12_t01.dart
new file mode 100644
index 0000000..d18e14b
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A12_t01.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring a type parameter on the enum which does not have a valid
+/// well-bounded or super-bounded instantiate-to-bounds result and not declaring
+/// or inheriting a member with base-name values (because the then automatically
+/// introduced static const List<EnumName> values requires a valid
+/// instantiate-to-bounds result which is at least super-bounded, and a value
+/// declaration may require a well-bounded instantiation).
+///
+/// @description Check that it is a compile-time error to declare a type
+/// parameter on the enum which does not have a valid well-bounded result
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E<T extends List> {
+  e1<List<int>>([42]),
+  e2<List<Null>>([null]);
+
+  const E2(T t);
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A13_t01.dart b/LanguageFeatures/Enhanced-Enum/semantics_A13_t01.dart
new file mode 100644
index 0000000..d6ba6a0
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A13_t01.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// The type parameters of the enum not having a well-bounded
+/// instantiate-to-bounds result and an enum element omitting the type arguments
+/// and not having arguments which valid type arguments can be inferred from
+/// (because an implicit EnumName(0, "foo", unrelatedArgs) constructor
+/// invocation requires a well-bound inferred type arguments for a generic
+/// EnumName enum)..
+///
+/// @description Check that it is a compile-time error to declare a ...
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  String toString([int index]);
+//       ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  void foo();
+//     ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+
+  String toString();
+//       ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  void foo();
+//     ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A14_t01.dart b/LanguageFeatures/Enhanced-Enum/semantics_A14_t01.dart
new file mode 100644
index 0000000..aed434b
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A14_t01.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Using a non-constant expression as argument of an enum value.
+///
+/// @description Check that it is a compile-time error if non-constant value is
+/// used as argument of an enum value
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+int i = 42;
+String s = "Lily was here";
+
+enum E1 {
+  e1<int>(i),
+//        ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e2<String>(s);
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  const E1(var v);
+}
+
+enum E2<T> {
+  e1<int>(i),
+//        ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  e2<String>("Type is $T");
+//                     ^
+// [analyzer] unspecified
+// [cfe] unspecified
+  const E2(T t);
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A15_t01.dart b/LanguageFeatures/Enhanced-Enum/semantics_A15_t01.dart
new file mode 100644
index 0000000..2e332a2
--- /dev/null
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A15_t01.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2022, 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 If the resulting class would have any naming conflicts, or other
+/// compile-time errors, the enum declaration is invalid and a compile-time
+/// error occurs. Such errors include, but are not limited to:
+/// ...
+/// Declaring a static member and inheriting an instance member with the same
+/// base-name.
+///
+/// @description Check that it is a compile-time error to declare a static
+/// member and inheriting an instance member with the same base-name.
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=enhanced-enums
+
+enum E1 {
+  e1,
+  e2,
+  e3;
+
+  static int get index => 0;
+//               ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  static String toString() => "E1";
+//              ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+enum E2<T> {
+  e1<int>(42),
+  e2<String>("42"),
+  e3<bool>(false);
+
+  const E2(T t);
+
+  static int get index => 0;
+//               ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+  static String toString() => "E2";
+//              ^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  E1.e1;
+  E2.e1;
+}
