use sqlitegraph::bench_gates::{self, BenchGateResult, BenchThreshold, set_bench_file_path};
use std::path::PathBuf;
#[test]
fn v2_node_insertion_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_insertion_mixed_graph_1000",
BenchThreshold {
name: "v2_insertion_mixed_graph_1000".into(),
min_ops_per_sec: 800.0, max_ms: 1.25,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_node_insertion_gate_scaled() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_insertion_mixed_graph_5000",
BenchThreshold {
name: "v2_insertion_mixed_graph_5000".into(),
min_ops_per_sec: 600.0, max_ms: 1.67,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_cluster_allocation_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_file_growth_sparse_1000",
BenchThreshold {
name: "v2_file_growth_sparse_1000".into(),
min_ops_per_sec: 70.0, max_ms: 14.29,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_insertion_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_insert_factor_5",
BenchThreshold {
name: "v2_multiedge_insert_factor_5".into(),
min_ops_per_sec: 200.0, max_ms: 5.0,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_query_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_neighbors_dedup_5",
BenchThreshold {
name: "v2_multiedge_neighbors_dedup_5".into(),
min_ops_per_sec: 8000.0, max_ms: 0.125,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_neighbor_query_low_degree_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_neighbor_low_degree",
BenchThreshold {
name: "v2_neighbor_low_degree".into(),
min_ops_per_sec: 40000.0, max_ms: 0.025,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_neighbor_query_high_degree_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_neighbor_high_degree",
BenchThreshold {
name: "v2_neighbor_high_degree".into(),
min_ops_per_sec: 8000.0, max_ms: 0.125,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_neighbor_query_hub_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_neighbor_hub_nodes",
BenchThreshold {
name: "v2_neighbor_hub_nodes".into(),
min_ops_per_sec: 4000.0, max_ms: 0.25,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_bfs_traversal_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_bfs_depth_5_1000",
BenchThreshold {
name: "v2_bfs_depth_5_1000".into(),
min_ops_per_sec: 80.0, max_ms: 12.5,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_k_hop_traversal_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_k_hop_outgoing_3",
BenchThreshold {
name: "v2_k_hop_outgoing_3".into(),
min_ops_per_sec: 400.0, max_ms: 2.5,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_storage_efficiency_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_file_growth_powerlaw_1000",
BenchThreshold {
name: "v2_file_growth_powerlaw_1000".into(),
min_ops_per_sec: 70.0,
max_ms: 14.29,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_transaction_commit_gate() {
}
#[test]
fn v2_rollback_efficiency_gate() {
}
#[test]
fn v2_mmap_read_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_mmap_read_throughput",
BenchThreshold {
name: "v2_mmap_read_throughput".into(),
min_ops_per_sec: 80000.0, max_ms: 0.0125,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_mmap_write_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_mmap_write_throughput",
BenchThreshold {
name: "v2_mmap_write_throughput".into(),
min_ops_per_sec: 40000.0, max_ms: 0.025,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_cluster_compaction_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_cluster_compaction",
BenchThreshold {
name: "v2_cluster_compaction".into(),
min_ops_per_sec: 400.0, max_ms: 2.5,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_insertion_mixed_graph_10000_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_insertion_mixed_graph_10000",
BenchThreshold {
name: "v2_insertion_mixed_graph_10000".into(),
min_ops_per_sec: 400.0, max_ms: 2.5,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_bfs_depth_5_5000_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_bfs_depth_5_5000",
BenchThreshold {
name: "v2_bfs_depth_5_5000".into(),
min_ops_per_sec: 40.0, max_ms: 25.0,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_bfs_depth_10_1000_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_bfs_depth_10_1000",
BenchThreshold {
name: "v2_bfs_depth_10_1000".into(),
min_ops_per_sec: 40.0, max_ms: 25.0,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_k_hop_outgoing_2_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_k_hop_outgoing_2",
BenchThreshold {
name: "v2_k_hop_outgoing_2".into(),
min_ops_per_sec: 800.0, max_ms: 1.25,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_k_hop_outgoing_4_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_k_hop_outgoing_4",
BenchThreshold {
name: "v2_k_hop_outgoing_4".into(),
min_ops_per_sec: 200.0, max_ms: 5.0,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_k_hop_outgoing_5_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_k_hop_outgoing_5",
BenchThreshold {
name: "v2_k_hop_outgoing_5".into(),
min_ops_per_sec: 100.0, max_ms: 10.0,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_insert_factor_3_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_insert_factor_3",
BenchThreshold {
name: "v2_multiedge_insert_factor_3".into(),
min_ops_per_sec: 265.0, max_ms: 3.75,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_insert_factor_10_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_insert_factor_10",
BenchThreshold {
name: "v2_multiedge_insert_factor_10".into(),
min_ops_per_sec: 80.0, max_ms: 12.5,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_insert_factor_20_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_insert_factor_20",
BenchThreshold {
name: "v2_multiedge_insert_factor_20".into(),
min_ops_per_sec: 40.0, max_ms: 25.0,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_neighbors_dedup_3_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_neighbors_dedup_3",
BenchThreshold {
name: "v2_multiedge_neighbors_dedup_3".into(),
min_ops_per_sec: 12000.0, max_ms: 0.083,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_multiedge_neighbors_dedup_10_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_multiedge_neighbors_dedup_10",
BenchThreshold {
name: "v2_multiedge_neighbors_dedup_10".into(),
min_ops_per_sec: 3200.0, max_ms: 0.3125,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_file_growth_sparse_5000_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_file_growth_sparse_5000",
BenchThreshold {
name: "v2_file_growth_sparse_5000".into(),
min_ops_per_sec: 60.0, max_ms: 16.67,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_file_growth_multiedge_1000_gate() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
"v2_file_growth_multiedge_1000",
BenchThreshold {
name: "v2_file_growth_multiedge_1000".into(),
min_ops_per_sec: 60.0, max_ms: 16.67,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
#[test]
fn v2_compact_serialization_gate() {
}
fn baseline_path() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("sqlitegraph_bench.json")
}
fn ensure_v2_benchmarks_exist() {
let path = baseline_path();
if !path.exists() {
panic!("V2 benchmarks not run. Execute: cargo bench --bench v2_performance");
}
}
macro_rules! create_v2_gate_family {
($family_name:ident, $base_name:expr, $($thresholds:expr),*) => {
$(
#[test]
fn $family_name() {
set_bench_file_path(baseline_path());
let result = bench_gates::check_thresholds(
concat!($base_name, "_", stringify!($thresholds)),
BenchThreshold {
name: concat!($base_name, "_", stringify!($thresholds)).into(),
min_ops_per_sec: $thresholds.0,
max_ms: $thresholds.1,
},
)
.expect("gate");
assert_eq!(result, BenchGateResult::Pass);
}
)*
};
}