diff --git a/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp b/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
index c90c09e..ce661c3 100644
--- a/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
+++ b/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
@@ -216,10 +216,11 @@
         CompareVPDAction action{
             "/xyz/openbmc_project/inventory/system/chassis/disk_backplane",
             "CCIN", std::vector<uint8_t>{0x01, 0xA3, 0x0, 0xFF}};
-        EXPECT_EQ(action.toString(), "compare_vpd: { fru: "
-                                     "/xyz/openbmc_project/inventory/system/"
-                                     "chassis/disk_backplane, keyword: "
-                                     "CCIN, value: [ 0x1, 0xA3, 0x0, 0xFF ] }");
+        EXPECT_EQ(action.toString(),
+                  "compare_vpd: { fru: "
+                  "/xyz/openbmc_project/inventory/system/"
+                  "chassis/disk_backplane, keyword: "
+                  "CCIN, value: [ 0x1, 0xA3, 0x0, 0xFF ] }");
     }
 
     // Test where value vector is empty
@@ -227,9 +228,10 @@
         CompareVPDAction action{
             "/xyz/openbmc_project/inventory/system/chassis/disk_backplane",
             "CCIN", std::vector<uint8_t>{}};
-        EXPECT_EQ(action.toString(), "compare_vpd: { fru: "
-                                     "/xyz/openbmc_project/inventory/system/"
-                                     "chassis/disk_backplane, keyword: "
-                                     "CCIN, value: [  ] }");
+        EXPECT_EQ(action.toString(),
+                  "compare_vpd: { fru: "
+                  "/xyz/openbmc_project/inventory/system/"
+                  "chassis/disk_backplane, keyword: "
+                  "CCIN, value: [  ] }");
     }
 }
