diff --git a/lib.rs b/lib.rs index 5af32ba..805b929 100644 --- a/lib.rs +++ b/lib.rs @@ -1355,7 +1355,7 @@ impl Extend for SmallVec { ptr::write(ptr.offset(len.get() as isize), out); len.increment_len(1); } else { - break; + return; } } } @@ -2311,4 +2311,16 @@ mod tests { let decoded: SmallVec<[i32; 2]> = deserialize(&encoded).unwrap(); assert_eq!(small_vec, decoded); } + + #[test] + fn resumable_extend() { + let s = "a b c"; + // This iterator yields: (Some('a'), None, Some('b'), None, Some('c')), None + let it = s + .chars() + .scan(0, |_, ch| if ch.is_whitespace() { None } else { Some(ch) }); + let mut v: SmallVec<[char; 4]> = SmallVec::new(); + v.extend(it); + assert_eq!(v[..], ['a']); + } }