diff --git a/LibTest/ffi/Abi/Abi.current_A01_t01.dart b/LibTest/ffi/Abi/Abi.current_A01_t01.dart
new file mode 100644
index 0000000..4dad1f5
--- /dev/null
+++ b/LibTest/ffi/Abi/Abi.current_A01_t01.dart
@@ -0,0 +1,18 @@
+// 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 Abi.current()
+/// The ABI the Dart VM is currently running on.
+///
+/// @description Checks that this method returns the ABI the Dart VM is
+/// currently running on
+/// @author sgrekhov@unipro.ru
+
+import "dart:ffi";
+import "../../../Utils/expect.dart";
+
+main() {
+  final abi = Abi.current();
+  Expect.isTrue(Abi.values.contains(abi));
+}
\ No newline at end of file
diff --git a/LibTest/ffi/Abi/Abi.current_A01_t02.dart b/LibTest/ffi/Abi/Abi.current_A01_t02.dart
new file mode 100644
index 0000000..3bd4a5c
--- /dev/null
+++ b/LibTest/ffi/Abi/Abi.current_A01_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 Abi.current()
+/// The ABI the Dart VM is currently running on.
+///
+/// @description Checks that this method returns the ABI the Dart VM is
+/// currently running on
+/// @author sgrekhov@unipro.ru
+
+import "dart:ffi";
+import 'dart:io';
+import "../../../Utils/expect.dart";
+
+main() {
+  final abi = Abi.current();
+  Expect.isTrue(Abi.values.contains(abi));
+  if (Platform.isAndroid) {
+    Expect.isTrue(
+        abi == Abi.androidArm ||
+            abi == Abi.androidArm64 ||
+            abi == Abi.androidIA32 ||
+            abi == Abi.androidX64,
+        abi.toString());
+  }
+  if (Platform.isFuchsia) {
+    Expect.isTrue(
+        abi == Abi.fuchsiaArm64 || abi == Abi.fuchsiaX64, abi.toString());
+  }
+  if (Platform.isIOS) {
+    Expect.isTrue(abi == Abi.iosArm || abi == Abi.iosArm64 || abi == Abi.iosX64,
+        abi.toString());
+  }
+  if (Platform.isLinux) {
+    Expect.isTrue(
+        abi == Abi.linuxArm ||
+            abi == Abi.linuxArm64 ||
+            abi == Abi.linuxX64 ||
+            abi == Abi.linuxIA32 ||
+            abi == Abi.linuxRiscv32 ||
+            abi == Abi.linuxRiscv64,
+        abi.toString());
+  }
+  if (Platform.isMacOS) {
+    Expect.isTrue(abi == Abi.macosX64 || abi == Abi.macosArm64, abi.toString());
+  }
+  if (Platform.isWindows) {
+    Expect.isTrue(
+        abi == Abi.windowsArm64 ||
+            abi == Abi.windowsIA32 ||
+            abi == Abi.windowsX64,
+        abi.toString());
+  }
+}
diff --git a/LibTest/ffi/Abi/Abi.toString_A01_t01.dart b/LibTest/ffi/Abi/Abi.toString_A01_t01.dart
new file mode 100644
index 0000000..5ae23e2
--- /dev/null
+++ b/LibTest/ffi/Abi/Abi.toString_A01_t01.dart
@@ -0,0 +1,27 @@
+// 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 @override
+/// String toString()
+/// override
+/// A string representation of this ABI.
+///
+// The string is equal to the 'on' part from Platform.version and dart --version
+///
+/// @description Checks that this method returns a string which is equal to the
+/// 'on' part from Platform.version
+/// @author sgrekhov@unipro.ru
+
+import "dart:ffi";
+import 'dart:io';
+import "../../../Utils/expect.dart";
+
+main() {
+  final abi = Abi.current();
+  String expected = Platform.version
+      .substring(Platform.version.indexOf(" on ") + 4)
+      .trim()
+      .replaceAll("\"", "");
+  Expect.equals(expected, abi.toString());
+}
diff --git a/LibTest/ffi/Abi/Abi.values_A01_t01.dart b/LibTest/ffi/Abi/Abi.values_A01_t01.dart
new file mode 100644
index 0000000..b556c09
--- /dev/null
+++ b/LibTest/ffi/Abi/Abi.values_A01_t01.dart
@@ -0,0 +1,25 @@
+// 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 values constant Null safety
+/// List<Abi> const values
+/// The ABIs that the DartVM can run on.
+///
+/// Does not contain a macosIA32. We have stopped supporting 32-bit MacOS.
+///
+/// Includes windowsArm64, even though it is currently not supported. Support
+/// has been requested for Flutter.
+/// https://github.com/flutter/flutter/issues/53120
+///
+/// @description Checks that this list contains `windowsArm64` and the current
+/// ABI
+/// @author sgrekhov@unipro.ru
+
+import "dart:ffi";
+import "../../../Utils/expect.dart";
+
+main() {
+  Expect.isTrue(Abi.values.contains(Abi.current()));
+  Expect.isTrue(Abi.values.contains(Abi.windowsArm64));
+}
\ No newline at end of file
