如何在Rust中基于常量跳过测试?

nwwlzxa7  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个常数

const SIZE: usize = 8;

字符串
我还有一堆测试要做有些测试是针对这个常数大于8的情况,有些测试是针对它小于8的情况,因为我测试了一些特殊情况。我怎么能跳过基于此的测试?例如,一个这样的测试使用类型u8,如果SIZE大于8,则不能使用。基于How to conditionally skip tests based on runtime information?,没有办法在运行时做到这一点,但是既然我在编译时就拥有了一切,那么有没有一种方法看起来像

#[cfg(SIZE <= 8)]


编译这个测试只有当常数是在正确的范围?
测试示例

#[cfg(test)]
mod test {
  use super::SIZE;
  #[test]
  fn will_panic_if_size_small() {
    assert!(SIZE > 8);
  }

  #[test]
  fn will_panic_if_size_big() {
    assert!(SIZE <= 8);
  }
}

qvtsj1bj

qvtsj1bj1#

不幸的是,这仍然是不可能的。宏不能计算const s,因为它们是在常量计算之前执行的,所以它等效于运行时条件。

相关问题