mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-06 18:21:45 +00:00
80 lines
1.8 KiB
Rust
80 lines
1.8 KiB
Rust
use types::*;
|
|
|
|
/// Verify ``bitfield`` against the ``committee_size``.
|
|
///
|
|
/// Is title `verify_bitfield` in spec.
|
|
///
|
|
/// Spec v0.6.1
|
|
pub fn verify_bitfield_length(bitfield: &Bitfield, committee_size: usize) -> bool {
|
|
if bitfield.num_bytes() != ((committee_size + 7) / 8) {
|
|
return false;
|
|
}
|
|
|
|
for i in committee_size..(bitfield.num_bytes() * 8) {
|
|
if bitfield.get(i).unwrap_or(false) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
true
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn bitfield_length() {
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b0000_0001]), 4),
|
|
true
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b0001_0001]), 4),
|
|
false
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b0000_0000]), 4),
|
|
true
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b1000_0000]), 8),
|
|
true
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b1000_0000, 0b0000_0000]), 16),
|
|
true
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b1000_0000, 0b0000_0000]), 15),
|
|
false
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(&Bitfield::from_bytes(&[0b0000_0000, 0b0000_0000]), 8),
|
|
false
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(
|
|
&Bitfield::from_bytes(&[0b0000_0000, 0b0000_0000, 0b0000_0000]),
|
|
8
|
|
),
|
|
false
|
|
);
|
|
|
|
assert_eq!(
|
|
verify_bitfield_length(
|
|
&Bitfield::from_bytes(&[0b0000_0000, 0b0000_0000, 0b0000_0000]),
|
|
24
|
|
),
|
|
true
|
|
);
|
|
}
|
|
}
|