summaryrefslogtreecommitdiffstats
path: root/library/std/src/time/tests.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
commit9835e2ae736235810b4ea1c162ca5e65c547e770 (patch)
tree3fcebf40ed70e581d776a8a4c65923e8ec20e026 /library/std/src/time/tests.rs
parentReleasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff)
downloadrustc-9835e2ae736235810b4ea1c162ca5e65c547e770.tar.xz
rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.zip
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/std/src/time/tests.rs')
-rw-r--r--library/std/src/time/tests.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/library/std/src/time/tests.rs b/library/std/src/time/tests.rs
index 2e64ae59a..6ed84806e 100644
--- a/library/std/src/time/tests.rs
+++ b/library/std/src/time/tests.rs
@@ -1,4 +1,5 @@
use super::{Duration, Instant, SystemTime, UNIX_EPOCH};
+use core::fmt::Debug;
#[cfg(not(target_arch = "wasm32"))]
use test::{black_box, Bencher};
@@ -201,6 +202,32 @@ fn since_epoch() {
assert!(a < hundred_twenty_years);
}
+#[test]
+fn big_math() {
+ // Check that the same result occurs when adding/subtracting each duration one at a time as when
+ // adding/subtracting them all at once.
+ #[track_caller]
+ fn check<T: Eq + Copy + Debug>(start: Option<T>, op: impl Fn(&T, Duration) -> Option<T>) {
+ const DURATIONS: [Duration; 2] =
+ [Duration::from_secs(i64::MAX as _), Duration::from_secs(50)];
+ if let Some(start) = start {
+ assert_eq!(
+ op(&start, DURATIONS.into_iter().sum()),
+ DURATIONS.into_iter().try_fold(start, |t, d| op(&t, d))
+ )
+ }
+ }
+
+ check(SystemTime::UNIX_EPOCH.checked_sub(Duration::from_secs(100)), SystemTime::checked_add);
+ check(SystemTime::UNIX_EPOCH.checked_add(Duration::from_secs(100)), SystemTime::checked_sub);
+
+ let instant = Instant::now();
+ check(instant.checked_sub(Duration::from_secs(100)), Instant::checked_add);
+ check(instant.checked_sub(Duration::from_secs(i64::MAX as _)), Instant::checked_add);
+ check(instant.checked_add(Duration::from_secs(100)), Instant::checked_sub);
+ check(instant.checked_add(Duration::from_secs(i64::MAX as _)), Instant::checked_sub);
+}
+
macro_rules! bench_instant_threaded {
($bench_name:ident, $thread_count:expr) => {
#[bench]