50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#include <catch2/catch_all.hpp>
|
|
#include "../common/time_utc.h"
|
|
|
|
TEST_CASE("Time_round trip", "[time_UTC][parse_UTC_to_ms]") {
|
|
// Current time → string → ms → back to string
|
|
auto now = std::chrono::system_clock::now();
|
|
std::string utc = time_UTC(now);
|
|
uint64_t ms = parse_UTC_to_ms(utc);
|
|
|
|
// Allow small rounding differences due to truncation
|
|
auto back_tp = std::chrono::system_clock::time_point(std::chrono::milliseconds(ms));
|
|
auto diff = duration_cast<std::chrono::milliseconds>(now - back_tp).count();
|
|
|
|
INFO("UTC: " << utc);
|
|
CHECK(std::abs(diff) < 2); // within 2ms round-trip tolerance
|
|
}
|
|
|
|
TEST_CASE("Time_parse_UTC_to_ms", "[parse_UTC_to_ms]") {
|
|
uint64_t ms = parse_UTC_to_ms("1970-01-01T00:00:00.000Z");
|
|
CHECK(ms == 0);
|
|
|
|
ms = parse_UTC_to_ms("1970-01-01T00:00:00.001Z");
|
|
CHECK(ms == 1);
|
|
|
|
ms = parse_UTC_to_ms("1970-01-01T00:00:00.530Z");
|
|
CHECK(ms == 530);
|
|
|
|
ms = parse_UTC_to_ms("1970-01-01T00:00:01.000Z");
|
|
CHECK(ms == 1000);
|
|
|
|
ms = parse_UTC_to_ms("1972-01-01T00:00:00.006Z");
|
|
CHECK(ms == 2 * 365 * 24 * 60 * 60 * 1000UL + 6);
|
|
|
|
ms = parse_UTC_to_ms("2025-11-01T14:32:15.123Z");
|
|
CHECK(ms > 0);
|
|
}
|
|
|
|
TEST_CASE("Time_to_UTC", "[time_UTC]") {
|
|
using namespace std::chrono;
|
|
auto tp = system_clock::time_point(milliseconds(0));
|
|
std::string s = time_UTC(tp);
|
|
CHECK(s == "1970-01-01T00:00:00.000Z");
|
|
|
|
// Regex to validate ISO format
|
|
std::regex iso(R"(^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$)");
|
|
CHECK(std::regex_match(s, iso));
|
|
} |