use ach_cell::Cell; #[test] fn base() { static CELL: Cell = Cell::new(); assert!(CELL.set(1).is_ok()); assert!(CELL.is_initialized()); assert!(CELL.set(2).is_err()); assert_eq!(CELL.take().unwrap(), Some(1)); assert!(!CELL.is_initialized()); assert!(CELL.take().unwrap().is_none()); assert!(CELL.ref_num().is_err()); assert!(CELL.set(3).is_ok()); assert_eq!(CELL.ref_num(), Ok(0)); let refer = CELL.get().unwrap(); assert_eq!(CELL.ref_num(), Ok(1)); assert_eq!(*refer, 3); assert!(CELL.try_take().is_err()); drop(refer); assert_eq!(CELL.take().unwrap(), Some(3)); assert!(CELL.set(4).is_ok()); assert_eq!(*CELL.get().unwrap(), 4); assert_eq!(CELL.take().unwrap(), Some(4)); assert_eq!(CELL.replace(5).unwrap(), None); assert_eq!(CELL.replace(6).unwrap(), Some(5)); let refer = CELL.get(); assert_eq!(CELL.try_replace(7).unwrap_err().input, 7); drop(refer); assert_eq!(CELL.replace(8).unwrap(), Some(6)); assert_eq!(CELL.take().unwrap(), Some(8)); }