将迭代器与(固定大小的)数组进行比较
Comparing iterator with (fixed sized) array
我构建了一个生成无限素数列表的迭代器。类型如下所示:
pub struct Primes { … }
impl Iterator for Primes {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> { … }
}
现在我想通过比较来测试我的迭代器 returns 的值是否正确
前 100 个值与正确值的对比:
#[test]
fn first_thousand() {
assert_eq!(
Primes::new().take(100),
first_100_primes
);
}
const first_100_primes: [u32; 100] = [2, 3, …, 541];
我不知道如何比较这些值。我尝试创建一个切片(first_100_primes[..]
),收集迭代器值,但我似乎无法比较它们。
事实证明我真的很接近,我相信这行得通:
#[test]
fn first_thousand() {
assert_eq!(
FIRST_100_PRIMES[..],
Primes::new().take(100).collect::<Vec<_>>()[..]
);
}
(虽然我不确定这是否是锈菌的做法...)
let is_correct = Primes::new()
.zip(FIRST_100_PRIMES.iter())
.all(|(a, &b)| a == b);
assert!(is_correct);
我构建了一个生成无限素数列表的迭代器。类型如下所示:
pub struct Primes { … }
impl Iterator for Primes {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> { … }
}
现在我想通过比较来测试我的迭代器 returns 的值是否正确 前 100 个值与正确值的对比:
#[test]
fn first_thousand() {
assert_eq!(
Primes::new().take(100),
first_100_primes
);
}
const first_100_primes: [u32; 100] = [2, 3, …, 541];
我不知道如何比较这些值。我尝试创建一个切片(first_100_primes[..]
),收集迭代器值,但我似乎无法比较它们。
事实证明我真的很接近,我相信这行得通:
#[test]
fn first_thousand() {
assert_eq!(
FIRST_100_PRIMES[..],
Primes::new().take(100).collect::<Vec<_>>()[..]
);
}
(虽然我不确定这是否是锈菌的做法...)
let is_correct = Primes::new()
.zip(FIRST_100_PRIMES.iter())
.all(|(a, &b)| a == b);
assert!(is_correct);