// Copyright 2024 The Pigweed Authors // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. #include "pw_allocator/metrics.h" #include "pw_unit_test/framework.h" namespace { using ::pw::allocator::NoMetrics; using ::pw::allocator::internal::AllMetrics; TEST(MetricsTest, NoMetricsPresent) { #define EXPECT_METRIC_MISSING(metric_name) \ EXPECT_FALSE(NoMetrics::has_##metric_name()); PW_ALLOCATOR_METRICS_FOREACH(EXPECT_METRIC_MISSING); #undef EXPECT_METRIC_MISSING } TEST(MetricsTest, NoMetricsEnabled) { #define EXPECT_METRIC_DISABLED(metric_name) \ EXPECT_FALSE(NoMetrics::metric_name##_enabled()); PW_ALLOCATOR_METRICS_FOREACH(EXPECT_METRIC_DISABLED); EXPECT_FALSE(pw::allocator::internal::AnyEnabled()); #undef EXPECT_METRIC_DISABLED } TEST(MetricsTest, TraitsAreConstexpr) { #define FAIL_IF_PRESENT(metric_name) \ if constexpr (NoMetrics::has_##metric_name()) { \ FAIL(); \ } PW_ALLOCATOR_METRICS_FOREACH(FAIL_IF_PRESENT); #undef FAIL_IF_PRESENT } TEST(MetricsTest, GetMissingMetricsReturnsNotFound) { NoMetrics metrics; pw::StatusWithSize result; #define EXPECT_GET_MISSING_IS_NOT_FOUND(metric_name) \ result = metrics.get_##metric_name(); \ EXPECT_EQ(result.status(), pw::Status::NotFound()); PW_ALLOCATOR_METRICS_FOREACH(EXPECT_GET_MISSING_IS_NOT_FOUND); #undef EXPECT_GET_MISSING_IS_NOT_FOUND } TEST(MetricsTest, AllMetricsPresent) { #define EXPECT_METRIC_PRESENT(metric_name) \ EXPECT_TRUE(AllMetrics::has_##metric_name()); PW_ALLOCATOR_METRICS_FOREACH(EXPECT_METRIC_PRESENT); #undef EXPECT_METRIC_PRESENT } TEST(MetricsTest, AllMetricsEnabled) { #define EXPECT_METRIC_ENABLED(metric_name) \ EXPECT_TRUE(AllMetrics::metric_name##_enabled()); PW_ALLOCATOR_METRICS_FOREACH(EXPECT_METRIC_ENABLED); EXPECT_TRUE(pw::allocator::internal::AnyEnabled()); #undef EXPECT_METRIC_ENABLED } TEST(MetricsTest, GetPresentMetricsReturnsOk) { AllMetrics metrics; pw::StatusWithSize result; #define EXPECT_GET_PRESENT_IS_OK(metric_name) \ result = metrics.get_##metric_name(); \ EXPECT_EQ(result.status(), pw::OkStatus()); \ EXPECT_EQ(result.size(), 0u); PW_ALLOCATOR_METRICS_FOREACH(EXPECT_GET_PRESENT_IS_OK); #undef EXPECT_GET_PRESENT_IS_OK } } // namespace