// run-pass #![allow(unused_must_use)] #![allow(deprecated)] // ignore-emscripten no threads support // ignore-sgx no processes 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) } } } }