use std::cell::{Cell, RefCell}; use std::sync::{Arc, Mutex}; use std::thread; use std::time::Duration; #[test] #[cfg_attr(target_os = "emscripten", ignore)] fn sleep() { let finished = Arc::new(Mutex::new(false)); let t_finished = finished.clone(); thread::spawn(move || { thread::sleep(Duration::new(u64::MAX, 0)); *t_finished.lock().unwrap() = true; }); thread::sleep(Duration::from_millis(100)); assert_eq!(*finished.lock().unwrap(), false); } #[test] fn thread_local_containing_const_statements() { // This exercises the `const $init:block` cases of the thread_local macro. // Despite overlapping with expression syntax, the `const { ... }` is not // parsed as `$init:expr`. thread_local! { static CELL: Cell = const { let value = 1; Cell::new(value) }; static REFCELL: RefCell = const { let value = 1; RefCell::new(value) }; } assert_eq!(CELL.get(), 1); assert_eq!(REFCELL.take(), 1); }