1 use std::time::Duration; 2 3 /// A sequence of strongly monotonic inrceasing durations. Introduced for testing conversions from 4 /// `Duration` to platform-specific types. 5 pub(crate) const MONOTONIC_DURATIONS: [Duration; 17] = [ 6 Duration::ZERO, 7 Duration::from_nanos(1), 8 Duration::from_millis(1), 9 Duration::from_secs(1), 10 Duration::from_secs(i16::MAX as u64 - 1), 11 Duration::from_secs(i16::MAX as u64), 12 Duration::from_secs(i16::MAX as u64 + 1), 13 Duration::from_secs(i32::MAX as u64 - 1), 14 Duration::from_secs(i32::MAX as u64), 15 Duration::from_secs(i32::MAX as u64 + 1), 16 Duration::from_secs(i64::MAX as u64 - 1), 17 Duration::from_secs(i64::MAX as u64), 18 Duration::from_secs(i64::MAX as u64 + 1), 19 Duration::from_secs(u64::MAX - 1), 20 Duration::from_secs(u64::MAX), 21 Duration::new(u64::MAX, 1_000_000), 22 Duration::MAX, 23 ]; 24 25 #[cfg(test)] 26 mod tests { 27 use super::*; 28 29 #[test] basic_durations_properties()30 fn basic_durations_properties() { 31 assert_eq!(Duration::ZERO, *MONOTONIC_DURATIONS.first().unwrap()); 32 assert_eq!(Duration::MAX, *MONOTONIC_DURATIONS.last().unwrap()); 33 34 // Check that this array is monotonic. 35 let mut last = MONOTONIC_DURATIONS[0]; 36 for next in MONOTONIC_DURATIONS { 37 assert!(last <= next); 38 last = next; 39 } 40 } 41 } 42