@@ -231,6 +231,16 @@ impl fmt::Display for SystemTimeError {
231
231
mod tests {
232
232
use super :: { Instant , SystemTime , Duration , UNIX_EPOCH } ;
233
233
234
+ macro_rules! assert_almost_eq {
235
+ ( $a: expr, $b: expr) => ( {
236
+ let ( a, b) = ( $a, $b) ;
237
+ if a != b {
238
+ let ( a, b) = if a > b { ( a, b) } else { ( b, a) } ;
239
+ assert!( a - Duration :: new( 0 , 1 ) <= b) ;
240
+ }
241
+ } )
242
+ }
243
+
234
244
#[ test]
235
245
fn instant_monotonic ( ) {
236
246
let a = Instant :: now ( ) ;
@@ -249,11 +259,11 @@ mod tests {
249
259
let a = Instant :: now ( ) ;
250
260
let b = Instant :: now ( ) ;
251
261
let dur = b. duration_from_earlier ( a) ;
252
- assert_eq ! ( b - dur, a) ;
253
- assert_eq ! ( a + dur, b) ;
262
+ assert_almost_eq ! ( b - dur, a) ;
263
+ assert_almost_eq ! ( a + dur, b) ;
254
264
255
265
let second = Duration :: new ( 1 , 0 ) ;
256
- assert_eq ! ( a - second + second, a) ;
266
+ assert_almost_eq ! ( a - second + second, a) ;
257
267
}
258
268
259
269
#[ test]
@@ -269,31 +279,31 @@ mod tests {
269
279
let b = SystemTime :: now ( ) ;
270
280
match b. duration_from_earlier ( a) {
271
281
Ok ( dur) if dur == Duration :: new ( 0 , 0 ) => {
272
- assert_eq ! ( a, b) ;
282
+ assert_almost_eq ! ( a, b) ;
273
283
}
274
284
Ok ( dur) => {
275
285
assert ! ( b > a) ;
276
- assert_eq ! ( b - dur, a) ;
277
- assert_eq ! ( a + dur, b) ;
286
+ assert_almost_eq ! ( b - dur, a) ;
287
+ assert_almost_eq ! ( a + dur, b) ;
278
288
}
279
289
Err ( dur) => {
280
290
let dur = dur. duration ( ) ;
281
291
assert ! ( a > b) ;
282
- assert_eq ! ( b + dur, a) ;
283
- assert_eq ! ( b - dur, a) ;
292
+ assert_almost_eq ! ( b + dur, a) ;
293
+ assert_almost_eq ! ( b - dur, a) ;
284
294
}
285
295
}
286
296
287
297
let second = Duration :: new ( 1 , 0 ) ;
288
- assert_eq ! ( a. duration_from_earlier( a - second) . unwrap( ) , second) ;
289
- assert_eq ! ( a. duration_from_earlier( a + second) . unwrap_err( ) . duration ( ) ,
290
- second) ;
298
+ assert_almost_eq ! ( a. duration_from_earlier( a - second) . unwrap( ) , second) ;
299
+ assert_almost_eq ! ( a. duration_from_earlier( a + second) . unwrap_err( )
300
+ . duration ( ) , second) ;
291
301
292
- assert_eq ! ( a - second + second, a) ;
302
+ assert_almost_eq ! ( a - second + second, a) ;
293
303
294
304
let eighty_years = second * 60 * 60 * 24 * 365 * 80 ;
295
- assert_eq ! ( a - eighty_years + eighty_years, a) ;
296
- assert_eq ! ( a - ( eighty_years * 10 ) + ( eighty_years * 10 ) , a) ;
305
+ assert_almost_eq ! ( a - eighty_years + eighty_years, a) ;
306
+ assert_almost_eq ! ( a - ( eighty_years * 10 ) + ( eighty_years * 10 ) , a) ;
297
307
}
298
308
299
309
#[ test]
0 commit comments