【问题标题】:How do I compare iterators? [duplicate]如何比较迭代器? [复制]
【发布时间】:2020-04-10 04:16:43
【问题描述】:

我想与测试用例中的迭代器进行比较。不幸的是,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 行)来进行测试,并且需要使迭代器可变。有没有更好的?

【问题讨论】:

  • 为什么我的搜索没有找到这个副本对我来说是个谜。
  • 你做了什么样的搜索? site:stackoverflow.com rust compare iterator 发现重复项是我的最佳 Google 结果。另外,请记住,投票是对 post 的反映,而不是用户。否决按钮状态:这个问题没有显示任何研究工作;不清楚或没用;我假设反对者认为这个问题在重复的情况下没有用。
  • 因为现在可以找到——也许吧。 how do you compare iterators [rust] 在第一页上找不到任何帖子。但是,您对重复项的价值是正确的——它们可以作为现有答案的路标,这就是我们不会投票删除此类问题的原因。
  • @shepmaster 出于同样的原因,它们不应该被否决。我目前受到 stackoverflow 业力系统的激励,自己删除了这个问题。
  • 当然,这始终是一种选择。你仍然有几千分,所以理想情况下,一些负分从长远来看不会受到伤害。激励是一件棘手的事情。我希望下次能鼓励您进行更深入的搜索,但这是我的意见(我是 How much research effort is expected of Stack Overflow users? 的信徒)。

标签: testing rust iterator


【解决方案1】:

有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()));

【讨论】:

  • assert!(a.eq(b)); 就够了
  • @Boiethios simple assert! 有效,但确实有失败消息不能告诉您太多信息的缺点
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2013-04-29
  • 2012-03-28
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
相关资源
最近更新 更多