Test for drop

This commit is contained in:
root
2015-05-19 16:56:24 +02:00
parent d74dfcc5cc
commit 04b9af476b
+32 -34
View File
@@ -317,7 +317,7 @@ impl<A: Array> Drop for IntoIter<A> {
} }
#[test] #[test]
fn test1() { fn test_simple() {
use std::ops::Add; use std::ops::Add;
let mut vec: ArrayVec<[Vec<i32>; 3]> = ArrayVec::new(); let mut vec: ArrayVec<[Vec<i32>; 3]> = ArrayVec::new();
@@ -336,46 +336,44 @@ fn test1() {
assert_eq!(sum_len, 8); assert_eq!(sum_len, 8);
} }
fn main() { #[test]
let mut v = ArrayVec::from([1, 2, 3]); fn test_drop() {
v.push(4); use std::rc::Rc;
v.push(5); use std::cell::Cell;
println!("{:?}", v.pop());
println!("{:?}", v.pop());
println!("{:?}", &*v);
v.pop();
v.pop();
v.push(8);
println!("{:?}", &*v);
let mut u: ArrayVec<[_; 3]> = ArrayVec::new(); let flag = Rc::new(Cell::new(0));
u.push(vec![1,2,4,5]); struct Foo(Rc<Cell<i32>>);
u.push(vec![3]);
u.push(vec![97,98,92]); impl Drop for Foo {
fn drop(&mut self) {
let n = self.0.get();
self.0.set(n + 1);
}
}
{ {
let slc: &[_] = &u; let mut array = ArrayVec::<[Foo; 128]>::new();
println!("{:?}", slc); array.push(Foo(flag.clone()));
array.push(Foo(flag.clone()));
} }
println!("{:?}", u.pop()); assert_eq!(flag.get(), 2);
println!("{:?}", u.pop());
println!("{:?}", u.len());
println!("{:?}", u[0]);
// test something with the nullable pointer optimization
flag.set(0);
println!("v: {:?}", &*v); {
let mut array = ArrayVec::<[_; 3]>::new();
for elt in &v { // slice iter array.push(vec![Foo(flag.clone())]);
println!("Slice Iter: {:?}", elt); array.push(vec![Foo(flag.clone()), Foo(flag.clone())]);
array.push(vec![]);
array.push(vec![Foo(flag.clone())]);
assert_eq!(flag.get(), 1);
drop(array.pop());
assert_eq!(flag.get(), 1);
drop(array.pop());
assert_eq!(flag.get(), 3);
} }
for elt in v { assert_eq!(flag.get(), 4);
println!("Iter: {:?}", elt);
//break;
}
for elt in ArrayVec::from(["a".to_string(), "b".to_string()]).into_iter() {
println!("Iter: {:?}", elt);
}
} }