Skip to content

Commit 815ba87

Browse files
committed
Fix VariantArray iterator skip logic
1 parent 29b89b0 commit 815ba87

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

gdnative-core/src/core_types/variant_array.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -433,10 +433,11 @@ impl<'a, Own: Ownership> Iterator for Iter<'a, Own> {
433433

434434
#[inline]
435435
fn nth(&mut self, n: usize) -> Option<Self::Item> {
436-
let n = i32::try_from(n).ok()?;
436+
let n32 = i32::try_from(n).ok()?;
437437

438-
if self.arr.len() > n {
439-
Some(self.arr.get(n))
438+
if n32 < self.arr.len() {
439+
self.range.nth(n);
440+
Some(self.arr.get(n32))
440441
} else {
441442
None
442443
}
@@ -485,10 +486,11 @@ impl Iterator for IntoIter {
485486

486487
#[inline]
487488
fn nth(&mut self, n: usize) -> Option<Self::Item> {
488-
let n = i32::try_from(n).ok()?;
489+
let n32 = i32::try_from(n).ok()?;
489490

490-
if self.arr.len() > n {
491-
Some(self.arr.get(n))
491+
if n32 < self.arr.len() {
492+
self.range.nth(n);
493+
Some(self.arr.get(n32))
492494
} else {
493495
None
494496
}
@@ -593,10 +595,18 @@ godot_test!(test_array {
593595
array3.push(&Variant::new(512));
594596

595597
assert_eq!(
596-
&[42, 1337, 512],
597598
array3.iter().map(|v| v.try_to::<i64>().unwrap()).collect::<Vec<_>>().as_slice(),
599+
&[42, 1337, 512],
598600
);
599601

602+
let mut iter = array3.iter().skip(2);
603+
assert_eq!(iter.next(), Some(Variant::new(512)));
604+
assert_eq!(iter.next(), None);
605+
606+
let mut iter = array3.into_iter().skip(2);
607+
assert_eq!(iter.next(), Some(Variant::new(512)));
608+
assert_eq!(iter.next(), None);
609+
600610
let array4 = VariantArray::new(); // []
601611
let array5 = VariantArray::new(); // []
602612
array4.push(&foo); // [&foo]

0 commit comments

Comments
 (0)