我有一个常量

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);
  }
}

推荐答案

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

Rust相关问答推荐

捕获Rust因C++异常而产生panic

为什么幻影数据不能自动推断?

字段类型为Boxed的 struct 的生存期必须超过static

如何在AVX2中对齐/旋转256位向量?

失真图像图形捕获Api

在使用粗粒度锁访问的数据 struct 中使用 RefCell 是否安全?

如何正确使用git2::Remote::push?

为什么需要同时为值和引用实现`From`?方法不应该自动解引用或borrow 吗?(2023-06-16)

全面的 Rust Ch.16.2 - 使用捕获和 const 表达式的 struct 模式匹配

我可以在 Rust 中 serde struct camel_case 和 deserde PascalCase

从光标位置旋转精灵

Some(v) 和 Some(&v) 有什么区别?

为什么 for_each 在释放模式(cargo run -r)下比 for 循环快得多?

Rust 将特性传递给依赖项

Rust 中函数的类型同义词

是否有适当的方法在参考 1D 中转换 2D 数组

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

Rust 跨同一文件夹中文件的可见性

如何在 Rust 的泛型函​​数中同时使用非拥有迭代器和消费迭代器?

为什么我不能将元素写入 Rust 数组中移动的位置,但我可以在元组中完成