diff --git a/tests/src/params/report_params.hpp b/tests/src/params/report_params.hpp
index 19ea519..56f619a 100644
--- a/tests/src/params/report_params.hpp
+++ b/tests/src/params/report_params.hpp
@@ -121,7 +121,7 @@
              {LabeledSensorInfo{"Service",
                                 "/xyz/openbmc_project/sensors/power/p1",
                                 "metadata1"}},
-             OperationType::single,
+             OperationType::avg,
              "MetricId1",
              CollectionTimeScope::point,
              CollectionDuration(Milliseconds(0u))},
@@ -129,7 +129,7 @@
              {LabeledSensorInfo{"Service",
                                 "/xyz/openbmc_project/sensors/power/p2",
                                 "metadata2"}},
-             OperationType::single,
+             OperationType::avg,
              "MetricId2",
              CollectionTimeScope::point,
              CollectionDuration(Milliseconds(0u))}}};
diff --git a/tests/src/test_metric.cpp b/tests/src/test_metric.cpp
index fcb2ded..31eabc6 100644
--- a/tests/src/test_metric.cpp
+++ b/tests/src/test_metric.cpp
@@ -173,41 +173,29 @@
     }
 };
 
-MetricParams defaultSingleParams()
+MetricParams defaultCollectionFunctionParams()
 {
     return MetricParams()
-        .operationType(OperationType::single)
         .readings(TestMetricCalculationFunctions::defaultReadings())
         .expectedReading(systemTimestamp + 16ms, 7.0);
 }
 
-INSTANTIATE_TEST_SUITE_P(
-    OperationSingleReturnsLastReading, TestMetricCalculationFunctions,
-    Values(
-        defaultSingleParams().collectionTimeScope(CollectionTimeScope::point),
-        defaultSingleParams()
-            .collectionTimeScope(CollectionTimeScope::interval)
-            .collectionDuration(CollectionDuration(100ms)),
-        defaultSingleParams().collectionTimeScope(
-            CollectionTimeScope::startup)));
-
 MetricParams defaultPointParams()
 {
-    return defaultSingleParams().collectionTimeScope(
+    return defaultCollectionFunctionParams().collectionTimeScope(
         CollectionTimeScope::point);
 }
 
 INSTANTIATE_TEST_SUITE_P(
     TimeScopePointReturnsLastReading, TestMetricCalculationFunctions,
-    Values(defaultPointParams().operationType(OperationType::single),
-           defaultPointParams().operationType(OperationType::min),
+    Values(defaultPointParams().operationType(OperationType::min),
            defaultPointParams().operationType(OperationType::max),
            defaultPointParams().operationType(OperationType::sum),
            defaultPointParams().operationType(OperationType::avg)));
 
 MetricParams defaultMinParams()
 {
-    return defaultSingleParams().operationType(OperationType::min);
+    return defaultCollectionFunctionParams().operationType(OperationType::min);
 }
 
 INSTANTIATE_TEST_SUITE_P(
@@ -226,7 +214,7 @@
 
 MetricParams defaultMaxParams()
 {
-    return defaultSingleParams().operationType(OperationType::max);
+    return defaultCollectionFunctionParams().operationType(OperationType::max);
 }
 
 INSTANTIATE_TEST_SUITE_P(
@@ -249,7 +237,7 @@
 
 MetricParams defaultSumParams()
 {
-    return defaultSingleParams().operationType(OperationType::sum);
+    return defaultCollectionFunctionParams().operationType(OperationType::sum);
 }
 
 INSTANTIATE_TEST_SUITE_P(
@@ -275,7 +263,7 @@
 
 MetricParams defaultAvgParams()
 {
-    return defaultSingleParams().operationType(OperationType::avg);
+    return defaultCollectionFunctionParams().operationType(OperationType::avg);
 }
 
 INSTANTIATE_TEST_SUITE_P(
diff --git a/tests/src/test_report.cpp b/tests/src/test_report.cpp
index 4e3ce8d..765f8e4 100644
--- a/tests/src/test_report.cpp
+++ b/tests/src/test_report.cpp
@@ -364,7 +364,7 @@
                         {tstring::Path::str(),
                          "/xyz/openbmc_project/sensors/power/p1"},
                         {tstring::Metadata::str(), "metadata1"}}}},
-                     {tstring::OperationType::str(), OperationType::single},
+                     {tstring::OperationType::str(), OperationType::avg},
                      {tstring::Id::str(), "MetricId1"},
                      {tstring::CollectionTimeScope::str(),
                       CollectionTimeScope::point},
@@ -374,7 +374,7 @@
                         {tstring::Path::str(),
                          "/xyz/openbmc_project/sensors/power/p2"},
                         {tstring::Metadata::str(), "metadata2"}}}},
