diff --git a/nodrop/src/lib.rs b/nodrop/src/lib.rs index 5dfff90..491af5e 100644 --- a/nodrop/src/lib.rs +++ b/nodrop/src/lib.rs @@ -93,14 +93,13 @@ fn test_no_nonnullable_opt() { #[test] fn test_drop() { - use std::rc::Rc; use std::cell::Cell; - let flag = Rc::new(Cell::new(0)); + let flag = &Cell::new(0); - struct Foo(Rc>); + struct Bump<'a>(&'a Cell); - impl Drop for Foo { + impl<'a> Drop for Bump<'a> { fn drop(&mut self) { let n = self.0.get(); self.0.set(n + 1); @@ -108,7 +107,7 @@ fn test_drop() { } { - let _ = NoDrop::new([Foo(flag.clone()), Foo(flag.clone())]); + let _ = NoDrop::new([Bump(flag), Bump(flag)]); } assert_eq!(flag.get(), 0); @@ -117,10 +116,10 @@ fn test_drop() { { let mut array = NoDrop::new(Vec::new()); - array.push(vec![Foo(flag.clone())]); - array.push(vec![Foo(flag.clone()), Foo(flag.clone())]); + array.push(vec![Bump(flag)]); + array.push(vec![Bump(flag), Bump(flag)]); array.push(vec![]); - array.push(vec![Foo(flag.clone())]); + array.push(vec![Bump(flag)]); drop(array.pop()); assert_eq!(flag.get(), 1); drop(array.pop()); @@ -134,7 +133,7 @@ fn test_drop() { flag.set(0); { - let mut array = NoDrop::new(Foo(flag.clone())); + let array = NoDrop::new(Bump(flag)); array.into_inner(); assert_eq!(flag.get(), 1); } diff --git a/src/lib.rs b/src/lib.rs index c4a70c7..6559632 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -449,14 +449,13 @@ fn test_iter() { #[test] fn test_drop() { - use std::rc::Rc; use std::cell::Cell; - let flag = Rc::new(Cell::new(0)); + let flag = &Cell::new(0); - struct Foo(Rc>); + struct Bump<'a>(&'a Cell); - impl Drop for Foo { + impl<'a> Drop for Bump<'a> { fn drop(&mut self) { let n = self.0.get(); self.0.set(n + 1); @@ -464,9 +463,9 @@ fn test_drop() { } { - let mut array = ArrayVec::<[Foo; 128]>::new(); - array.push(Foo(flag.clone())); - array.push(Foo(flag.clone())); + let mut array = ArrayVec::<[Bump; 128]>::new(); + array.push(Bump(flag)); + array.push(Bump(flag)); } assert_eq!(flag.get(), 2); @@ -475,10 +474,10 @@ fn test_drop() { { let mut array = ArrayVec::<[_; 3]>::new(); - array.push(vec![Foo(flag.clone())]); - array.push(vec![Foo(flag.clone()), Foo(flag.clone())]); + array.push(vec![Bump(flag)]); + array.push(vec![Bump(flag), Bump(flag)]); array.push(vec![]); - array.push(vec![Foo(flag.clone())]); + array.push(vec![Bump(flag)]); assert_eq!(flag.get(), 1); drop(array.pop()); assert_eq!(flag.get(), 1);