@@ -156,17 +156,34 @@ struct ProgressReporter<'a, T> {
156
156
#[ cfg( test) ]
157
157
mod test {
158
158
use super :: * ;
159
- use std:: sync:: { Arc , Mutex } ;
159
+ use std:: sync:: { Arc , Mutex , MutexGuard } ;
160
160
161
- fn init ( ) {
161
+ static PROGRESS_MUTEX : OnceCell < Mutex < ( ) > > = OnceCell :: new ( ) ;
162
+
163
+ fn init ( ) -> MutexGuard < ' static , ( ) > {
162
164
use log:: * ;
163
165
use simple_logger:: * ;
164
166
let _ = SimpleLogger :: new ( ) . with_level ( LevelFilter :: Debug ) . init ( ) ;
167
+
168
+ // wait for lock and clear reporter map
169
+ let mutex = PROGRESS_MUTEX . get_or_init ( || Mutex :: new ( ( ) ) ) ;
170
+ let guard = mutex. lock ( ) . unwrap ( ) ;
171
+ if let Some ( reporters) = PROGRESS_REPORTERS . get ( ) {
172
+ let mut reporters = reporters. write ( ) . unwrap ( ) ;
173
+ * reporters = ProgressReporter2 {
174
+ reporters : TypeMap :: new ( ) ,
175
+ current_progress : 0.0 ,
176
+ total_steps_left : 0 ,
177
+ start_time : Instant :: now ( ) ,
178
+ stage_steps : Vec :: new ( ) ,
179
+ } ;
180
+ }
181
+ guard
165
182
}
166
183
167
184
#[ test]
168
185
fn single_stage_progress ( ) {
169
- init ( ) ;
186
+ let _lock = init ( ) ;
170
187
171
188
let su = Arc :: new ( Mutex :: new ( None ) ) ;
172
189
let suc = Arc :: clone ( & su) ;
@@ -186,7 +203,7 @@ mod test {
186
203
187
204
#[ test]
188
205
fn multi_stage_progress ( ) {
189
- init ( ) ;
206
+ let _lock = init ( ) ;
190
207
191
208
let su = Arc :: new ( Mutex :: new ( None ) ) ;
192
209
let suc = Arc :: clone ( & su) ;
@@ -202,7 +219,7 @@ mod test {
202
219
203
220
start_stage :: < usize > ( 2 , "starting" . to_string ( ) , None ) ;
204
221
progress_stage :: < usize > ( "msg" . to_string ( ) , None ) ;
205
- assert ! ( ( su. lock( ) . unwrap( ) . as_ref( ) . unwrap( ) . percent_done - 66.66 ) . abs( ) < 0.01 ) ;
222
+ assert ! ( ( su. lock( ) . unwrap( ) . as_ref( ) . unwrap( ) . percent_done - 66.6666 ) . abs( ) < 0.01 ) ;
206
223
207
224
start_stage :: < usize > ( 2 , "starting" . to_string ( ) , None ) ;
208
225
progress_stage :: < usize > ( "msg" . to_string ( ) , None ) ;
0 commit comments