원시 포인터를 조작하는 녹 코드를 쓰고 있습니다. 그런 다음이 원시 포인터는 ContravariantLifetime을 사용하는 구조체를 통해 사용자에게 노출되어 구조체의 수명이 내 객체와 연결됩니다.유효 기간이 만료되었는지 테스트 할 수 있습니까?
사용자 지향 구조가 내 개체보다 오래 살 수 없음을 확인하는 테스트를 작성하고 싶습니다. 나는 다음과 같은 코드를 가지고있다 :
fn element_cannot_outlive_parts() {
let mut z = {
let p = Package::new();
p.create() // returns an object that cannot live longer than p
};
}
이것은 정확히 내가 원하는 것일 뿐이다. 그러나, 코드에 어떤 리팩터링을 수행 한 후에도이 동작이 사실인지 확인하는 자동화 된 검사를하고 싶습니다.
현재 가장 좋은 생각은이 코드를 사용하여 일회용 녹 파일을 작성하고 컴파일을 시도하고 특정 오류 메시지를 찾으려고 bash 스크립트를 조작하는 것입니다.
아아, 컴파일 실패에 대한 테스트를 기본적으로 지원하지 않습니다. rustc 자체는 이것을 달성하기위한 기반 구조를 가지고 있지만 ('src/test/compile-fail' 외), 일반적으로 사용 가능하지는 않다. –
@ChrisMorgan : 이런 종류의 테스트를 지원 한 커뮤니티에 관심이 있다고 생각합니까? Rust에는 실제로 많은 진화를 허용하는 진화 된 유형 시스템이 있으며, 실제로 수표가 실제로 적용되는지 확인하는 것이 좋습니다. 과거에는 C++을 사용하여 이런 종류의 작업에 대해 Clang의 구체적인 테스트 ('-verify' 플래그 + Clang의 구체적인 설명)를 사용했습니다. 꽤 발전했습니다. –
@MatthieuM : 라이브러리를 디자인 할 때 특정 코드가 컴파일되지 않는지 확인하는 기능을 원한다는 것을 알고 있습니다. –