mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 12:37:00 +01:00
46 lines
1.3 KiB
Rust
46 lines
1.3 KiB
Rust
#[test]
|
|
fn bench_ip_address_parsing() {
|
|
use std::net::{IpAddr, SocketAddr};
|
|
use std::str::FromStr;
|
|
use std::time::Instant;
|
|
|
|
let ip_input_some = Some("1.2.3.4:1234");
|
|
let test_val = Some(IpAddr::from_str("1.2.3.4").unwrap());
|
|
|
|
let iterations = 10000000u128;
|
|
|
|
// test the split method
|
|
let split_start = Instant::now();
|
|
for _ in 0..iterations {
|
|
let res: Option<IpAddr> = ip_input_some
|
|
.map(|addr| addr.split(':').next().unwrap_or(addr))
|
|
.and_then(|ip| ip.parse::<IpAddr>().ok());
|
|
assert_eq!(test_val, res);
|
|
}
|
|
let split_end = Instant::now();
|
|
|
|
// test the socket parsing method
|
|
let socket_start = Instant::now();
|
|
for _ in 0..iterations {
|
|
let res: Option<IpAddr> = ip_input_some
|
|
.and_then(|add_str| add_str.parse().ok())
|
|
.map(|s_ad: SocketAddr| s_ad.ip());
|
|
assert_eq!(test_val, res);
|
|
}
|
|
|
|
let socket_end = Instant::now();
|
|
|
|
let split_time = split_end.duration_since(split_start);
|
|
let socket_time = socket_end.duration_since(socket_start);
|
|
println!(
|
|
"Split time: {:?}, {}ns/iteration",
|
|
split_time,
|
|
split_time.as_nanos() / iterations
|
|
);
|
|
println!(
|
|
"Socket time: {:?}, {}ns/iteration",
|
|
socket_time,
|
|
socket_time.as_nanos() / iterations
|
|
);
|
|
}
|