use commonware_runtime::tokio::Context;
use commonware_storage::ordinal;
use commonware_utils::{sequence::FixedBytes, NZUsize, NZU64};
use rand::{rngs::StdRng, RngCore, SeedableRng};
const WRITE_BUFFER: usize = 1024;
const REPLAY_BUFFER: usize = 1024 * 1024;
pub const PARTITION: &str = "ordinal-bench-partition";
const ITEMS_PER_BLOB: u64 = 10000;
pub type Ordinal = ordinal::Ordinal<Context, FixedBytes<128>>;
pub async fn init(ctx: Context) -> Ordinal {
let cfg = ordinal::Config {
partition: PARTITION.into(),
items_per_blob: NZU64!(ITEMS_PER_BLOB),
write_buffer: NZUsize!(WRITE_BUFFER),
replay_buffer: NZUsize!(REPLAY_BUFFER),
};
ordinal::Ordinal::init(ctx, cfg).await.unwrap()
}
pub async fn append_random(store: &mut Ordinal, count: u64) -> Vec<u64> {
let mut rng = StdRng::seed_from_u64(0);
let mut val_buf = [0u8; 128];
let mut indices = Vec::with_capacity(count as usize);
for i in 0..count {
indices.push(i);
rng.fill_bytes(&mut val_buf);
store.put(i, FixedBytes::new(val_buf)).await.unwrap();
}
store.sync().await.unwrap();
indices
}