diff --git a/core/meta/CMakeLists.txt b/core/meta/CMakeLists.txt
index 46aaa705f82fae23244863be3d2b658a00c97ab0..df84a83948043738bf30ec220997236847e98580 100644
--- a/core/meta/CMakeLists.txt
+++ b/core/meta/CMakeLists.txt
@@ -12,3 +12,6 @@ ROOT_OBJECT_LIBRARY(Meta ${sources})
 
 ROOT_INSTALL_HEADERS()
 
+if(testing)
+  add_subdirectory(test)
+endif()
diff --git a/core/meta/test/CMakeLists.txt b/core/meta/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..07724e30a4eccafa3fd2e8652b759bd25d8b6969
--- /dev/null
+++ b/core/meta/test/CMakeLists.txt
@@ -0,0 +1 @@
+ROOT_ADD_GTEST(testStatusBitsChecker testStatusBitsChecker.cxx LIBRARIES Core)
diff --git a/core/meta/test/testStatusBitsChecker.cxx b/core/meta/test/testStatusBitsChecker.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..49934932b1233be0b243d6ac20e12820d686fd6f
--- /dev/null
+++ b/core/meta/test/testStatusBitsChecker.cxx
@@ -0,0 +1,32 @@
+#include "TStatusBitsChecker.h"
+
+#include "TClass.h"
+#include "TInterpreter.h"
+
+#include "gtest/gtest.h"
+
+const char* gCode = R"CODE(
+   struct ClassWithOverlap : public TObject {
+      enum EStatusBits {
+         kOverlappingBit = BIT(13)
+      };
+   };
+)CODE";
+
+void MakeClassWithOverlap() {
+   gInterpreter->Declare(gCode);
+}
+
+TEST(StatusBitsChecker,NoOverlap)
+{
+   EXPECT_TRUE(ROOT::Detail::TStatusBitsChecker::Check("TObject"));
+   EXPECT_TRUE(ROOT::Detail::TStatusBitsChecker::Check("TNamed"));
+   EXPECT_TRUE(ROOT::Detail::TStatusBitsChecker::Check("TStreamerElement"));
+}
+
+TEST(StatusBitsChecker,Overlap)
+{
+   MakeClassWithOverlap();
+   EXPECT_NE(nullptr,TClass::GetClass("ClassWithOverlap"));
+   EXPECT_FALSE(ROOT::Detail::TStatusBitsChecker::Check("ClassWithOverlap"));
+}