1#[cfg(not(target_arch = "wasm32"))]
8pub use std::time::{Instant, SystemTime, UNIX_EPOCH};
9
10#[cfg(target_arch = "wasm32")]
11pub use web_time::{Instant, SystemTime, UNIX_EPOCH};
12
13pub fn now() -> SystemTime {
17 SystemTime::now()
18}
19
20pub fn timestamp_secs() -> u64 {
22 now().duration_since(UNIX_EPOCH)
23 .expect("time went backwards")
24 .as_secs()
25}
26
27#[cfg(test)]
28mod test {
29 use std::time::Duration;
30
31 use super::*;
32
33 #[cfg(target_arch = "wasm32")]
34 use wasm_bindgen_test::wasm_bindgen_test;
35 #[cfg(target_arch = "wasm32")]
36 wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
37
38 #[cfg_attr(not(target_arch = "wasm32"), test)]
40 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
41 fn timestamp_is_a_recent_unix_time() {
42 let ts = timestamp_secs();
43 assert!(ts > 1_750_000_000, "{}", ts);
44 }
45
46 #[cfg_attr(not(target_arch = "wasm32"), test)]
48 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
49 fn wall_clock_is_after_the_epoch() {
50 assert!(now().duration_since(UNIX_EPOCH).is_ok());
51 }
52
53 #[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
55 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
56 async fn instant_measures_elapsed_time() {
57 let start = Instant::now();
58 crate::sleep(Duration::from_millis(20)).await;
59 assert!(start.elapsed() >= Duration::from_millis(20), "{:?}", start.elapsed());
60 }
61}
62