diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index e38fbdd1241ba64f49b95f706fbc777bd0b87b4b..56b47f9677fdc66311402c9a9cc4ecdb6552e534 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -160,6 +160,7 @@ add_executable (unit_tests
   set(checkpointing_TESTS
     test_checkpointing_PrintCheckpointInfo.cpp
     test_checkpointing_PrintScriptFrom.cpp
+    test_checkpointing_ResumingManager.cpp
     test_checkpointing_ResumingUtils.cpp
     test_checkpointing_SetResumeFrom.cpp
   )
diff --git a/tests/test_checkpointing_PrintScriptFrom.cpp b/tests/test_checkpointing_PrintScriptFrom.cpp
index 64e9d9fffcd985d9e5841c8210d32af31c28edb7..0896124064e6aa2542f9d4f0996b961485845be2 100644
--- a/tests/test_checkpointing_PrintScriptFrom.cpp
+++ b/tests/test_checkpointing_PrintScriptFrom.cpp
@@ -9,7 +9,7 @@
 
 // clazy:excludeall=non-pod-global-static
 
-TEST_CASE("PrintScriptFrom", "[utils/checkpointing]")
+TEST_CASE("checkpointing_PrintScriptFrom", "[utils/checkpointing]")
 {
 #ifdef PUGS_HAS_HDF5
 
diff --git a/tests/test_checkpointing_ResumingManager.cpp b/tests/test_checkpointing_ResumingManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1d5da95081d179894d66fe04306af877e0af676b
--- /dev/null
+++ b/tests/test_checkpointing_ResumingManager.cpp
@@ -0,0 +1,95 @@
+#include <catch2/catch_test_macros.hpp>
+#include <catch2/matchers/catch_matchers_all.hpp>
+
+#include <utils/HighFivePugsUtils.hpp>
+#include <utils/Messenger.hpp>
+#include <utils/checkpointing/ResumingManager.hpp>
+
+#include <filesystem>
+
+// clazy:excludeall=non-pod-global-static
+
+TEST_CASE("checkpointing_ResumingManager", "[utils/checkpointing]")
+{
+  // Need to destroy the instance created in the main for tests
+  REQUIRE_NOTHROW(ResumingManager::destroy());
+
+#ifndef NDEBUG
+  REQUIRE_THROWS_WITH(ResumingManager::destroy(), "Resuming manager was not created");
+  REQUIRE_THROWS_WITH(ResumingManager::getInstance(), "instance was not created");
+#endif   // NDEBUG
+
+  REQUIRE_NOTHROW(ResumingManager::create());
+
+#ifndef NDEBUG
+  REQUIRE_THROWS_WITH(ResumingManager::create(), "Resuming manager was already created");
+#endif   // NDEBUG
+
+#ifdef PUGS_HAS_HDF5
+  std::string tmp_dirname;
+  {
+    {
+      if (parallel::rank() == 0) {
+        tmp_dirname = [&]() -> std::string {
+          std::string temp_filename = std::filesystem::temp_directory_path() / "pugs_checkpointing_XXXXXX";
+          return std::string{mkdtemp(&temp_filename[0])};
+        }();
+      }
+      parallel::broadcast(tmp_dirname, 0);
+    }
+    std::filesystem::path path = tmp_dirname;
+    const std::string filename = path / "checkpoint.h5";
+
+    {
+      HighFive::FileAccessProps fapl;
+      fapl.add(HighFive::MPIOFileAccess{MPI_COMM_WORLD, MPI_INFO_NULL});
+      fapl.add(HighFive::MPIOCollectiveMetadata{});
+      HighFive::File file = HighFive::File(filename, HighFive::File::Truncate, fapl);
+
+      {
+        HighFive::Group cp = file.createGroup("/resuming_checkpoint");
+        cp.createAttribute("id", 13ul);
+      }
+    }
+
+    parallel::barrier();
+    REQUIRE_NOTHROW(ResumingManager::getInstance().setFilename(filename));
+    REQUIRE(ResumingManager::getInstance().filename() == filename);
+
+    REQUIRE(ResumingManager::getInstance().checkpointId() == 13);
+  }
+
+  parallel::barrier();
+  if (parallel::rank() == 0) {
+    std::filesystem::remove_all(std::filesystem::path{tmp_dirname});
+  }
+
+#else   // PUGS_HAS_HDF5
+
+  ResumingManager::getInstance().setFilename("useless");
+  REQUIRE(ResumingManager::getInstance().filename() == "useless");
+  REQUIRE(ResumingManager::getInstance().checkpointId() == 0);
+
+#endif   // PUGS_HAS_HDF5
+
+  ResumingManager::getInstance().currentASTLevel()  = 3;
+  ResumingManager::getInstance().checkpointNumber() = 7;
+  ResumingManager::getInstance().setIsResuming(false);
+
+  REQUIRE(ResumingManager::getInstance().currentASTLevel() == 3);
+  REQUIRE(ResumingManager::getInstance().checkpointNumber() == 7);
+  REQUIRE(not ResumingManager::getInstance().isResuming());
+
+  ResumingManager::getInstance().currentASTLevel()  = 1;
+  ResumingManager::getInstance().checkpointNumber() = 5;
+  ResumingManager::getInstance().setIsResuming(true);
+
+  REQUIRE(ResumingManager::getInstance().currentASTLevel() == 1);
+  REQUIRE(ResumingManager::getInstance().checkpointNumber() == 5);
+  REQUIRE(ResumingManager::getInstance().isResuming());
+
+  REQUIRE_NOTHROW(ResumingManager::destroy());
+
+  // Recreate ResumingManager for remaining tests
+  REQUIRE_NOTHROW(ResumingManager::create());
+}
diff --git a/tests/test_checkpointing_ResumingUtils.cpp b/tests/test_checkpointing_ResumingUtils.cpp
index 585d7d8a3f6017ee69fae6647c5cb5a00a4280ad..23c8e7e99d36e009a2f8f6b04d53da4c28183331 100644
--- a/tests/test_checkpointing_ResumingUtils.cpp
+++ b/tests/test_checkpointing_ResumingUtils.cpp
@@ -9,7 +9,7 @@
 
 // clazy:excludeall=non-pod-global-static
 
-TEST_CASE("ResumingUtils", "[utils/checkpointing]")
+TEST_CASE("checkpointing_ResumingUtils", "[utils/checkpointing]")
 {
 #ifdef PUGS_HAS_HDF5
 
diff --git a/tests/test_checkpointing_SetResumeFrom.cpp b/tests/test_checkpointing_SetResumeFrom.cpp
index eb945250f4b242b378e199cef7e9d9721826d4a8..bead609386049914cc3a55edcab77651f67812e4 100644
--- a/tests/test_checkpointing_SetResumeFrom.cpp
+++ b/tests/test_checkpointing_SetResumeFrom.cpp
@@ -9,7 +9,7 @@
 
 // clazy:excludeall=non-pod-global-static
 
-TEST_CASE("SetResumeFrom", "[utils/checkpointing]")
+TEST_CASE("checkpointing_SetResumeFrom", "[utils/checkpointing]")
 {
 #ifdef PUGS_HAS_HDF5