// TODO: Use `Rc` and `RefCell` to implement `DropTracker`, a wrapper around a value of type `T` // that increments a shared `usize` counter every time the wrapped value is dropped. use std::cell::RefCell; use std::rc::Rc; pub struct DropTracker { value: T, counter: todo!(), } impl DropTracker { pub fn new(value: T, counter: todo!()) -> Self { Self { value, counter } } } impl Drop for DropTracker { fn drop(&mut self) { todo!() } } #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { let counter = Rc::new(RefCell::new(0)); let _ = DropTracker::new((), Rc::clone(&counter)); assert_eq!(*counter.borrow(), 1); } #[test] fn multiple() { let counter = Rc::new(RefCell::new(0)); { let a = DropTracker::new(5, Rc::clone(&counter)); let b = DropTracker::new(6, Rc::clone(&counter)); } assert_eq!(*counter.borrow(), 2); } }