#[cfg(feature = "time_profiling")]
use thag_profiler::{
enable_profiling, file_stem_from_path_str, profiled,
profiling::{get_reg_desc_name, is_profiled_function},
ProfileType,
};
#[cfg(feature = "time_profiling")]
#[profiled(time)]
async fn profiled_function_time_test() {
let profile = profile.as_ref().unwrap();
let fn_name = profile.fn_name();
let file_name = profile.file_name();
assert_eq!(profile.get_profile_type(), ProfileType::Time);
assert!(!profile.is_detailed_memory());
assert_eq!(
fn_name,
"test_profiled_behavior::profiled_function_time_test"
);
let stack_str = format!("test_profiled_behavior::test_profiled_behavior;{fn_name}");
#[cfg(not(feature = "full_profiling"))]
assert_eq!(profile.registered_name(), fn_name.to_string());
#[cfg(feature = "full_profiling")]
assert_eq!(profile.registered_name(), stack_str);
assert_eq!(profile.start_line(), None);
assert_eq!(file_name, "test_profiled_behavior");
assert_eq!(file_name, file_stem_from_path_str(file!()));
assert!(is_profiled_function(&stack_str));
assert_eq!(
get_reg_desc_name(&stack_str),
Some(format!("async::{fn_name}"))
);
}
#[cfg(feature = "time_profiling")]
#[profiled(time, test)]
async fn profiled_function_with_test_flag() {
let profile = profile.as_ref().unwrap();
let fn_name = profile.fn_name();
assert_eq!(profile.get_profile_type(), ProfileType::Time);
assert!(!profile.is_detailed_memory());
assert_eq!(
fn_name,
"test_profiled_behavior::profiled_function_with_test_flag"
);
let stack_str = format!("test_profiled_behavior::test_profiled_behavior;{fn_name}");
#[cfg(not(feature = "full_profiling"))]
assert_eq!(profile.registered_name(), fn_name.to_string());
#[cfg(feature = "full_profiling")]
assert_eq!(profile.registered_name(), stack_str);
assert!(is_profiled_function(&stack_str));
}
#[cfg(feature = "full_profiling")]
#[profiled(mem_detail)]
fn profiled_function_memory() {
let profile = profile.as_ref().unwrap();
let fn_name = profile.fn_name();
let file_name = profile.file_name();
assert_eq!(profile.get_profile_type(), ProfileType::Memory);
assert!(profile.is_detailed_memory());
assert_eq!(fn_name, "test_profiled_behavior::profiled_function_memory");
let stack_str = format!("test_profiled_behavior::test_profiled_behavior;{fn_name}");
assert_eq!(profile.registered_name(), stack_str);
assert_eq!(profile.start_line(), None);
assert_eq!(file_name, "test_profiled_behavior");
assert_eq!(file_name, file_stem_from_path_str(file!()));
assert!(is_profiled_function(&stack_str));
assert_eq!(get_reg_desc_name(&stack_str), Some(fn_name.to_string()));
}
#[cfg(feature = "full_profiling")]
#[profiled(mem_summary)]
fn profiled_function_memory_summary_test() {
let profile = profile.as_ref().unwrap();
assert_eq!(profile.get_profile_type(), ProfileType::Memory);
assert!(!profile.is_detailed_memory());
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_memory_summary_test"
);
}
#[cfg(feature = "full_profiling")]
#[profiled(both)]
fn profiled_function_both_test() {
let profile = profile.as_ref().unwrap();
assert_eq!(profile.get_profile_type(), ProfileType::Both);
assert!(!profile.is_detailed_memory());
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_both_test"
);
}
#[cfg(feature = "full_profiling")]
#[profiled(time, mem_detail)]
fn profiled_function_time_mem_detail_test() {
let profile = profile.as_ref().unwrap();
assert_eq!(profile.get_profile_type(), ProfileType::Both);
assert!(profile.is_detailed_memory());
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_time_mem_detail_test"
);
}
#[cfg(feature = "full_profiling")]
#[profiled(time, mem_summary)]
fn profiled_function_time_mem_summary_test() {
let profile = profile.as_ref().unwrap();
assert_eq!(profile.get_profile_type(), ProfileType::Both);
assert!(!profile.is_detailed_memory());
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_time_mem_summary_test"
);
}
#[cfg(feature = "time_profiling")]
#[profiled(global)]
fn profiled_function_global_test() {
let profile = profile.as_ref().unwrap();
#[cfg(feature = "full_profiling")]
assert_eq!(profile.get_profile_type(), ProfileType::Both);
#[cfg(not(feature = "full_profiling"))]
assert_eq!(profile.get_profile_type(), ProfileType::Time);
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_global_test"
);
}
#[cfg(feature = "time_profiling")]
#[profiled]
fn profiled_function_default_test() {
let profile = profile.as_ref().unwrap();
#[cfg(feature = "full_profiling")]
assert_eq!(profile.get_profile_type(), ProfileType::Both);
#[cfg(not(feature = "full_profiling"))]
assert_eq!(profile.get_profile_type(), ProfileType::Time);
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_default_test"
);
}
#[cfg(feature = "full_profiling")]
#[profiled(both, test)]
async fn profiled_function_both_async_test() {
let profile = profile.as_ref().unwrap();
assert_eq!(profile.get_profile_type(), ProfileType::Both);
assert!(!profile.is_detailed_memory());
let fn_name = profile.fn_name();
assert_eq!(
fn_name,
"test_profiled_behavior::profiled_function_both_async_test"
);
let stack_str = format!("test_profiled_behavior::test_profiled_behavior;{fn_name}");
assert_eq!(profile.registered_name(), stack_str);
assert_eq!(
get_reg_desc_name(&stack_str),
Some(format!("async::{fn_name}"))
);
}
#[cfg(feature = "time_profiling")]
#[profiled(time)]
fn profiled_function_legacy_params_test() {
let profile = profile.as_ref().unwrap();
assert_eq!(profile.get_profile_type(), ProfileType::Time);
assert!(!profile.is_detailed_memory());
assert_eq!(
profile.fn_name(),
"test_profiled_behavior::profiled_function_legacy_params_test"
);
}
#[cfg(feature = "time_profiling")]
#[profiled(mem_detail)]
fn profiled_function_detailed_memory_test() {
let profile = profile.as_ref().unwrap();
#[cfg(not(feature = "full_profiling"))]
assert_eq!(profile.get_profile_type(), ProfileType::Time);
#[cfg(feature = "full_profiling")]
assert_eq!(profile.get_profile_type(), ProfileType::Memory);
#[cfg(not(feature = "full_profiling"))]
assert!(!profile.is_detailed_memory());
#[cfg(feature = "full_profiling")]
assert!(profile.is_detailed_memory());
}
#[cfg(feature = "time_profiling")]
#[profiled(time, mem_detail)]
fn profiled_function_both_legacy_params_test() {
let profile = profile.as_ref().unwrap();
#[cfg(feature = "full_profiling")]
assert_eq!(profile.get_profile_type(), ProfileType::Both);
#[cfg(not(feature = "full_profiling"))]
assert_eq!(profile.get_profile_type(), ProfileType::Time);
#[cfg(feature = "full_profiling")]
assert!(profile.is_detailed_memory());
#[cfg(not(feature = "full_profiling"))]
assert!(!profile.is_detailed_memory());
}
#[test]
#[cfg(feature = "time_profiling")]
#[enable_profiling]
fn test_profiled_behavior() {
use async_std::task::block_on;
use thag_profiler::safe_alloc;
let closure = || {
#[cfg(feature = "full_profiling")]
{
profiled_function_memory();
profiled_function_memory_summary_test();
profiled_function_both_test();
profiled_function_time_mem_detail_test();
profiled_function_time_mem_summary_test();
}
profiled_function_global_test();
profiled_function_default_test();
profiled_function_legacy_params_test();
profiled_function_detailed_memory_test();
profiled_function_both_legacy_params_test();
block_on(profiled_function_time_test());
block_on(profiled_function_with_test_flag());
#[cfg(feature = "full_profiling")]
block_on(profiled_function_both_async_test());
println!("All tests passed!");
};
#[cfg(not(feature = "full_profiling"))]
closure();
safe_alloc!(closure());
}