diff --git a/.clang-tidy b/.clang-tidy
index 0b9563b..2c7ef0a 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -251,7 +251,8 @@
 readability-static-accessed-through-instance,
 readability-static-definition-in-anonymous-namespace,
 readability-suspicious-call-argument,
-readability-uniqueptr-delete-release'
+readability-uniqueptr-delete-release,
+readability-uppercase-literal-suffix'
 
 WarningsAsErrors: '*'
 HeaderFilterRegex: '.*'
diff --git a/test/test_activation.cpp b/test/test_activation.cpp
index b7ec3d5..27e0c66 100644
--- a/test/test_activation.cpp
+++ b/test/test_activation.cpp
@@ -332,7 +332,7 @@
     activation->requestedActivation(RequestedStatus::Active);
 
     const auto& psuQueue = getPsuQueue();
-    EXPECT_EQ(3u, psuQueue.size());
+    EXPECT_EQ(3U, psuQueue.size());
 
     // Only 3 PSUs shall be updated, and psu1 shall be skipped
     EXPECT_EQ(Status::Activating, activation->activation());
diff --git a/test/test_item_updater.cpp b/test/test_item_updater.cpp
index 58125c7..096e15f 100644
--- a/test/test_item_updater.cpp
+++ b/test/test_item_updater.cpp
@@ -180,10 +180,10 @@
 
     // Verify there is only one activation and it has two associations
     const auto& activations = GetActivations();
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     const auto& activation = activations.find(version0)->second;
     const auto& assocs = activation->associations();
-    EXPECT_EQ(2u, assocs.size());
+    EXPECT_EQ(2U, assocs.size());
     EXPECT_EQ(psu0, std::get<2>(assocs[0]));
     EXPECT_EQ(psu1, std::get<2>(assocs[1]));
 }
@@ -234,15 +234,15 @@
 
     // Verify there are two activations and each with one association
     const auto& activations = GetActivations();
-    EXPECT_EQ(2u, activations.size());
+    EXPECT_EQ(2U, activations.size());
     const auto& activation0 = activations.find(version0)->second;
     const auto& assocs0 = activation0->associations();
-    EXPECT_EQ(1u, assocs0.size());
+    EXPECT_EQ(1U, assocs0.size());
     EXPECT_EQ(psu0, std::get<2>(assocs0[0]));
 
     const auto& activation1 = activations.find(version1)->second;
     const auto& assocs1 = activation1->associations();
-    EXPECT_EQ(1u, assocs1.size());
+    EXPECT_EQ(1U, assocs1.size());
     EXPECT_EQ(psu1, std::get<2>(assocs1[0]));
 }
 
@@ -426,17 +426,17 @@
 
     // Verify there is only one activation and it has two associations
     const auto& activations = GetActivations();
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     const auto& activation = activations.find(version0)->second;
     auto assocs = activation->associations();
-    EXPECT_EQ(2u, assocs.size());
+    EXPECT_EQ(2U, assocs.size());
     EXPECT_EQ(psu0, std::get<2>(assocs[0]));
     EXPECT_EQ(psu1, std::get<2>(assocs[1]));
 
     // PSU0 is removed, only associations shall be updated
     onPsuInventoryChanged(psu0, propRemoved);
     assocs = activation->associations();
-    EXPECT_EQ(1u, assocs.size());
+    EXPECT_EQ(1U, assocs.size());
     EXPECT_EQ(psu1, std::get<2>(assocs[0]));
 
     // PSU1 is removed, the activation and version object shall be removed
@@ -597,7 +597,7 @@
     activations.emplace(newVersionId, std::move(dummyActivation));
     auto& activation = activations.find(version0)->second;
     auto assocs = activation->associations();
-    EXPECT_EQ(2u, assocs.size());
+    EXPECT_EQ(2U, assocs.size());
     EXPECT_EQ(psu0, std::get<2>(assocs[0]));
     EXPECT_EQ(psu1, std::get<2>(assocs[1]));
 
