@@ -156,17 +156,34 @@ struct ProgressReporter<'a, T> {
156156#[ cfg( test) ]
157157mod test {
158158 use super :: * ;
159- use std:: sync:: { Arc , Mutex } ;
159+ use std:: sync:: { Arc , Mutex , MutexGuard } ;
160160
161- fn init ( ) {
161+ static PROGRESS_MUTEX : OnceCell < Mutex < ( ) > > = OnceCell :: new ( ) ;
162+
163+ fn init ( ) -> MutexGuard < ' static , ( ) > {
162164 use log:: * ;
163165 use simple_logger:: * ;
164166 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
165182 }
166183
167184 #[ test]
168185 fn single_stage_progress ( ) {
169- init ( ) ;
186+ let _lock = init ( ) ;
170187
171188 let su = Arc :: new ( Mutex :: new ( None ) ) ;
172189 let suc = Arc :: clone ( & su) ;
@@ -186,7 +203,7 @@ mod test {
186203
187204 #[ test]
188205 fn multi_stage_progress ( ) {
189- init ( ) ;
206+ let _lock = init ( ) ;
190207
191208 let su = Arc :: new ( Mutex :: new ( None ) ) ;
192209 let suc = Arc :: clone ( & su) ;
@@ -202,7 +219,7 @@ mod test {
202219
203220 start_stage :: < usize > ( 2 , "starting" . to_string ( ) , None ) ;
204221 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 ) ;
206223
207224 start_stage :: < usize > ( 2 , "starting" . to_string ( ) , None ) ;
208225 progress_stage :: < usize > ( "msg" . to_string ( ) , None ) ;
0 commit comments