//! Bonding Curve 数学计算基准测试 use criterion::{black_box, criterion_group, criterion_main, Criterion}; // 注意: 需要 bonding_curve 模块可访问 // 实际使用时可能需要调整路径 fn bench_calculate_buy(c: &mut Criterion) { let virtual_sol = 30_000_000_000u64; // 30 SOL let virtual_token = 1_073_000_191_000_000u64; let real_token = 793_100_000_000_000u64; let sol_amount = 1_000_000_000u64; // 1 SOL c.bench_function("calculate_buy_1_sol", |b| { b.iter(|| { // 内联计算 (避免模块路径问题) let input_after_fee = (sol_amount - 1) * 10000 / (125 + 10000) + 1; let numerator = input_after_fee as u128 * virtual_token as u128; let denominator = virtual_sol as u128 + input_after_fee as u128; let tokens_out = (numerator / denominator) as u64; black_box(tokens_out.min(real_token)) }) }); } fn bench_calculate_sell(c: &mut Criterion) { let virtual_sol = 31_000_000_000u64; let virtual_token = 1_038_000_000_000_000u64; let token_amount = 34_000_000_000_000u64; c.bench_function("calculate_sell", |b| { b.iter(|| { let numerator = token_amount as u128 * virtual_sol as u128; let denominator = virtual_token as u128 + token_amount as u128; let sol_out_raw = (numerator / denominator) as u64; let sol_out = sol_out_raw * (10000 - 125) / 10000; black_box(sol_out) }) }); } fn bench_price_calculation(c: &mut Criterion) { let virtual_sol = 50_000_000_000u64; let virtual_token = 643_800_000_000_000u64; c.bench_function("spot_price", |b| { b.iter(|| { let price = virtual_sol as f64 / virtual_token as f64; black_box(price * 1_000_000.0 / 1_000_000_000.0) }) }); } criterion_group!( benches, bench_calculate_buy, bench_calculate_sell, bench_price_calculation, ); criterion_main!(benches);