From c61daf69ed5303ab264e1a92df3d20886e951f50 Mon Sep 17 00:00:00 2001 From: Daniel Knopik Date: Fri, 24 Apr 2026 16:46:21 +0200 Subject: [PATCH] Add clone_zeroed --- ssz/src/bitfield.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ssz/src/bitfield.rs b/ssz/src/bitfield.rs index e3b1e02..ef7bd76 100644 --- a/ssz/src/bitfield.rs +++ b/ssz/src/bitfield.rs @@ -275,6 +275,13 @@ impl Bitfield> { Ok(resized) } + + /// Returns a clone of the bitfield with all bits set to false. + /// + /// Compared to `with_capacity`, this is infallible. + pub fn clone_zeroed(&self) -> Self { + Self::with_capacity(self.len()).expect("`len` is guaranteed to be `N` or less") + } } impl Bitfield> { @@ -1480,6 +1487,30 @@ mod bitlist { assert_eq!(e, Error::OutOfBounds { i: 9, len: 8 }); } + #[test] + fn clone_zeroed() { + let mut bitfield = BitList1024::with_capacity(16).unwrap(); + bitfield.set(0, true).unwrap(); + bitfield.set(5, true).unwrap(); + bitfield.set(15, true).unwrap(); + + let zeroed = bitfield.clone_zeroed(); + assert_eq!(zeroed.len(), 16); + assert!(zeroed.is_zero()); + + let mut bitfield = BitList1::with_capacity(1).unwrap(); + bitfield.set(0, true).unwrap(); + + let zeroed = bitfield.clone_zeroed(); + assert_eq!(zeroed.len(), 1); + assert!(zeroed.is_zero()); + + let empty = BitList0::with_capacity(0).unwrap(); + let zeroed_empty = empty.clone_zeroed(); + assert_eq!(zeroed_empty.len(), 0); + assert!(zeroed_empty.is_zero()); + } + #[test] fn display() { let bitlist = BitList1024::from_raw_bytes(smallvec![0b0011_1111, 0b0001_0101], 15).unwrap();