testing - 如何比较迭代器?
问题描述
我想与测试用例中的迭代器进行比较。不幸的是,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 行)来进行测试,并且需要使迭代器可变。有更好的吗?
解决方案
有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()));
推荐阅读
- javascript - 获取未定义为函数输出
- python - 如何在pywinauto中通过正则表达式标题搜索孩子/后代?
- react-native - 反应本机 mapDispatchToProps 不起作用
- python - 停止 Jupyter 自动缩进新行大量的非整数制表符?
- quantum-computing - 使用哈密顿量实现 CNOT 门
- swift - Kentico-cloud Swift SDK ContentType 没有可用的属性
- c# - 如何将所有 AD 用户添加到 ComboBox
- paypal - 在哪里查看“沙盒”支付列表?
- optimization - 关于神经网络的基于梯度下降的优化
- php - 如何显示课程总数?