Test for drop
This commit is contained in:
+32
-34
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user