比较迭代器和(固定大小)数组

时间:2016-05-13 13:20:02

标签: iterator rust infinite

我构建了一个生成无限素数列表的迭代器。类型如下:

pub struct Primes { … }

impl Iterator for Primes {
    type Item = u32;
    fn next(&mut self) -> Option<Self::Item> { … }
}

现在我想测试我的迭代器是否通过比较返回正确的值 前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[..]),收集迭代器值,但我似乎无法比较它们。

2 个答案:

答案 0 :(得分:3)

let is_correct = Primes::new()
    .zip(FIRST_100_PRIMES.iter())
    .all(|(a, &b)| a == b);
assert!(is_correct);

答案 1 :(得分:1)

原来我非常接近,我相信这很有效:

#[test]
fn first_thousand() {
    assert_eq!(
        FIRST_100_PRIMES[..],
        Primes::new().take(100).collect::<Vec<_>>()[..]
    );
}

(虽然我不确定这是否是这种做法的方法......)