2023-01-30 12:09:47 -08:00
|
|
|
use super::*;
|
2022-03-25 22:16:52 -07:00
|
|
|
|
2023-08-24 07:33:08 -07:00
|
|
|
use itertools::Itertools;
|
|
|
|
use regex::Regex;
|
|
|
|
|
2022-03-25 22:16:52 -07:00
|
|
|
#[tokio::test]
|
2022-05-18 08:16:14 -07:00
|
|
|
async fn test_benchmark() -> Result<(), TransportError> {
|
2022-03-25 22:16:52 -07:00
|
|
|
let context = TestContext::new().await;
|
|
|
|
let solana = &context.solana.clone();
|
|
|
|
|
2023-10-11 06:18:23 -07:00
|
|
|
let result = send_tx_get_metadata(solana, BenchmarkInstruction {})
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let meta = result.metadata.unwrap();
|
2022-03-25 22:16:52 -07:00
|
|
|
|
2023-10-11 06:18:23 -07:00
|
|
|
let log_lines = meta.log_messages;
|
2023-08-24 07:33:08 -07:00
|
|
|
let bench_regions = log_lines
|
|
|
|
.iter()
|
|
|
|
.enumerate()
|
|
|
|
.filter_map(|(index, line)| {
|
2023-10-11 06:18:23 -07:00
|
|
|
if line.starts_with(&"Program log: BENCH") {
|
2023-08-24 07:33:08 -07:00
|
|
|
Some(index)
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.chain([log_lines.len()])
|
|
|
|
.collect_vec();
|
|
|
|
|
|
|
|
let name_regex = Regex::new(r#"BENCH: (.+)"#).unwrap();
|
|
|
|
let cu_regex = Regex::new(r#"(\d+) units remaining"#).unwrap();
|
|
|
|
for (start, end) in bench_regions.iter().tuple_windows() {
|
|
|
|
let lines = &log_lines[*start..*end];
|
|
|
|
let name = name_regex.captures(&lines[0]).unwrap()[1].to_string();
|
|
|
|
|
|
|
|
let cu = lines
|
|
|
|
.iter()
|
|
|
|
.filter_map(|line| {
|
|
|
|
cu_regex
|
|
|
|
.captures(line)
|
|
|
|
.map(|c| c[1].parse::<u64>().unwrap())
|
|
|
|
})
|
|
|
|
.take(2)
|
|
|
|
.collect_vec();
|
|
|
|
let cu_print_cost = 101;
|
|
|
|
let cost = cu[0] - cu[1] - cu_print_cost;
|
|
|
|
println!("{name:<25}{cost:>7}");
|
|
|
|
}
|
|
|
|
|
2022-03-25 22:16:52 -07:00
|
|
|
Ok(())
|
|
|
|
}
|