use error::CommonError;
pub mod error;
pub mod epoll_loop;
pub mod event_loop;
pub mod socket;
pub mod interval;
pub mod stats;
pub mod tcp_socket;
pub mod time;
pub mod udp_socket;
pub trait Strategy<R: TestResult, E: std::error::Error> {
fn execute(&mut self) -> std::result::Result<R, E>;
}
pub trait TestResult: Send {
fn status(&self) -> Result<(), CommonError> {
Ok(())
}
}
#[macro_export]
macro_rules! assert_approx_eq {
($a:expr, $b:expr, $epsilon:expr) => {{
let (a, b, eps) = (&$a, &$b, &$epsilon);
assert!(
(*a - *b).abs() < *eps,
"{:?} is not approximately equal to {:?} (epsilon = {:?})",
*a,
*b,
*eps
);
}};
}
#[macro_export]
macro_rules! libc_call {
($name:ident($($arg_name:expr), *)) => (unsafe {
let result = libc::$name($($arg_name),*) ;
if result == -1 {
let err = std::io::Error::last_os_error();
let err_msg = std::ffi::CStr::from_ptr(libc::strerror(err.raw_os_error().ok_or("Error retrieving os error")?));
return Err(std::io::Error::new(err.kind(), err_msg.to_string_lossy().into_owned()).into());
}
std::result::Result::Ok(result)
})
}