use chrono::Utc;
#[inline]
pub fn unix_secs() -> i64 {
Utc::now().timestamp()
}
#[inline]
pub fn unix_secs_f64() -> f64 {
let now = Utc::now();
now.timestamp() as f64 + now.timestamp_subsec_nanos() as f64 / 1_000_000_000.0
}
#[inline]
pub fn unix_nanos_entropy() -> u64 {
let now = Utc::now();
(now.timestamp() as u64) ^ (now.timestamp_subsec_nanos() as u64)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unix_secs_is_after_2020() {
assert!(unix_secs() > 1_577_836_800, "clock read looks unset");
}
#[test]
fn unix_secs_f64_tracks_unix_secs() {
let f = unix_secs_f64();
let i = unix_secs();
assert!((f - i as f64).abs() < 2.0, "f={f} i={i}");
}
#[test]
fn entropy_varies_from_zero() {
assert_ne!(unix_nanos_entropy(), 0);
}
}