Files
Jungfraujoch/tests/TimeTest.cpp

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));
}