#drop #tooling #check #correctness #token #set

dropcheck

用于检查Drop实现正确性的工具

2个版本

0.1.1 2019年12月29日
0.1.0 2019年12月29日

#532 in 测试


3 个Crates中使用

MIT/Apache

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
}

无运行时依赖