Skip to content

Commit 1c59a72

Browse files
committed
Fix extend from assuming a fused iterator.
1 parent 19de501 commit 1c59a72

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

lib.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ impl<A: Array> Extend<A::Item> for SmallVec<A> {
13551355
ptr::write(ptr.offset(len.get() as isize), out);
13561356
len.increment_len(1);
13571357
} else {
1358-
break;
1358+
return;
13591359
}
13601360
}
13611361
}
@@ -2311,4 +2311,16 @@ mod tests {
23112311
let decoded: SmallVec<[i32; 2]> = deserialize(&encoded).unwrap();
23122312
assert_eq!(small_vec, decoded);
23132313
}
2314+
2315+
#[test]
2316+
fn resumable_extend() {
2317+
let s = "a b c";
2318+
// This iterator yields: (Some('a'), None, Some('b'), None, Some('c')), None
2319+
let it = s
2320+
.chars()
2321+
.scan(0, |_, ch| if ch.is_whitespace() { None } else { Some(ch) });
2322+
let mut v: SmallVec<[char; 4]> = SmallVec::new();
2323+
v.extend(it);
2324+
assert_eq!(v[..], ['a']);
2325+
}
23142326
}

0 commit comments

Comments
 (0)