feat: impl Extend for SequenceNumberSet

Allow a SequenceNumberSet to be efficiently extended from any iterator
of SequenceNumber instances.
pull/24376/head
Dom Dwyer 2023-02-22 14:13:32 +01:00
parent c538cac4ef
commit 6532fb752b
No known key found for this signature in database
GPG Key ID: E4C40DBD9157879A
1 changed files with 24 additions and 0 deletions

View File

@ -73,6 +73,12 @@ impl TryFrom<&[u8]> for SequenceNumberSet {
}
}
impl Extend<SequenceNumber> for SequenceNumberSet {
fn extend<T: IntoIterator<Item = SequenceNumber>>(&mut self, iter: T) {
self.0.extend(iter.into_iter().map(|v| v.get() as _))
}
}
#[cfg(test)]
mod tests {
use super::*;
@ -114,4 +120,22 @@ mod tests {
a.remove(SequenceNumber::new(1));
assert_eq!(a.len(), 0);
}
#[test]
fn test_extend() {
let mut a = SequenceNumberSet::default();
a.add(SequenceNumber::new(42));
let extend_set = [SequenceNumber::new(4), SequenceNumber::new(2)];
assert!(a.contains(SequenceNumber::new(42)));
assert!(!a.contains(SequenceNumber::new(4)));
assert!(!a.contains(SequenceNumber::new(2)));
a.extend(extend_set);
assert!(a.contains(SequenceNumber::new(42)));
assert!(a.contains(SequenceNumber::new(4)));
assert!(a.contains(SequenceNumber::new(2)));
}
}