| //@ run-pass | 
 |  | 
 | #![allow(unused_must_use)] | 
 | #![allow(deprecated)] | 
 | //@ needs-threads | 
 | //@ needs-subprocess | 
 |  | 
 | use std::{env, fmt, process, sync, thread}; | 
 |  | 
 | struct SlowFmt(u32); | 
 | impl fmt::Debug for SlowFmt { | 
 |     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | 
 |         thread::sleep_ms(3); | 
 |         self.0.fmt(f) | 
 |     } | 
 | } | 
 |  | 
 | fn do_print(x: u32) { | 
 |     let x = SlowFmt(x); | 
 |     println!("{:?}{:?}{:?}{:?}{:?}", x, x, x, x, x); | 
 | } | 
 |  | 
 | fn main(){ | 
 |     if env::args().count() == 2 { | 
 |         let barrier = sync::Arc::new(sync::Barrier::new(2)); | 
 |         let tbarrier = barrier.clone(); | 
 |         let t = thread::spawn(move || { | 
 |             tbarrier.wait(); | 
 |             do_print(1); | 
 |         }); | 
 |         barrier.wait(); | 
 |         do_print(2); | 
 |         t.join(); | 
 |     } else { | 
 |         let this = env::args().next().unwrap(); | 
 |         let output = process::Command::new(this).arg("-").output().unwrap(); | 
 |         for line in String::from_utf8(output.stdout).unwrap().lines() { | 
 |             match line.chars().next().unwrap() { | 
 |                 '1' => assert_eq!(line, "11111"), | 
 |                 '2' => assert_eq!(line, "22222"), | 
 |                 chr => panic!("unexpected character {:?}", chr) | 
 |             } | 
 |         } | 
 |     } | 
 | } |