feat(common): монотонные часы (B §8)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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, "монотонные секунды не должны идти назад");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user