From b166a2e7b0f3d6b9e90822bb0bc953c776474931 Mon Sep 17 00:00:00 2001 From: demilade-git Date: Sat, 30 May 2026 01:03:21 +0100 Subject: [PATCH 1/2] feat: nextest config, criterion entry point, spike bench, and congestion bench Closes #180 Closes #181 Closes #182 Closes #183 Co-Authored-By: demilade-git --- packages/devkit/.config/nextest.toml | 11 +++++++ packages/devkit/Cargo.toml | 12 ++++++++ packages/devkit/benches/congestion_bench.rs | 34 +++++++++++++++++++++ packages/devkit/benches/main.rs | 3 ++ packages/devkit/benches/spike_bench.rs | 20 ++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 packages/devkit/.config/nextest.toml create mode 100644 packages/devkit/benches/congestion_bench.rs create mode 100644 packages/devkit/benches/main.rs create mode 100644 packages/devkit/benches/spike_bench.rs diff --git a/packages/devkit/.config/nextest.toml b/packages/devkit/.config/nextest.toml new file mode 100644 index 0000000..08c1e16 --- /dev/null +++ b/packages/devkit/.config/nextest.toml @@ -0,0 +1,11 @@ +[profile.default] +retries = 0 +test-threads = "num-cpus" +status-level = "all" +final-status-level = "flaky" + +[profile.ci] +retries = 2 +test-threads = 4 +status-level = "fail" +final-status-level = "flaky" diff --git a/packages/devkit/Cargo.toml b/packages/devkit/Cargo.toml index 7f08e50..1654590 100644 --- a/packages/devkit/Cargo.toml +++ b/packages/devkit/Cargo.toml @@ -27,3 +27,15 @@ harness = false [[bench]] name = "percentile_bench" harness = false + +[[bench]] +name = "main" +harness = false + +[[bench]] +name = "spike_bench" +harness = false + +[[bench]] +name = "congestion_bench" +harness = false diff --git a/packages/devkit/benches/congestion_bench.rs b/packages/devkit/benches/congestion_bench.rs new file mode 100644 index 0000000..a93a356 --- /dev/null +++ b/packages/devkit/benches/congestion_bench.rs @@ -0,0 +1,34 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use stellar_devkit::simulation::congestion_predictor::{ + congestion_score, CongestionInput, CongestionPredictor, +}; + +fn bench_predict(c: &mut Criterion) { + let mut group = c.benchmark_group("congestion_predictor"); + + group.bench_function("predict_1000_calls", |b| { + b.iter(|| { + for i in 0..1_000u64 { + let _ = CongestionPredictor::predict(i % 1000, 100 + i * 10); + } + }) + }); + + group.bench_function("congestion_score_1000_calls", |b| { + b.iter(|| { + for i in 0..1_000u64 { + let input = CongestionInput { + recent_fee_window: 100.0 + i as f64, + capacity_usage: (i % 100) as f64 / 100.0, + spike_count: (i % 10) as u32, + }; + let _ = congestion_score(&input); + } + }) + }); + + group.finish(); +} + +criterion_group!(benches, bench_predict); +criterion_main!(benches); diff --git a/packages/devkit/benches/main.rs b/packages/devkit/benches/main.rs new file mode 100644 index 0000000..41a348f --- /dev/null +++ b/packages/devkit/benches/main.rs @@ -0,0 +1,3 @@ +// Criterion benchmark suite entry point. +// Individual benchmarks are in their own files (spike_bench, congestion_bench, etc.). +fn main() {} diff --git a/packages/devkit/benches/spike_bench.rs b/packages/devkit/benches/spike_bench.rs new file mode 100644 index 0000000..7d37893 --- /dev/null +++ b/packages/devkit/benches/spike_bench.rs @@ -0,0 +1,20 @@ +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use stellar_devkit::analysis::spike_classifier::SpikeClassifier; + +fn bench_iqr_outliers(c: &mut Criterion) { + let mut group = c.benchmark_group("spike_classifier"); + for size in [1_000u64, 10_000, 100_000, 1_000_000] { + let fees: Vec = (0..size) + .map(|i| 100 + (i % 50) * 10) + .collect(); + group.bench_with_input( + BenchmarkId::new("iqr_outliers", size), + &fees, + |b, fees| b.iter(|| SpikeClassifier::iqr_outliers(fees)), + ); + } + group.finish(); +} + +criterion_group!(benches, bench_iqr_outliers); +criterion_main!(benches); From dd5f9dc4e0fbd40ec19041f8fe05bfa4d3c9c917 Mon Sep 17 00:00:00 2001 From: demilade-git Date: Sat, 30 May 2026 08:01:43 +0100 Subject: [PATCH 2/2] style: apply cargo fmt to spike_bench.rs --- packages/devkit/benches/spike_bench.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/devkit/benches/spike_bench.rs b/packages/devkit/benches/spike_bench.rs index 7d37893..c52ddd7 100644 --- a/packages/devkit/benches/spike_bench.rs +++ b/packages/devkit/benches/spike_bench.rs @@ -4,14 +4,10 @@ use stellar_devkit::analysis::spike_classifier::SpikeClassifier; fn bench_iqr_outliers(c: &mut Criterion) { let mut group = c.benchmark_group("spike_classifier"); for size in [1_000u64, 10_000, 100_000, 1_000_000] { - let fees: Vec = (0..size) - .map(|i| 100 + (i % 50) * 10) - .collect(); - group.bench_with_input( - BenchmarkId::new("iqr_outliers", size), - &fees, - |b, fees| b.iter(|| SpikeClassifier::iqr_outliers(fees)), - ); + let fees: Vec = (0..size).map(|i| 100 + (i % 50) * 10).collect(); + group.bench_with_input(BenchmarkId::new("iqr_outliers", size), &fees, |b, fees| { + b.iter(|| SpikeClassifier::iqr_outliers(fees)) + }); } group.finish(); }