2个版本
0.1.1 | 2019年12月29日 |
---|---|
0.1.0 | 2019年12月29日 |
#532 in 测试
在 3 个Crates中使用
9KB
111 行
dropcheck
用于检查Drop
实现正确性的工具。
lib.rs
:
用于检查Drop
实现正确性的工具。
正确测试容器类型(如Vec<T>
)需要验证容器中的每个值既不会被泄露,也不会多次被丢弃。
为了检测泄露,此crate提供了一个DropToken
类型,其drop实现将在具有内部可变性的DropState
中设置一个标志(特别是原子操作)。其次,这些状态存储在一个DropCheck
集合中。如果DropCheck
在释放时仍有任何token未被释放,则DropCheck
的drop实现会引发panic
let dropcheck = DropCheck::new();
let token = dropcheck.token();
std::mem::forget(token); // leaked!
// panics when dropcheck goes out of scope
其次,重复释放token会引发panic
let dropcheck = DropCheck::new();
let mut token = dropcheck.token();
unsafe {
std::ptr::drop_in_place(&mut token);
std::ptr::drop_in_place(&mut token); // panics
}