我正在写一些处理原始指针的Rust代码。这些原始指针然后通过使用ContravariantLifetime将结构的生命周期与我的对象绑定的结构暴露给用户。我可以编写无效生命期测试吗?
我希望能够编写测试来验证面向用户的结构不能比我的对象寿命更长。我有如下代码:
fn element_cannot_outlive_parts() {
let mut z = {
let p = Package::new();
p.create() // returns an object that cannot live longer than p
};
}
这不能编译,这正是我想要的。不过,我希望有一些自动检查,即使在对代码进行任何重构之后,此行为都是真实的。
我现在最好的想法是用此代码编写一次性的Rust文件,并配置bash脚本以尝试编译它们并查找特定的错误消息,这些都感觉很诡异。
唉,对失败编译的测试本身并不支持。 rustc本身具有实现这种功能的基础设施('src/test/compile-fail'等),但是它是自定义的并且通常不可用。 – 2014-10-30 23:17:16
@ChrisMorgan:你认为社区会支持这种测试吗? Rust有一个真正发展的类型系统,可以执行大量的检查,验证检查是否实际执行似乎很好。过去,在C++中,我使用了Clang的特定测试('-verify' flag + Clang的具体评论)来处理这类事情;这是相当先进的。 – 2014-10-31 08:48:18
@MatthieuM .:我知道在设计一个库时,有能力测试验证某些代码无法编译。 – 2014-10-31 12:08:53