diff --git a/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp b/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp
index 609026e..165b57b 100644
--- a/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp
+++ b/phosphor-regulators/test/actions/i2c_compare_bit_action_tests.cpp
@@ -109,14 +109,15 @@
         // Test where actual bit value is equal to expected bit value.
         // Test all bits in register value 0x96 == 1001 0110).
         {
-            I2CCompareBitAction actions[] = {I2CCompareBitAction{0x7C, 7, 1},
-                                             I2CCompareBitAction{0x7C, 6, 0},
-                                             I2CCompareBitAction{0x7C, 5, 0},
-                                             I2CCompareBitAction{0x7C, 4, 1},
-                                             I2CCompareBitAction{0x7C, 3, 0},
-                                             I2CCompareBitAction{0x7C, 2, 1},
-                                             I2CCompareBitAction{0x7C, 1, 1},
-                                             I2CCompareBitAction{0x7C, 0, 0}};
+            I2CCompareBitAction actions[] = {
+                I2CCompareBitAction{0x7C, 7, 1},
+                I2CCompareBitAction{0x7C, 6, 0},
+                I2CCompareBitAction{0x7C, 5, 0},
+                I2CCompareBitAction{0x7C, 4, 1},
+                I2CCompareBitAction{0x7C, 3, 0},
+                I2CCompareBitAction{0x7C, 2, 1},
+                I2CCompareBitAction{0x7C, 1, 1},
+                I2CCompareBitAction{0x7C, 0, 0}};
             for (I2CCompareBitAction& action : actions)
             {
                 EXPECT_EQ(action.execute(env), true);
@@ -126,14 +127,15 @@
         // Test where actual bit value is not equal to expected bit value.
         // Test all bits in register value 0x96 == 1001 0110).
         {
-            I2CCompareBitAction actions[] = {I2CCompareBitAction{0x7C, 7, 0},
-                                             I2CCompareBitAction{0x7C, 6, 1},
-                                             I2CCompareBitAction{0x7C, 5, 1},
-                                             I2CCompareBitAction{0x7C, 4, 0},
-                                             I2CCompareBitAction{0x7C, 3, 1},
-                                             I2CCompareBitAction{0x7C, 2, 0},
-                                             I2CCompareBitAction{0x7C, 1, 0},
-                                             I2CCompareBitAction{0x7C, 0, 1}};
+            I2CCompareBitAction actions[] = {
+                I2CCompareBitAction{0x7C, 7, 0},
+                I2CCompareBitAction{0x7C, 6, 1},
+                I2CCompareBitAction{0x7C, 5, 1},
+                I2CCompareBitAction{0x7C, 4, 0},
+                I2CCompareBitAction{0x7C, 3, 1},
+                I2CCompareBitAction{0x7C, 2, 0},
+                I2CCompareBitAction{0x7C, 1, 0},
+                I2CCompareBitAction{0x7C, 0, 1}};
             for (I2CCompareBitAction& action : actions)
             {
                 EXPECT_EQ(action.execute(env), false);
diff --git a/phosphor-regulators/test/actions/set_device_action_tests.cpp b/phosphor-regulators/test/actions/set_device_action_tests.cpp
index 139abd1..2651f13 100644
--- a/phosphor-regulators/test/actions/set_device_action_tests.cpp
+++ b/phosphor-regulators/test/actions/set_device_action_tests.cpp
@@ -53,8 +53,8 @@
     idMap.addDevice(reg1);
 
     // Create Device regulator2 and add to IDMap
-    i2cInterface = i2c::create(1, 0x72,
-                               i2c::I2CInterface::InitialState::CLOSED);
+    i2cInterface =
+        i2c::create(1, 0x72, i2c::I2CInterface::InitialState::CLOSED);
     Device reg2{
         "regulator2", true,
         "/xyz/openbmc_project/inventory/system/chassis/motherboard/reg2",
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index 7963430..f5892bf 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -293,11 +293,11 @@
             EXPECT_CALL(*i2cInterface, close).Times(1);
 
             // Create Device
-            auto device =
-                std::make_unique<Device>("vdd0_reg", true,
-                                         "/xyz/openbmc_project/inventory/"
-                                         "system/chassis/motherboard/vdd0_reg",
-                                         std::move(i2cInterface));
+            auto device = std::make_unique<Device>(
+                "vdd0_reg", true,
+                "/xyz/openbmc_project/inventory/"
+                "system/chassis/motherboard/vdd0_reg",
+                std::move(i2cInterface));
             devices.emplace_back(std::move(device));
         }
 
@@ -309,11 +309,11 @@
             EXPECT_CALL(*i2cInterface, close).Times(1);
 
             // Create Device
-            auto device =
-                std::make_unique<Device>("vdd1_reg", true,
-                                         "/xyz/openbmc_project/inventory/"
-                                         "system/chassis/motherboard/vdd1_reg",
-                                         std::move(i2cInterface));
+            auto device = std::make_unique<Device>(
+                "vdd1_reg", true,
+                "/xyz/openbmc_project/inventory/"
+                "system/chassis/motherboard/vdd1_reg",
+                std::move(i2cInterface));
             devices.emplace_back(std::move(device));
         }
 
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index 5aaa2fe..021a02a 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -74,8 +74,8 @@
         std::vector<std::unique_ptr<Rule>> rules{};
         std::vector<std::unique_ptr<Chassis>> chassisVec{};
         chassisVec.emplace_back(std::move(chassis));
-        this->system = std::make_unique<System>(std::move(rules),
-                                                std::move(chassisVec));
+        this->system =
+            std::make_unique<System>(std::move(rules), std::move(chassisVec));
     }
 
   protected:
@@ -455,8 +455,8 @@
             EXPECT_CALL(*action, execute).Times(0);
             std::vector<std::unique_ptr<Action>> actions{};
             actions.emplace_back(std::move(action));
-            configuration = std::make_unique<Configuration>(volts,
-                                                            std::move(actions));
+            configuration =
+                std::make_unique<Configuration>(volts, std::move(actions));
         }
 
         // Create Device
@@ -516,8 +516,8 @@
                 std::make_unique<Configuration>(volts, std::move(actions));
 
             // Create Rail
-            auto rail = std::make_unique<Rail>("vdd0",
-                                               std::move(configuration));
+            auto rail =
+                std::make_unique<Rail>("vdd0", std::move(configuration));
             rails.emplace_back(std::move(rail));
         }
 
