我正在使用quickcheck,并希望为结构实现quickcheck::Arbitrary
。此特征必须存在于定义结构的同一文件/包中,但我不希望它在发布二进制文件中。
pub struct c_struct {
pub i64_: i64,
pub u64_: u64,
pub u32_: u32,
}
// #[cfg(test)] does not work
impl quickcheck::Arbitrary for c_struct {
fn arbitrary<G: quickcheck::Gen>(g: &mut G) -> c_struct {
c_struct {
i64_: i64::arbitrary(g),
u64_: u64::arbitrary(g),
u32_: u32::arbitrary(g),
}
}
}
答案 0 :(得分:2)
您可以在此处使用条件编译属性#[cfg()]
:
pub struct c_struct {
pub i64_: i64,
pub u64_: u64,
pub u32_: u32,
}
#[cfg(test)]
impl quickcheck::Arbitrary for c_struct {
fn arbitrary<G: quickcheck::Gen>(g: &mut G) -> c_struct {
c_struct {
i64_: i64::arbitrary(g),
u64_: u64::arbitrary(g),
u32_: u32::arbitrary(g),
}
}
}
答案 1 :(得分:1)
common solution to this是使用仅在测试中定义的newtype:
struct c_struct {
pub i64_: i64,
pub u64_: u64,
pub u32_: u32,
}
#[cfg(test)]
mod test {
struct ArbitraryCStruct(c_struct);
impl quickcheck::Arbitrary for ArbitraryCStruct {
fn arbitrary<G: quickcheck::Gen>(g: &mut G) -> ArbitraryCStruct {
ArbitraryCStruct(c_struct {
i64_: i64::arbitrary(g),
u64_: u64::arbitrary(g),
u32_: u32::arbitrary(g),
})
}
}
}
然后您可以在快速检查功能中接受此功能。如果需要,您可以使用.0
提取值,或根据需要实施From
或Into
特征。