Skip to content

Commit

Permalink
Fix incorrect advance_back_by logic for tuple and list
Browse files Browse the repository at this point in the history
  • Loading branch information
Owen-CH-Leung committed Feb 13, 2025
1 parent 41e3779 commit 7ac2f20
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/types/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -920,7 +920,7 @@ impl DoubleEndedIterator for BoundListIterator<'_> {
length.0 = max_len - n;
Ok(())
} else {
length.0 = max_len;
length.0 = currently_at;
let remainder = n - items_left;
Err(unsafe { NonZero::new_unchecked(remainder) })
}
Expand Down
22 changes: 7 additions & 15 deletions src/types/tuple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,13 +383,8 @@ impl<'py> Iterator for BoundTupleIterator<'py> {
let length = self.length.min(self.tuple.len());
let target_index = self.index + n;
if target_index < length {
let item = {
{
unsafe {
BorrowedTupleIterator::get_item(self.tuple.as_borrowed(), target_index)
.to_owned()
}
}
let item = unsafe {
BorrowedTupleIterator::get_item(self.tuple.as_borrowed(), target_index).to_owned()
};
self.index = target_index + 1;
Some(item)
Expand Down Expand Up @@ -444,13 +439,8 @@ impl DoubleEndedIterator for BoundTupleIterator<'_> {
let length_size = self.length.min(self.tuple.len());
if self.index + n < length_size {
let target_index = length_size - n - 1;
let item = {
{
unsafe {
BorrowedTupleIterator::get_item(self.tuple.as_borrowed(), target_index)
.to_owned()
}
}
let item = unsafe {
BorrowedTupleIterator::get_item(self.tuple.as_borrowed(), target_index).to_owned()
};
self.length = target_index;
Some(item)
Expand All @@ -477,7 +467,7 @@ impl DoubleEndedIterator for BoundTupleIterator<'_> {
self.length = max_len - n;
Ok(())
} else {
self.length = max_len;
self.length = currently_at;
let remainder = n - items_left;
Err(unsafe { NonZero::new_unchecked(remainder) })
}
Expand Down Expand Up @@ -1700,6 +1690,7 @@ mod tests {
assert_eq!(iter.next().unwrap().extract::<i32>().unwrap(), 3);
assert_eq!(iter.advance_by(0), Ok(()));
assert_eq!(iter.advance_by(100), Err(NonZero::new(98).unwrap()));
assert!(iter.next().is_none());

let mut iter2 = tuple.iter();
assert_eq!(iter2.advance_by(6), Err(NonZero::new(1).unwrap()));
Expand All @@ -1724,6 +1715,7 @@ mod tests {
assert_eq!(iter.next_back().unwrap().extract::<i32>().unwrap(), 3);
assert_eq!(iter.advance_back_by(0), Ok(()));
assert_eq!(iter.advance_back_by(100), Err(NonZero::new(98).unwrap()));
assert!(iter.next_back().is_none());

let mut iter2 = tuple.iter();
assert_eq!(iter2.advance_back_by(6), Err(NonZero::new(1).unwrap()));
Expand Down

0 comments on commit 7ac2f20

Please sign in to comment.