ZeroTierOne/zeroidc/vendor/instant/tests/wasm.rs

58 lines
1.5 KiB
Rust

extern crate wasm_bindgen_test;
use instant::{Instant, SystemTime};
use std::time::Duration;
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
// run these tests using: wasm-pack test --chrome --headless -- --features wasm-bindgen
#[wasm_bindgen_test]
fn test_instant_now() {
let now = Instant::now();
#[cfg(feature = "inaccurate")]
while now.elapsed().as_millis() == 0 {}
#[cfg(not(feature = "inaccurate"))]
assert!(now.elapsed().as_nanos() > 0);
}
#[wasm_bindgen_test]
fn test_duration() {
let now = Instant::now();
let one_sec = Duration::from_secs(1);
assert!(now.elapsed() < one_sec);
}
// Duration::new will overflow when you have u64::MAX seconds and one billion nanoseconds.
// <https://doc.rust-lang.org/std/time/struct.Duration.html#method.new>
const ONE_BILLION: u32 = 1_000_000_000;
#[wasm_bindgen_test]
fn test_checked_add() {
let now = Instant::now();
assert!(now.checked_add(Duration::from_millis(1)).is_some());
assert_eq!(
None,
now.checked_add(Duration::new(u64::MAX, ONE_BILLION - 1))
);
}
#[wasm_bindgen_test]
fn test_checked_sub() {
let now = Instant::now();
assert!(now.checked_sub(Duration::from_millis(1)).is_some());
assert!(now
.checked_sub(Duration::new(u64::MAX, ONE_BILLION - 1))
.is_none());
}
#[wasm_bindgen_test]
fn test_system_time() {
assert!(SystemTime::UNIX_EPOCH
.duration_since(SystemTime::now())
.is_err());
}