diff --git a/src/vcpkg-test/metrics.cpp b/src/vcpkg-test/metrics.cpp index e069ae4826..434a60cb21 100644 --- a/src/vcpkg-test/metrics.cpp +++ b/src/vcpkg-test/metrics.cpp @@ -4,6 +4,8 @@ #include +#include +#include #include using namespace vcpkg; @@ -292,3 +294,32 @@ TEST_CASE ("parse metrics response", "[metrics]") auto parsed_with_errors2 = parse_metrics_response(response_with_errors2); CHECK(!parsed_with_errors2); } + +TEST_CASE ("track_elapsed_us clamps invalid values", "[metrics]") +{ + MetricsSubmission submission; + + // Negative values should be clamped to 0 + submission.track_elapsed_us(-100.0); + CHECK(submission.elapsed_us == 0.0); + + // NaN should be clamped to 0 + submission.track_elapsed_us(std::numeric_limits::quiet_NaN()); + CHECK(submission.elapsed_us == 0.0); + + // Positive infinity should be clamped to 0 + submission.track_elapsed_us(std::numeric_limits::infinity()); + CHECK(submission.elapsed_us == 0.0); + + // Negative infinity should be clamped to 0 + submission.track_elapsed_us(-std::numeric_limits::infinity()); + CHECK(submission.elapsed_us == 0.0); + + // Valid positive value should be stored as-is + submission.track_elapsed_us(42.5); + CHECK(submission.elapsed_us == 42.5); + + // Zero should be stored as-is + submission.track_elapsed_us(0.0); + CHECK(submission.elapsed_us == 0.0); +} diff --git a/src/vcpkg/metrics.cpp b/src/vcpkg/metrics.cpp index 04ce6154b3..fd71356398 100644 --- a/src/vcpkg/metrics.cpp +++ b/src/vcpkg/metrics.cpp @@ -188,9 +188,9 @@ namespace vcpkg void MetricsSubmission::track_elapsed_us(double value) { - if (!isfinite(value) || value <= 0.0) + if (!isfinite(value) || value < 0.0) { - Checks::unreachable(VCPKG_LINE_INFO); + value = 0.0; } elapsed_us = value;