feat(common): монотонные часы (B §8)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-24 11:55:47 +03:00
parent ab012381d0
commit 70045e2544
+25 -1
View File
@@ -1 +1,25 @@
//! Монотонные часы — B §8 (наполняется в Task 4).
//! Монотонные часы — B §8: lifecycle-таймеры/`Uptime` идут только вперёд, не прыгают при NTP/GPS-синке.
//! На Linux `Instant` опирается на `CLOCK_MONOTONIC`.
use std::sync::OnceLock;
use std::time::Instant;
static EPOCH: OnceLock<Instant> = OnceLock::new();
/// Секунды от первого обращения в процессе (монотонно). Достаточно для стаб-`Uptime` (v0).
pub fn monotonic_secs() -> u64 {
let epoch = *EPOCH.get_or_init(Instant::now);
epoch.elapsed().as_secs()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn non_decreasing() {
let a = monotonic_secs();
let b = monotonic_secs();
assert!(b >= a, "монотонные секунды не должны идти назад");
}
}