#1205. More functions/methods equality tests added
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A02_t05.dart b/LanguageFeatures/Constructor-tear-offs/equality_A02_t05.dart
new file mode 100644
index 0000000..231b158
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A02_t05.dart
@@ -0,0 +1,43 @@
+// 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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of instantiated top level generic functions
+/// @author sgrekhov@unipro.ru
+/// @issue 47329
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+X topLevelFunction1<X>(X x) => x;
+
+const cTlf1 = topLevelFunction1<int>;
+const int Function(int) cTlf1_2 = topLevelFunction1;
+var vTlf1 = topLevelFunction1<int>;
+int Function(int) vTlf1_2 = topLevelFunction1;
+
+main() {
+  const cTlf1_3 = topLevelFunction1<int>;
+  const int Function(int) cTlf1_4 = topLevelFunction1;
+  var vTlf1_3 = topLevelFunction1<int>;
+  int Function(int) vTlf1_4 = topLevelFunction1;
+
+  const CheckIdentical(cTlf1, cTlf1_2);
+  Expect.equals(cTlf1, cTlf1_2);
+  Expect.equals(cTlf1_3, cTlf1_4);
+  Expect.equals(cTlf1, cTlf1_4);
+
+  Expect.equals(vTlf1, vTlf1_2);
+  Expect.equals(vTlf1_3, vTlf1_4);
+  Expect.equals(vTlf1, vTlf1_4);
+  Expect.identical(vTlf1, vTlf1_2);
+  Expect.identical(vTlf1_3, vTlf1_4);
+  Expect.identical(vTlf1, vTlf1_4);
+
+  Expect.identical(cTlf1, vTlf1);
+  Expect.identical(cTlf1, vTlf1_3);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A02_t06.dart b/LanguageFeatures/Constructor-tear-offs/equality_A02_t06.dart
new file mode 100644
index 0000000..cb5be33
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A02_t06.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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of instantiated top level generic functions
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+X topLevelFunction1<X>(X x) => x;
+X topLevelFunction2<X>(X x) => x;
+
+main() {
+  <X>() {
+    var f1_1 = topLevelFunction1<X>;
+    var f1_2 = topLevelFunction1<X>;
+    X Function(X) f1_3 = topLevelFunction1;
+    var f2 = topLevelFunction2<X>;
+
+    Expect.equals(f1_1, f1_2);
+    Expect.equals(f1_1, f1_3);
+    Expect.equals(f1_2, f1_3);
+    Expect.notEquals(f1_1, f2);
+  }<int>();
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A03_t04.dart b/LanguageFeatures/Constructor-tear-offs/equality_A03_t04.dart
new file mode 100644
index 0000000..e38dfe6
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A03_t04.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 Test equality of function and methods tearoffs.
+///
+/// @description Checks that the equality properties of any function object
+/// obtained by generic function instantiation is determined by the equality of
+/// the source function objects
+/// @author sgrekhov@unipro.ru
+/// @issue 47317
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+typedef IntAlias = int;
+
+main() {
+  X localFunction<X>(X x) => x;
+
+  var f1_1 = localFunction;
+  var f1_2 = localFunction;
+  var f2_1 = f1_1<int>;
+  var f2_2 = f1_2<IntAlias>;
+
+  Expect.equals(f1_1 == f1_2, f2_1 == f2_2);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A03_t05.dart b/LanguageFeatures/Constructor-tear-offs/equality_A03_t05.dart
new file mode 100644
index 0000000..1558aa8
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A03_t05.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 Test equality of function and methods tearoffs.
+///
+/// @description Checks that the equality properties of any function object
+/// obtained by generic function instantiation is determined by the equality of
+/// the source function objects
+/// @author sgrekhov@unipro.ru
+/// @issue 47317
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+main() {
+  X localFunction1<X>(X x) => x;
+  X localFunction2<X>(X x) => x;
+  <X>() {
+    var f1_1 = localFunction1;
+    var f1_2 = localFunction1;
+
+    var f1_3 = localFunction1<X>;
+    var f1_4 = localFunction1<X>;
+    X Function(X) f1_5 = localFunction1;
+    var f2 = localFunction2<X>;
+
+    Expect.equals(f1_1 == f1_2, f1_3 == f1_4);
+    Expect.equals(f1_1 == f1_3, f1_3 == f1_5);
+    Expect.notEquals(f1_3, f2);
+    Expect.notEquals(f1_4, f2);
+    Expect.notEquals(f1_5, f2);
+  }<int>();
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A04_t04.dart b/LanguageFeatures/Constructor-tear-offs/equality_A04_t04.dart
index b5cfc67..bc3f052 100644
--- a/LanguageFeatures/Constructor-tear-offs/equality_A04_t04.dart
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A04_t04.dart
@@ -7,6 +7,7 @@
 ///
 /// @description Checks equality of instantiated generic static methods tearoffs
 /// @author sgrekhov@unipro.ru
+/// @issue 47329
 
 // SharedOptions=--enable-experiment=constructor-tearoffs
 
@@ -18,10 +19,16 @@
 }
 
 main() {
+  const c1 = C.foo1<int>;
+  const int Function(int) c2 = C.foo1;
+  const c3 = C.foo2<int>;
   var v1 = C.foo1<int>;
   int Function(int) v2 = C.foo1;
   var v3 = C.foo2<int>;
 
+  const CheckIdentical(c1, c2);
+  Expect.identical(v1, c1);
+  Expect.notEquals(c2, c3);
   Expect.identical(v1, v2);
-  Expect.notEquals(v1, v3);
+  Expect.notEquals(v2, v3);
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A04_t06.dart b/LanguageFeatures/Constructor-tear-offs/equality_A04_t06.dart
new file mode 100644
index 0000000..69bfb8b
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A04_t06.dart
@@ -0,0 +1,36 @@
+// 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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of instantiated generic static methods tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  static X foo1<X>(X x) => x;
+  static X foo2<X>(X x) => x;
+}
+
+typedef IntAlias = int;
+
+main() {
+  const c1 = C.foo1<int>;
+  const c2 = C.foo1<IntAlias>;
+  const c3 = C.foo2<IntAlias>;
+  var v1 = C.foo1<IntAlias>;
+  var v2 = C.foo1<int>;
+  var v3 = C.foo2<int>;
+
+  const CheckIdentical(c1, c2);
+  Expect.notEquals(c3, c1);
+  Expect.equals(c1, v1);
+  Expect.identical(v1, v2);
+  Expect.identical(c3, v3);
+  Expect.notEquals(v1, v3);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A04_t07.dart b/LanguageFeatures/Constructor-tear-offs/equality_A04_t07.dart
new file mode 100644
index 0000000..0fa9599
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A04_t07.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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of instantiated generic static methods tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  static X foo1<X>(X x) => x;
+  static X foo2<X>(X x) => x;
+}
+
+main() {
+  <X>() {
+    var v1 = C.foo1<X>;
+    var v2 = C.foo1<X>;
+    var v3 = C.foo2<X>;
+
+    Expect.equals(v1, v2);
+    Expect.notEquals(v1, v3);
+  }<int>();
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A05_t01.dart b/LanguageFeatures/Constructor-tear-offs/equality_A05_t01.dart
new file mode 100644
index 0000000..31ac79d
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A05_t01.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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of non-generic instance methods tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  void foo1() {}
+  void foo2() {}
+}
+
+main() {
+  C c1 = new C();
+  C c2 = new C();
+  var v1_1_1 = c1.foo1;
+  var v1_1_2 = c1.foo1;
+  var v1_2 = c1.foo2;
+  var v2_1_1 = c2.foo1;
+  var v2_2 = c2.foo2;
+
+  Expect.equals(v1_1_1, v1_1_2);
+  Expect.notEquals(v1_1_1, v1_2);
+  Expect.notEquals(v2_1_1, v1_1_1);
+  Expect.notEquals(v1_2, v2_2);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A05_t02.dart b/LanguageFeatures/Constructor-tear-offs/equality_A05_t02.dart
new file mode 100644
index 0000000..23b9ff2
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A05_t02.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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of generic instance methods tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  X foo1<X>(X x) => x;
+  X foo2<X>(X x) => x;
+}
+
+main() {
+  C c1 = new C();
+  C c2 = new C();
+  var v1_1_1 = c1.foo1;
+  var v1_1_2 = c1.foo1;
+  var v1_2 = c1.foo2;
+  var v2_1_1 = c2.foo1;
+  var v2_2 = c2.foo2;
+
+  Expect.equals(v1_1_1, v1_1_2);
+  Expect.notEquals(v1_1_1, v1_2);
+  Expect.notEquals(v2_1_1, v1_1_1);
+  Expect.notEquals(v1_2, v2_2);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A05_t03.dart b/LanguageFeatures/Constructor-tear-offs/equality_A05_t03.dart
new file mode 100644
index 0000000..103936d
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A05_t03.dart
@@ -0,0 +1,34 @@
+// 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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of instantiated generic instance methods
+/// tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  X foo1<X>(X x) => x;
+  X foo2<X>(X x) => x;
+}
+
+main() {
+  C c1 = new C();
+  C c2 = new C();
+  var v1_1_1 = c1.foo1<int>;
+  var v1_1_2 = c1.foo1<int>;
+  var v1_2 = c1.foo2<int>;
+  var v2_1_1 = c2.foo1<int>;
+  var v2_2 = c2.foo2<int>;
+
+  Expect.equals(v1_1_1, v1_1_2);
+  Expect.notEquals(v1_1_1, v1_2);
+  Expect.notEquals(v2_1_1, v1_1_1);
+  Expect.notEquals(v1_2, v2_2);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A05_t04.dart b/LanguageFeatures/Constructor-tear-offs/equality_A05_t04.dart
new file mode 100644
index 0000000..ee37f25
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A05_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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of non-generic instance methods tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  X foo1<X>(X x) => x;
+  X foo2<X>(X x) => x;
+}
+
+typedef IntAlias = int;
+
+main() {
+  C c1 = new C();
+  C c2 = new C();
+  var v1_1_1 = c1.foo1<IntAlias>;
+  var v1_1_2 = c1.foo1<int>;
+  var v1_2 = c1.foo2<int>;
+  var v2_1_1 = c2.foo1<int>;
+  var v2_2 = c2.foo2<int>;
+
+  Expect.equals(v1_1_1, v1_1_2);
+  Expect.notEquals(v1_1_1, v1_2);
+  Expect.notEquals(v2_1_1, v1_1_1);
+  Expect.notEquals(v1_2, v2_2);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A05_t05.dart b/LanguageFeatures/Constructor-tear-offs/equality_A05_t05.dart
new file mode 100644
index 0000000..c46d298
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A05_t05.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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of instantiated generic instance methods
+/// tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  X foo1<X>(X x) => x;
+  X foo2<X>(X x) => x;
+}
+
+main() {
+  C c = new C();
+  var v1 = c.foo1<int>;
+  int Function(int) v2 = c.foo1;
+  var v3 = c.foo2<int>;
+
+  Expect.equals(v1, v2);
+  Expect.notEquals(v1, v3);
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/equality_A05_t06.dart b/LanguageFeatures/Constructor-tear-offs/equality_A05_t06.dart
new file mode 100644
index 0000000..2d930f7
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/equality_A05_t06.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 Test equality of function and methods tearoffs.
+/// https://github.com/dart-lang/language/issues/1712
+///
+/// @description Checks equality of non-generic instance methods tearoffs
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  X foo1<X>(X x) => x;
+  X foo2<X>(X x) => x;
+}
+
+main() {
+  <X>() {
+    C c1 = new C();
+    C c2 = new C();
+    var v1_1_1 = c1.foo1<X>;
+    var v1_1_2 = c1.foo1<X>;
+    var v1_2 = c1.foo2<X>;
+    var v2_1_1 = c2.foo1<X>;
+    var v2_2 = c2.foo2<X>;
+
+    Expect.equals(v1_1_1, v1_1_2);
+    Expect.notEquals(v1_1_1, v1_2);
+    Expect.notEquals(v2_1_1, v1_1_1);
+    Expect.notEquals(v1_2, v2_2);
+  }<int>();
+}