@@ -607,7 +607,7 @@
 
     // Now the activation should have one association
     assocs = activation->associations();
-    EXPECT_EQ(1u, assocs.size());
+    EXPECT_EQ(1U, assocs.size());
     EXPECT_EQ(psu1, std::get<2>(assocs[0]));
 
     EXPECT_CALL(mockedUtils, isAssociated(StrEq(psu1), _))
@@ -615,7 +615,7 @@
     itemUpdater->onUpdateDone(newVersionId, psu1);
 
     // Now the activation shall be erased and only the dummy one is left
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     EXPECT_NE(activations.find(newVersionId), activations.end());
 }
 
@@ -670,17 +670,17 @@
 
     // After psu0 is done, two activations should be left
     itemUpdater->onUpdateDone(newVersionId, psu0);
-    EXPECT_EQ(2u, activations.size());
+    EXPECT_EQ(2U, activations.size());
     const auto& activation1 = activations.find(version1)->second;
     const auto& assocs1 = activation1->associations();
-    EXPECT_EQ(1u, assocs1.size());
+    EXPECT_EQ(1U, assocs1.size());
     EXPECT_EQ(psu1, std::get<2>(assocs1[0]));
 
     EXPECT_CALL(mockedUtils, isAssociated(StrEq(psu1), _))
         .WillOnce(Return(true));
     // After psu1 is done, only the dummy activation should be left
     itemUpdater->onUpdateDone(newVersionId, psu1);
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     EXPECT_NE(activations.find(newVersionId), activations.end());
 }
 
diff --git a/test/test_utils.cpp b/test/test_utils.cpp
index a93af26..114b93a 100644
--- a/test/test_utils.cpp
+++ b/test/test_utils.cpp
@@ -58,7 +58,7 @@
         .WillOnce(Return(0)); /* end of std::vector */
 
     auto ret = utils::getPSUInventoryPath(bus);
-    EXPECT_EQ(2u, ret.size());
+    EXPECT_EQ(2U, ret.size());
     EXPECT_EQ(path0, ret[0]);
     EXPECT_EQ(path1, ret[1]);
 }
@@ -69,7 +69,7 @@
     EXPECT_EQ("", ret);
 
     ret = utils::getVersionId("some version");
-    EXPECT_EQ(8u, ret.size());
+    EXPECT_EQ(8U, ret.size());
 }
 
 TEST(Utils, IsAssociated)
diff --git a/test/test_version.cpp b/test/test_version.cpp
index 7da0352..d447e10 100644
--- a/test/test_version.cpp
+++ b/test/test_version.cpp
@@ -66,7 +66,7 @@
     writeFile(manifestFilePath, validManifest);
     auto ret = Version::getValues(manifestFilePath.string(),
                                   {"purpose", "version", "extended_version"});
-    EXPECT_EQ(3u, ret.size());
+    EXPECT_EQ(3U, ret.size());
     auto purpose = ret["purpose"];
     auto version = ret["version"];
     auto extVersion = ret["extended_version"];
@@ -85,7 +85,7 @@
 
     extVersion = "manufacturer=TestManu,model=TestModel";
     ret = Version::getExtVersionInfo(extVersion);
-    EXPECT_EQ(2u, ret.size());
+    EXPECT_EQ(2U, ret.size());
     EXPECT_EQ("TestManu", ret["manufacturer"]);
     EXPECT_EQ("TestModel", ret["model"]);
 }
@@ -96,7 +96,7 @@
     writeFile(manifestFilePath, validManifestWithCRLF);
     auto ret = Version::getValues(manifestFilePath.string(),
                                   {"purpose", "version", "extended_version"});
-    EXPECT_EQ(3u, ret.size());
+    EXPECT_EQ(3U, ret.size());
     auto purpose = ret["purpose"];
     auto version = ret["version"];
     auto extVersion = ret["extended_version"];
