-
Notifications
You must be signed in to change notification settings - Fork 344
ConsTuples::next_back is plain wrong #852
Copy link
Copy link
Closed
Labels
Description
I was re-considering specialize ConsTuples::rfold for #755 when I saw something obviously wrong:
itertools/src/cons_tuples_impl.rs
Lines 26 to 32 in f60fe7e
| impl<X, Iter, $($B),*> DoubleEndedIterator for ConsTuples<Iter, (($($B,)*), X)> | |
| where Iter: DoubleEndedIterator<Item = (($($B,)*), X)>, | |
| { | |
| fn next_back(&mut self) -> Option<Self::Item> { | |
| self.iter.next().map(|(($($B,)*), x)| ($($B,)* x, )) | |
| } | |
| } |
self.iter.next() instead of self.iter.next_back() is one obvious bug here!
ConsTuples is an internal detail of the iproduct macro and the cartesian product does not implement DoubleEndedIterator (and it can't as currently defined) so this is not used inside the crate (and won't).
No one noticed (in 8 years) such an obvious error so it's very unlikely used outside of itertools, right?
I suggest we remove the implementation (breaking change?).
Or we could fix it, add a test (and specialize rfold).
Reactions are currently unavailable