-                     {tstring::OperationType::str(), OperationType::single},
+                     {tstring::OperationType::str(), OperationType::avg},
                      {tstring::Id::str(), "MetricId2"},
                      {tstring::CollectionTimeScope::str(),
                       CollectionTimeScope::point},
diff --git a/tests/src/test_report_manager.cpp b/tests/src/test_report_manager.cpp
index fca6451..f4ce184 100644
--- a/tests/src/test_report_manager.cpp
+++ b/tests/src/test_report_manager.cpp
@@ -103,6 +103,13 @@
                 Eq(ReportManager::maxReports));
 }
 
+TEST_F(TestReportManager, returnsPropertySupportedOperationTypes)
+{
+    EXPECT_THAT(
+        getProperty<std::vector<std::string>>("SupportedOperationTypes"),
+        UnorderedElementsAre("Maximum", "Minimum", "Average", "Summation"));
+}
+
 TEST_F(TestReportManager, addReport)
 {
     EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
@@ -220,7 +227,7 @@
             {LabeledSensorInfo{"Service",
                                "/xyz/openbmc_project/sensors/power/p1",
                                "Metadata1"}},
-            OperationType::single,
+            OperationType::avg,
             "MetricId1",
             CollectionTimeScope::point,
             CollectionDuration(Milliseconds(0u))}}});
@@ -254,7 +261,7 @@
     {
         metricParams.emplace_back(
             LabeledMetricParameters{{},
-                                    OperationType::single,
+                                    OperationType::avg,
                                     "MetricId1",
                                     CollectionTimeScope::point,
                                     CollectionDuration(Milliseconds(0u))});
@@ -369,9 +376,8 @@
 };
 
 INSTANTIATE_TEST_SUITE_P(_, TestReportManagerWithAggregationOperationType,
-                         Values(OperationType::single, OperationType::max,
-                                OperationType::min, OperationType::avg,
-                                OperationType::sum));
+                         Values(OperationType::max, OperationType::min,
+                                OperationType::avg, OperationType::sum));
 
 TEST_P(TestReportManagerWithAggregationOperationType,
        addReportWithDifferentOperationTypes)
diff --git a/tests/src/test_transform.cpp b/tests/src/test_transform.cpp
index 66fa855..3f7c5f9 100644
--- a/tests/src/test_transform.cpp
+++ b/tests/src/test_transform.cpp
@@ -13,7 +13,8 @@
     std::vector<int> input = {1, 2, 3};
     std::vector<std::string> output =
         utils::transform(input, [](int v) { return std::to_string(v); });
-    EXPECT_TRUE(utils::detail::has_member_reserve_v<std::vector<std::string>>);
+    EXPECT_TRUE(utils::detail::has_member_reserve<decltype(input)>);
+    EXPECT_TRUE(utils::detail::has_member_reserve<decltype(output)>);
     ASSERT_THAT(output, ElementsAre("1", "2", "3"));
 }
 
@@ -22,6 +23,18 @@
     std::set<int> input = {1, 2, 3};
     std::set<std::string> output =
         utils::transform(input, [](int v) { return std::to_string(v); });
-    EXPECT_FALSE(utils::detail::has_member_reserve_v<std::set<std::string>>);
+    EXPECT_FALSE(utils::detail::has_member_reserve<decltype(input)>);
+    EXPECT_FALSE(utils::detail::has_member_reserve<decltype(output)>);
+    ASSERT_THAT(output, ElementsAre("1", "2", "3"));
+}
+
+TEST(TestTransform, transformsArrayToVector)
+{
+    std::array<int, 3> input = {1, 2, 3};
+    std::vector<std::string> output =
+        utils::transform<std::vector<std::string>>(
+            input, [](int v) { return std::to_string(v); });
+    EXPECT_FALSE(utils::detail::has_member_reserve<decltype(input)>);
+    EXPECT_TRUE(utils::detail::has_member_reserve<decltype(output)>);
     ASSERT_THAT(output, ElementsAre("1", "2", "3"));
 }
