Files
Jungfraujoch/tests/TimeTest.cpp
Filip Leonarski 8b356a7001
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
v1.0.0-rc.96 (#1)
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>
2025-11-02 13:45:57 +01:00

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