use crate::ordinal::{Config, Error, Ordinal};
use commonware_conformance::conformance_tests;
use commonware_runtime::{
conformance::{StorageConformance, StorageWorkload},
Supervisor as _,
};
use commonware_utils::{sequence::FixedBytes, NZUsize, NZU64};
use rand::RngExt as _;
struct OrdinalWorkload;
impl StorageWorkload for OrdinalWorkload {
type Error = Error;
async fn run(
mut context: commonware_runtime::deterministic::Context,
seed: u64,
) -> Result<(), Self::Error> {
let cfg = Config {
partition: format!("ordinal-conformance-{seed}"),
items_per_blob: NZU64!(16),
write_buffer: NZUsize!(1024),
replay_buffer: NZUsize!(1024),
};
let mut ordinal =
Ordinal::<_, FixedBytes<32>>::init(context.child("ordinal"), cfg, None).await?;
let items = context.random_range(16..80);
for i in 0..items {
let index = i as u64 * 3 + (seed % 3);
let mut value = [0; 32];
context.fill(&mut value);
ordinal.put(index, FixedBytes::new(value)).await?;
}
ordinal.sync().await?;
if items > 32 {
ordinal.prune(32).await?;
ordinal.sync().await?;
}
Ok(())
}
}
conformance_tests! {
StorageConformance<OrdinalWorkload> => 256,
}