All checks were successful
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 7m47s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 7m20s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 8m13s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 7m10s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 7m53s
Build Packages / build:rpm (rocky8) (push) Successful in 7m57s
Build Packages / Generate python client (push) Successful in 13s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 7m39s
Build Packages / Create release (push) Has been skipped
Build Packages / Build documentation (push) Successful in 36s
Build Packages / build:rpm (rocky9) (push) Successful in 9m0s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 6m55s
Build Packages / Unit tests (push) Successful in 1h10m44s
This is an UNSTABLE release. * Fixes in CI pipeline * jfjoch_broker: Remove PNG preview, no dependency on libpng * jfjoch_writer: Fix UTC timestamp being generated wrong (mix between milli- and microseconds) * jfjoch_viewer: Show data collection time in dataset tooltip * jfjoch_viewer: Allow to choose the calibrant (presets for LaB6 and silver behenate) * jfjoch_viewer: Auto foreground value * Use external libjpeg-turbo and libtiff: simpler build stack, these are built and linked statically in automated Docker builds * Remove OpenBLAS dependency Reviewed-on: #1 Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch> Co-committed-by: Filip Leonarski <filip.leonarski@psi.ch>
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));
|
|
} |