@@ -45,6 +45,14 @@ fn from_weeks_overflow() {
45
45
let _ = Duration :: from_weeks ( overflow) ;
46
46
}
47
47
48
+ #[ test]
49
+ #[ should_panic]
50
+ fn from_nanos_u128_overflow ( ) {
51
+ let nanos_per_sec: u128 = 1_000_000_000 ;
52
+ let overflow = ( u64:: MAX as u128 * nanos_per_sec) + ( nanos_per_sec - 1 ) + 1 ;
53
+ let _ = Duration :: from_nanos_u128 ( overflow) ;
54
+ }
55
+
48
56
#[ test]
49
57
fn constructor_weeks ( ) {
50
58
assert_eq ! ( Duration :: from_weeks( 1 ) , Duration :: from_secs( 7 * 24 * 60 * 60 ) ) ;
@@ -81,6 +89,8 @@ fn secs() {
81
89
assert_eq ! ( Duration :: from_micros( 1_000_001 ) . as_secs( ) , 1 ) ;
82
90
assert_eq ! ( Duration :: from_nanos( 999_999_999 ) . as_secs( ) , 0 ) ;
83
91
assert_eq ! ( Duration :: from_nanos( 1_000_000_001 ) . as_secs( ) , 1 ) ;
92
+ assert_eq ! ( Duration :: from_nanos_u128( 999_999_999 ) . as_secs( ) , 0 ) ;
93
+ assert_eq ! ( Duration :: from_nanos_u128( 1_000_000_001 ) . as_secs( ) , 1 ) ;
84
94
}
85
95
86
96
#[ test]
@@ -95,6 +105,8 @@ fn millis() {
95
105
assert_eq ! ( Duration :: from_micros( 1_001_000 ) . subsec_millis( ) , 1 ) ;
96
106
assert_eq ! ( Duration :: from_nanos( 999_999_999 ) . subsec_millis( ) , 999 ) ;
97
107
assert_eq ! ( Duration :: from_nanos( 1_001_000_000 ) . subsec_millis( ) , 1 ) ;
108
+ assert_eq ! ( Duration :: from_nanos_u128( 999_999_999 ) . subsec_millis( ) , 999 ) ;
109
+ assert_eq ! ( Duration :: from_nanos_u128( 1_001_000_001 ) . subsec_millis( ) , 1 ) ;
98
110
}
99
111
100
112
#[ test]
@@ -109,6 +121,8 @@ fn micros() {
109
121
assert_eq ! ( Duration :: from_micros( 1_000_001 ) . subsec_micros( ) , 1 ) ;
110
122
assert_eq ! ( Duration :: from_nanos( 999_999_999 ) . subsec_micros( ) , 999_999 ) ;
111
123
assert_eq ! ( Duration :: from_nanos( 1_000_001_000 ) . subsec_micros( ) , 1 ) ;
124
+ assert_eq ! ( Duration :: from_nanos_u128( 999_999_999 ) . subsec_micros( ) , 999_999 ) ;
125
+ assert_eq ! ( Duration :: from_nanos_u128( 1_000_001_000 ) . subsec_micros( ) , 1 ) ;
112
126
}
113
127
114
128
#[ test]
@@ -123,6 +137,8 @@ fn nanos() {
123
137
assert_eq ! ( Duration :: from_micros( 1_000_001 ) . subsec_nanos( ) , 1000 ) ;
124
138
assert_eq ! ( Duration :: from_nanos( 999_999_999 ) . subsec_nanos( ) , 999_999_999 ) ;
125
139
assert_eq ! ( Duration :: from_nanos( 1_000_000_001 ) . subsec_nanos( ) , 1 ) ;
140
+ assert_eq ! ( Duration :: from_nanos_u128( 999_999_999 ) . subsec_nanos( ) , 999_999_999 ) ;
141
+ assert_eq ! ( Duration :: from_nanos_u128( 1_000_000_001 ) . subsec_nanos( ) , 1 ) ;
126
142
}
127
143
128
144
#[ test]
@@ -520,6 +536,9 @@ fn duration_const() {
520
536
const FROM_NANOS : Duration = Duration :: from_nanos ( 1_000_000_000 ) ;
521
537
assert_eq ! ( FROM_NANOS , Duration :: SECOND ) ;
522
538
539
+ const FROM_NANOS_U128 : Duration = Duration :: from_nanos_u128 ( NANOS ) ;
540
+ assert_eq ! ( FROM_NANOS_U128 , Duration :: SECOND ) ;
541
+
523
542
const MAX : Duration = Duration :: new ( u64:: MAX , 999_999_999 ) ;
524
543
525
544
const CHECKED_ADD : Option < Duration > = MAX . checked_add ( Duration :: SECOND ) ;
0 commit comments