Skip to content

Commit d72d5f4

Browse files
Dogfood Duration API in std::time tests
This expands time's test suite to use more and in more places the range of methods and constants added to Duration in recent proposals for the sake of testing more API surface area and improving legibility.
1 parent 22e6b9c commit d72d5f4

File tree

3 files changed

+62
-61
lines changed

3 files changed

+62
-61
lines changed

library/core/tests/time.rs

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -108,24 +108,26 @@ fn sub() {
108108

109109
#[test]
110110
fn checked_sub() {
111-
let zero = Duration::new(0, 0);
112-
let one_nano = Duration::new(0, 1);
113-
let one_sec = Duration::new(1, 0);
114-
assert_eq!(one_nano.checked_sub(zero), Some(Duration::new(0, 1)));
115-
assert_eq!(one_sec.checked_sub(one_nano), Some(Duration::new(0, 999_999_999)));
116-
assert_eq!(zero.checked_sub(one_nano), None);
117-
assert_eq!(zero.checked_sub(one_sec), None);
111+
let zero = Duration::zero();
112+
assert_eq!(Duration::NANOSECOND.checked_sub(zero), Some(Duration::NANOSECOND));
113+
assert_eq!(
114+
Duration::SECOND.checked_sub(Duration::NANOSECOND),
115+
Some(Duration::new(0, 999_999_999))
116+
);
117+
assert_eq!(zero.checked_sub(Duration::NANOSECOND), None);
118+
assert_eq!(zero.checked_sub(Duration::SECOND), None);
118119
}
119120

120121
#[test]
121122
fn saturating_sub() {
122123
let zero = Duration::new(0, 0);
123-
let one_nano = Duration::new(0, 1);
124-
let one_sec = Duration::new(1, 0);
125-
assert_eq!(one_nano.saturating_sub(zero), Duration::new(0, 1));
126-
assert_eq!(one_sec.saturating_sub(one_nano), Duration::new(0, 999_999_999));
127-
assert_eq!(zero.saturating_sub(one_nano), Duration::MIN);
128-
assert_eq!(zero.saturating_sub(one_sec), Duration::MIN);
124+
assert_eq!(Duration::NANOSECOND.saturating_sub(zero), Duration::NANOSECOND);
125+
assert_eq!(
126+
Duration::SECOND.saturating_sub(Duration::NANOSECOND),
127+
Duration::new(0, 999_999_999)
128+
);
129+
assert_eq!(zero.saturating_sub(Duration::NANOSECOND), Duration::MIN);
130+
assert_eq!(zero.saturating_sub(Duration::SECOND), Duration::MIN);
129131
}
130132

131133
#[test]
@@ -343,80 +345,78 @@ fn duration_const() {
343345
const IS_ZERO: bool = ZERO.is_zero();
344346
assert!(IS_ZERO);
345347

346-
const ONE: Duration = Duration::new(1, 0);
347-
348-
const SECONDS: u64 = ONE.as_secs();
348+
const SECONDS: u64 = Duration::SECOND.as_secs();
349349
assert_eq!(SECONDS, 1);
350350

351351
const FROM_SECONDS: Duration = Duration::from_secs(1);
352-
assert_eq!(FROM_SECONDS, ONE);
352+
assert_eq!(FROM_SECONDS, Duration::SECOND);
353353

354-
const SECONDS_F32: f32 = ONE.as_secs_f32();
354+
const SECONDS_F32: f32 = Duration::SECOND.as_secs_f32();
355355
assert_eq!(SECONDS_F32, 1.0);
356356

357357
const FROM_SECONDS_F32: Duration = Duration::from_secs_f32(1.0);
358-
assert_eq!(FROM_SECONDS_F32, ONE);
358+
assert_eq!(FROM_SECONDS_F32, Duration::SECOND);
359359

360-
const SECONDS_F64: f64 = ONE.as_secs_f64();
360+
const SECONDS_F64: f64 = Duration::SECOND.as_secs_f64();
361361
assert_eq!(SECONDS_F64, 1.0);
362362

363363
const FROM_SECONDS_F64: Duration = Duration::from_secs_f64(1.0);
364-
assert_eq!(FROM_SECONDS_F64, ONE);
364+
assert_eq!(FROM_SECONDS_F64, Duration::SECOND);
365365

366-
const MILLIS: u128 = ONE.as_millis();
366+
const MILLIS: u128 = Duration::SECOND.as_millis();
367367
assert_eq!(MILLIS, 1_000);
368368

369369
const FROM_MILLIS: Duration = Duration::from_millis(1_000);
370-
assert_eq!(FROM_MILLIS, ONE);
370+
assert_eq!(FROM_MILLIS, Duration::SECOND);
371371

372-
const MICROS: u128 = ONE.as_micros();
372+
const MICROS: u128 = Duration::SECOND.as_micros();
373373
assert_eq!(MICROS, 1_000_000);
374374

375375
const FROM_MICROS: Duration = Duration::from_micros(1_000_000);
376-
assert_eq!(FROM_MICROS, ONE);
376+
assert_eq!(FROM_MICROS, Duration::SECOND);
377377

378-
const NANOS: u128 = ONE.as_nanos();
378+
const NANOS: u128 = Duration::SECOND.as_nanos();
379379
assert_eq!(NANOS, 1_000_000_000);
380380

381381
const FROM_NANOS: Duration = Duration::from_nanos(1_000_000_000);
382-
assert_eq!(FROM_NANOS, ONE);
382+
assert_eq!(FROM_NANOS, Duration::SECOND);
383383

384384
const MAX: Duration = Duration::new(u64::MAX, 999_999_999);
385385

386-
const CHECKED_ADD: Option<Duration> = MAX.checked_add(ONE);
386+
const CHECKED_ADD: Option<Duration> = MAX.checked_add(Duration::SECOND);
387387
assert_eq!(CHECKED_ADD, None);
388388

389-
const CHECKED_SUB: Option<Duration> = ZERO.checked_sub(ONE);
389+
const CHECKED_SUB: Option<Duration> = ZERO.checked_sub(Duration::SECOND);
390390
assert_eq!(CHECKED_SUB, None);
391391

392-
const CHECKED_MUL: Option<Duration> = ONE.checked_mul(1);
393-
assert_eq!(CHECKED_MUL, Some(ONE));
392+
const CHECKED_MUL: Option<Duration> = Duration::SECOND.checked_mul(1);
393+
assert_eq!(CHECKED_MUL, Some(Duration::SECOND));
394394

395-
const MUL_F32: Duration = ONE.mul_f32(1.0);
396-
assert_eq!(MUL_F32, ONE);
395+
const MUL_F32: Duration = Duration::SECOND.mul_f32(1.0);
396+
assert_eq!(MUL_F32, Duration::SECOND);
397397

398-
const MUL_F64: Duration = ONE.mul_f64(1.0);
399-
assert_eq!(MUL_F64, ONE);
398+
const MUL_F64: Duration = Duration::SECOND.mul_f64(1.0);
399+
assert_eq!(MUL_F64, Duration::SECOND);
400400

401-
const CHECKED_DIV: Option<Duration> = ONE.checked_div(1);
402-
assert_eq!(CHECKED_DIV, Some(ONE));
401+
const CHECKED_DIV: Option<Duration> = Duration::SECOND.checked_div(1);
402+
assert_eq!(CHECKED_DIV, Some(Duration::SECOND));
403403

404-
const DIV_F32: Duration = ONE.div_f32(1.0);
405-
assert_eq!(DIV_F32, ONE);
404+
const DIV_F32: Duration = Duration::SECOND.div_f32(1.0);
405+
assert_eq!(DIV_F32, Duration::SECOND);
406406

407-
const DIV_F64: Duration = ONE.div_f64(1.0);
408-
assert_eq!(DIV_F64, ONE);
407+
const DIV_F64: Duration = Duration::SECOND.div_f64(1.0);
408+
assert_eq!(DIV_F64, Duration::SECOND);
409409

410-
const DIV_DURATION_F32: f32 = ONE.div_duration_f32(ONE);
410+
const DIV_DURATION_F32: f32 = Duration::SECOND.div_duration_f32(Duration::SECOND);
411411
assert_eq!(DIV_DURATION_F32, 1.0);
412412

413-
const DIV_DURATION_F64: f64 = ONE.div_duration_f64(ONE);
413+
const DIV_DURATION_F64: f64 = Duration::SECOND.div_duration_f64(Duration::SECOND);
414414
assert_eq!(DIV_DURATION_F64, 1.0);
415415

416-
const SATURATING_ADD: Duration = MAX.saturating_add(ONE);
416+
const SATURATING_ADD: Duration = MAX.saturating_add(Duration::SECOND);
417417
assert_eq!(SATURATING_ADD, MAX);
418418

419-
const SATURATING_SUB: Duration = ZERO.saturating_sub(ONE);
419+
const SATURATING_SUB: Duration = ZERO.saturating_sub(Duration::SECOND);
420420
assert_eq!(SATURATING_SUB, ZERO);
421421

422422
const SATURATING_MUL: Duration = MAX.saturating_mul(2);

library/std/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@
255255
#![feature(doc_spotlight)]
256256
#![feature(dropck_eyepatch)]
257257
#![feature(duration_constants)]
258+
#![feature(duration_zero)]
258259
#![feature(exact_size_is_empty)]
259260
#![feature(exhaustive_patterns)]
260261
#![feature(extend_one)]

library/std/src/time/tests.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ macro_rules! assert_almost_eq {
55
let (a, b) = ($a, $b);
66
if a != b {
77
let (a, b) = if a > b { (a, b) } else { (b, a) };
8-
assert!(a - Duration::new(0, 1000) <= b, "{:?} is not almost equal to {:?}", a, b);
8+
assert!(a - Duration::from_micros(1) <= b, "{:?} is not almost equal to {:?}", a, b);
99
}
1010
}};
1111
}
@@ -34,7 +34,7 @@ fn instant_math() {
3434
assert_almost_eq!(b - dur, a);
3535
assert_almost_eq!(a + dur, b);
3636

37-
let second = Duration::new(1, 0);
37+
let second = Duration::SECOND;
3838
assert_almost_eq!(a - second + second, a);
3939
assert_almost_eq!(a.checked_sub(second).unwrap().checked_add(second).unwrap(), a);
4040

@@ -65,32 +65,32 @@ fn instant_math_is_associative() {
6565
#[should_panic]
6666
fn instant_duration_since_panic() {
6767
let a = Instant::now();
68-
(a - Duration::new(1, 0)).duration_since(a);
68+
(a - Duration::SECOND).duration_since(a);
6969
}
7070

7171
#[test]
7272
fn instant_checked_duration_since_nopanic() {
7373
let now = Instant::now();
74-
let earlier = now - Duration::new(1, 0);
75-
let later = now + Duration::new(1, 0);
74+
let earlier = now - Duration::SECOND;
75+
let later = now + Duration::SECOND;
7676
assert_eq!(earlier.checked_duration_since(now), None);
77-
assert_eq!(later.checked_duration_since(now), Some(Duration::new(1, 0)));
78-
assert_eq!(now.checked_duration_since(now), Some(Duration::new(0, 0)));
77+
assert_eq!(later.checked_duration_since(now), Some(Duration::SECOND));
78+
assert_eq!(now.checked_duration_since(now), Some(Duration::zero()));
7979
}
8080

8181
#[test]
8282
fn instant_saturating_duration_since_nopanic() {
8383
let a = Instant::now();
84-
let ret = (a - Duration::new(1, 0)).saturating_duration_since(a);
85-
assert_eq!(ret, Duration::new(0, 0));
84+
let ret = (a - Duration::SECOND).saturating_duration_since(a);
85+
assert_eq!(ret, Duration::zero());
8686
}
8787

8888
#[test]
8989
fn system_time_math() {
9090
let a = SystemTime::now();
9191
let b = SystemTime::now();
9292
match b.duration_since(a) {
93-
Ok(dur) if dur == Duration::new(0, 0) => {
93+
Ok(dur) if dur == Duration::zero() => {
9494
assert_almost_eq!(a, b);
9595
}
9696
Ok(dur) => {
@@ -106,16 +106,16 @@ fn system_time_math() {
106106
}
107107
}
108108

109-
let second = Duration::new(1, 0);
109+
let second = Duration::SECOND;
110110
assert_almost_eq!(a.duration_since(a - second).unwrap(), second);
111111
assert_almost_eq!(a.duration_since(a + second).unwrap_err().duration(), second);
112112

113113
assert_almost_eq!(a - second + second, a);
114114
assert_almost_eq!(a.checked_sub(second).unwrap().checked_add(second).unwrap(), a);
115115

116-
let one_second_from_epoch = UNIX_EPOCH + Duration::new(1, 0);
116+
let one_second_from_epoch = UNIX_EPOCH + Duration::SECOND;
117117
let one_second_from_epoch2 =
118-
UNIX_EPOCH + Duration::new(0, 500_000_000) + Duration::new(0, 500_000_000);
118+
UNIX_EPOCH + Duration::from_millis(500) + Duration::from_millis(500);
119119
assert_eq!(one_second_from_epoch, one_second_from_epoch2);
120120

121121
// checked_add_duration will not panic on overflow
@@ -141,12 +141,12 @@ fn system_time_elapsed() {
141141
#[test]
142142
fn since_epoch() {
143143
let ts = SystemTime::now();
144-
let a = ts.duration_since(UNIX_EPOCH + Duration::new(1, 0)).unwrap();
144+
let a = ts.duration_since(UNIX_EPOCH + Duration::SECOND).unwrap();
145145
let b = ts.duration_since(UNIX_EPOCH).unwrap();
146146
assert!(b > a);
147-
assert_eq!(b - a, Duration::new(1, 0));
147+
assert_eq!(b - a, Duration::SECOND);
148148

149-
let thirty_years = Duration::new(1, 0) * 60 * 60 * 24 * 365 * 30;
149+
let thirty_years = Duration::SECOND * 60 * 60 * 24 * 365 * 30;
150150

151151
// Right now for CI this test is run in an emulator, and apparently the
152152
// aarch64 emulator's sense of time is that we're still living in the

0 commit comments

Comments
 (0)