首页 > 解决方案 > 如何比较迭代器?

问题描述

我想与测试用例中的迭代器进行比较。不幸的是,assert_eq!不喜欢被传递迭代器。一种解决方法如下所示:

let mut a = 0..5;
let mut b = 0..6;

assert!(a.by_ref().zip(b.by_ref()).all(|(a, b)| a == b));
assert_eq!(a.next(), None);
assert_eq!(b.next(), None);

但它需要 3 行(或至少 2 行)来进行测试,并且需要使迭代器可变。有更好的吗?

标签: testingrustiterator

解决方案


Iterator::eq。我认为这应该是赢家:

assert!(a.eq(b));

事实证明有itertools::assert_equal

let a = 0..6;
let b = 0..6;
    
itertools::assert_equal(a, b);

它并不完全漂亮,但这里有一个解决方案zip_longest

assert!(a.zip_longest(b).all(|thingy| thingy.as_ref().left() == thingy.as_ref().right()));

推荐阅读