@@ -533,8 +533,8 @@
                 std::make_unique<Configuration>(volts, std::move(actions));
 
             // Create Rail
-            auto rail = std::make_unique<Rail>("vio0",
-                                               std::move(configuration));
+            auto rail =
+                std::make_unique<Rail>("vio0", std::move(configuration));
             rails.emplace_back(std::move(rail));
         }
 
diff --git a/phosphor-regulators/test/id_map_tests.cpp b/phosphor-regulators/test/id_map_tests.cpp
index 6c8d1ca..15ace68 100644
--- a/phosphor-regulators/test/id_map_tests.cpp
+++ b/phosphor-regulators/test/id_map_tests.cpp
@@ -68,8 +68,8 @@
     // Test where device ID already exists in map
     try
     {
-        i2cInterface = i2c::create(1, 0x72,
-                                   i2c::I2CInterface::InitialState::CLOSED);
+        i2cInterface =
+            i2c::create(1, 0x72, i2c::I2CInterface::InitialState::CLOSED);
         Device device2{"vio_reg", true,
                        "/xyz/openbmc_project/inventory/system/chassis/"
                        "motherboard/vio_reg2",
diff --git a/phosphor-regulators/test/phase_fault_detection_tests.cpp b/phosphor-regulators/test/phase_fault_detection_tests.cpp
index d7fa5f3..c85970c 100644
--- a/phosphor-regulators/test/phase_fault_detection_tests.cpp
+++ b/phosphor-regulators/test/phase_fault_detection_tests.cpp
@@ -108,8 +108,8 @@
         std::vector<std::unique_ptr<Rule>> rules{};
         std::vector<std::unique_ptr<Chassis>> chassisVec{};
         chassisVec.emplace_back(std::move(chassis));
-        this->system = std::make_unique<System>(std::move(rules),
-                                                std::move(chassisVec));
+        this->system =
+            std::make_unique<System>(std::move(rules), std::move(chassisVec));
     }
 
   protected:
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index 6cff029..1ea34b3 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -102,8 +102,8 @@
     // Create Chassis that contains Device
     std::vector<std::unique_ptr<Device>> devices{};
     devices.emplace_back(std::move(device));
-    auto chassis = std::make_unique<Chassis>(1, chassisInvPath,
-                                             std::move(devices));
+    auto chassis =
+        std::make_unique<Chassis>(1, chassisInvPath, std::move(devices));
     Chassis* chassisPtr = chassis.get();
 
     // Create System that contains Chassis
@@ -157,8 +157,8 @@
     // Create Chassis that contains Device
     std::vector<std::unique_ptr<Device>> devices{};
     devices.emplace_back(std::move(device));
-    auto chassis = std::make_unique<Chassis>(1, chassisInvPath,
-                                             std::move(devices));
+    auto chassis =
+        std::make_unique<Chassis>(1, chassisInvPath, std::move(devices));
 
     // Create System that contains Chassis
     std::vector<std::unique_ptr<Rule>> rules{};
diff --git a/phosphor-regulators/test/test_utils.hpp b/phosphor-regulators/test/test_utils.hpp
index e04dd6d..b3df87a 100644
--- a/phosphor-regulators/test/test_utils.hpp
+++ b/phosphor-regulators/test/test_utils.hpp
@@ -55,9 +55,8 @@
  * @param railIDs rail IDs (optional)
  * @return Device object
  */
-inline std::unique_ptr<Device>
-    createDevice(const std::string& id,
-                 const std::vector<std::string>& railIDs = {})
+inline std::unique_ptr<Device> createDevice(
+    const std::string& id, const std::vector<std::string>& railIDs = {})
 {
     // Create Rails (if any)
     std::vector<std::unique_ptr<Rail>> rails{};
