add random blobs

This commit is contained in:
realbigsean
2023-04-27 17:39:52 -04:00
parent 185b7615a2
commit a9b24bb9df
7 changed files with 139 additions and 103 deletions

View File

@@ -255,6 +255,11 @@ pub trait EthSpec:
fn max_blobs_per_block() -> usize {
Self::MaxBlobsPerBlock::to_usize()
}
/// Returns the `BYTES_PER_BLOB` constant for this specification.
fn bytes_per_blob() -> usize {
Self::BytesPerBlob::to_usize()
}
}
/// Macro to inherit some type values from another EthSpec.

View File

@@ -4,8 +4,24 @@ use smallvec::smallvec;
impl<N: Unsigned + Clone> TestRandom for BitList<N> {
fn random_for_test(rng: &mut impl RngCore) -> Self {
let mut raw_bytes = smallvec![0; std::cmp::max(1, (N::to_usize() + 7) / 8)];
let initial_len = std::cmp::max(1, (N::to_usize() + 7) / 8);
let mut raw_bytes = smallvec![0; initial_len];
rng.fill_bytes(&mut raw_bytes);
let highest_set_bit = raw_bytes
.iter()
.enumerate()
.rev()
.find(|(_, byte)| **byte > 0)
.map(|(i, byte)| i * 8 + 7 - byte.leading_zeros() as usize)
.unwrap_or(0);
let actual_len = highest_set_bit / 8 + 1;
if actual_len < initial_len {
raw_bytes.truncate(actual_len);
}
Self::from_bytes(raw_bytes).expect("we generate a valid BitList")
}
}