diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t01.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t01.dart
new file mode 100644
index 0000000..3e0bbcc
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t01.dart
@@ -0,0 +1,36 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  C? c = C(42);
+  WeakReference<C> wr = WeakReference(c);
+  Expect.equals(c, wr.target);
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.equals(c, wr.target);
+  c = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t02.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t02.dart
new file mode 100644
index 0000000..c487816
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t02.dart
@@ -0,0 +1,37 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  List<C> refs = List.filled(5, C(42), growable: true);
+
+  WeakReference<C> wr = WeakReference(refs[0]);
+  Expect.equals(refs[0], wr.target);
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.equals(refs[1], wr.target);
+  refs.clear();
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t03.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t03.dart
new file mode 100644
index 0000000..3f5ba47
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t03.dart
@@ -0,0 +1,37 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+C? c = C(42);
+
+main() async {
+  WeakReference<C> wr = WeakReference(c!);
+  Expect.equals(c, wr.target);
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.equals(c, wr.target);
+  c = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t04.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t04.dart
new file mode 100644
index 0000000..ae3c716
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t04.dart
@@ -0,0 +1,39 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  C? c = C(42);
+  dynamic d = c;
+  WeakReference<C> wr = WeakReference(c);
+  Expect.equals(c, wr.target);
+  c = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNotNull(wr.target);
+  Expect.equals(d, wr.target);
+  d = 42;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t05.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t05.dart
new file mode 100644
index 0000000..1ad3027
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t05.dart
@@ -0,0 +1,48 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "dart:async";
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  C? c1 = C(42);
+  WeakReference<C> wr = WeakReference(c1);
+  asyncStart();
+  Future<C?>.delayed(Duration(milliseconds: 1), () => c1).then((C? c2) async {
+    Expect.isNotNull(wr.target);
+    Expect.equals(c1, wr.target);
+    triggerGc();
+    await Future.delayed(Duration(milliseconds: 5));
+    Expect.isNotNull(wr.target);
+    c2 = null;
+    triggerGc();
+    Expect.isNull(wr.target);
+    asyncEnd();
+  });
+  Expect.isNotNull(wr.target);
+  Expect.equals(c1, wr.target);
+  await Future.delayed(Duration(milliseconds: 2));
+  c1 = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNotNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t06.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t06.dart
new file mode 100644
index 0000000..9fabe93
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t06.dart
@@ -0,0 +1,48 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "dart:async";
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  C? c1 = C(42);
+  WeakReference<C> wr = WeakReference(c1);
+  asyncStart();
+  Future<C?>.delayed(Duration(milliseconds: 1), () => c1).then((C? c2) async {
+    Expect.isNotNull(wr.target);
+    Expect.equals(c1, wr.target);
+    triggerGc();
+    await Future.delayed(Duration(milliseconds: 1));
+    Expect.isNotNull(wr.target);
+    c2 = null;
+    triggerGc();
+    await Future.delayed(Duration(milliseconds: 1));
+    Expect.isNotNull(wr.target);
+    asyncEnd();
+  });
+  Expect.isNotNull(wr.target);
+  Expect.equals(c1, wr.target);
+  await Future.delayed(Duration(milliseconds: 10));
+  c1 = null;
+  triggerGc();
+  Expect.isNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t07.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t07.dart
new file mode 100644
index 0000000..5d8eac9
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t07.dart
@@ -0,0 +1,42 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  C? c1 = C(42);
+  C? c2 = c1;
+  WeakReference<C> wr = WeakReference(c1);
+  Expect.equals(c1, wr.target);
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.equals(c1, wr.target);
+  c1 = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNotNull(wr.target);
+  Expect.equals(c2, wr.target);
+  c2 = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNull(wr.target);
+}
diff --git a/LanguageFeatures/FinalizationRegistry/weak_reference_target_t08.dart b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t08.dart
new file mode 100644
index 0000000..e946b02
--- /dev/null
+++ b/LanguageFeatures/FinalizationRegistry/weak_reference_target_t08.dart
@@ -0,0 +1,40 @@
+// 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 target property
+/// T? target
+/// The current object weakly referenced by this, if any.
+///
+/// The value is either the object supplied in the constructor, or null if the
+/// weak reference has been cleared.
+///
+/// @description Check that the value of this property value is either the
+/// object supplied in the constructor, or null if the weak reference has been
+/// cleared
+/// @author sgrekhov@unipro.ru
+
+import "gc_utils_lib.dart";
+import "../../Utils/expect.dart";
+
+class C {
+  int id;
+  C(this.id);
+}
+
+main() async {
+  C? c = C(42);
+  WeakReference<C> wr1 = WeakReference(c);
+  WeakReference<C> wr2 = WeakReference(c);
+  Expect.equals(c, wr1.target);
+  Expect.equals(c, wr2.target);
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.equals(c, wr1.target);
+  Expect.equals(c, wr2.target);
+  c = null;
+  triggerGc();
+  await Future.delayed(Duration(milliseconds: 1));
+  Expect.isNull(wr1.target);
+  Expect.isNull(wr2.target);
+}
