summaryrefslogtreecommitdiffstats
path: root/vendor/proptest/src/arbitrary/_std/time.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/proptest/src/arbitrary/_std/time.rs')
-rw-r--r--vendor/proptest/src/arbitrary/_std/time.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/vendor/proptest/src/arbitrary/_std/time.rs b/vendor/proptest/src/arbitrary/_std/time.rs
new file mode 100644
index 000000000..7d940439a
--- /dev/null
+++ b/vendor/proptest/src/arbitrary/_std/time.rs
@@ -0,0 +1,50 @@
+//-
+// Copyright 2017, 2018 The proptest developers
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! Arbitrary implementations for `std::time`.
+
+use core::ops::Range;
+use std::time::*;
+
+use crate::arbitrary::*;
+use crate::num;
+use crate::strategy::statics::{self, static_map};
+
+arbitrary!(Duration, SMapped<(u64, u32), Self>;
+ static_map(any::<(u64, u32)>(), |(a, b)| Duration::new(a, b))
+);
+
+// Instant::now() "never" returns the same Instant, so no shrinking may occur!
+arbitrary!(Instant; Self::now());
+
+arbitrary!(
+ // We can't use `any::<Duration>()` because the addition to `SystemTime`
+ // can overflow and panic. To be conservative, we only allow seconds to go
+ // to i32::MAX since a certain popular OS still uses `i32` to represent the
+ // seconds counter.
+ SystemTime, statics::Map<(num::i32::Any, Range<u32>),
+ fn ((i32, u32)) -> SystemTime>;
+ static_map((num::i32::ANY, 0..1_000_000_000u32),
+ |(sec, ns)| {
+ if sec >= 0 {
+ UNIX_EPOCH + Duration::new(sec as u64, ns)
+ } else {
+ UNIX_EPOCH - Duration::new((-(sec as i64)) as u64, ns)
+ }
+ })
+);
+
+#[cfg(test)]
+mod test {
+ no_panic_test!(
+ duration => Duration,
+ instant => Instant,
+ system_time => SystemTime
+ );
+}