tangle


git clone https://radroots.dev/git/tangle.git
Log | Files | Refs | README | LICENSE

commit fc4312b9e4cad654514c6e97a54e193fda9d6772
parent 8673fe5b2774f74524ee108f40601591ddf0c09a
Author: triesap <tyson@radroots.org>
Date:   Sat,  6 Jun 2026 02:38:47 -0700

bench: add ingest benchmark

Diffstat:
Mcrates/tangle_bench/src/lib.rs | 32++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+), 0 deletions(-)

diff --git a/crates/tangle_bench/src/lib.rs b/crates/tangle_bench/src/lib.rs @@ -1,5 +1,6 @@ #![forbid(unsafe_code)] +use std::time::Instant; use tangle_protocol::{Event, filter_from_value}; use tangle_store::{StoreEventOutcome, StoredEvent}; use tangle_store_surreal::{ @@ -245,6 +246,26 @@ pub async fn run_generic_relay_workload( }) } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct IngestBenchmarkReport { + pub attempted: u64, + pub inserted: u64, + pub elapsed_micros: u128, +} + +pub async fn run_ingest_benchmark( + config: BenchDatasetConfig, +) -> Result<IngestBenchmarkReport, String> { + let dataset = BenchDataset::generate(config)?; + let started = Instant::now(); + let report = run_generic_relay_workload(&dataset).await?; + Ok(IngestBenchmarkReport { + attempted: report.attempted, + inserted: report.inserted, + elapsed_micros: started.elapsed().as_micros(), + }) +} + async fn bench_memory_store(database: &str) -> Result<SurrealStore, String> { let config = SurrealConnectionConfig::memory("tangle_bench", database) .map_err(|error| error.to_string())?; @@ -431,4 +452,15 @@ mod tests { } ); } + + #[tokio::test] + async fn ingest_benchmark_reports_deterministic_event_counts() { + let report = super::run_ingest_benchmark(BenchDatasetConfig::new(6, 4)) + .await + .expect("ingest benchmark"); + + assert_eq!(report.attempted, 10); + assert_eq!(report.inserted, 10); + assert!(report.elapsed_micros > 0); + } }