#![allow(clippy::result_large_err)]
#[cfg(test)]
mod optimized_custom_aggregation_tests {
use pandrs::error::Result;
use pandrs::optimized::OptimizedDataFrame;
#[allow(clippy::result_large_err)]
fn setup_test_df() -> Result<OptimizedDataFrame> {
let mut df = OptimizedDataFrame::new();
let groups: Vec<String> = ["A", "B", "A", "B", "A", "C", "B", "C", "C", "A"]
.iter()
.map(|s| s.to_string())
.collect();
df.add_string_column("group", groups)?;
let values = [10, 25, 15, 30, 22, 18, 24, 12, 16, 20];
df.add_int_column("value", values.to_vec())?;
Ok(df)
}
#[test]
#[allow(clippy::result_large_err)]
fn test_dataframe_creation() -> Result<()> {
let df = setup_test_df()?;
assert_eq!(df.row_count(), 10);
assert_eq!(df.column_count(), 2);
assert!(df.contains_column("group"));
assert!(df.contains_column("value"));
Ok(())
}
#[test]
#[allow(clippy::result_large_err)]
fn test_basic_aggregation_operations() -> Result<()> {
let df = setup_test_df()?;
if let Ok(values) = df.get_int_column("value") {
let sum: i64 = values.iter().filter_map(|v| *v).sum();
let count = values.iter().filter_map(|v| *v).count();
let mean = sum as f64 / count as f64;
assert_eq!(sum, 192); assert_eq!(count, 10); assert!((mean - 19.2).abs() < 0.001); }
Ok(())
}
#[test]
#[allow(clippy::result_large_err)]
fn test_custom_aggregation_method() -> Result<()> {
let _df = setup_test_df()?;
Ok(())
}
#[test]
#[allow(clippy::result_large_err)]
fn test_aggregate_custom_method() -> Result<()> {
let _df = setup_test_df()?;
Ok(())
}
#[test]
#[allow(clippy::result_large_err)]
fn test_statistical_calculations() -> Result<()> {
let df = setup_test_df()?;
if let Ok(values) = df.get_int_column("value") {
let data: Vec<i64> = values.iter().filter_map(|v| *v).collect();
let sum_of_reciprocals: f64 = data.iter().map(|&x| 1.0 / x as f64).sum();
let harmonic_mean = data.len() as f64 / sum_of_reciprocals;
let mean = data.iter().sum::<i64>() as f64 / data.len() as f64;
let variance = data
.iter()
.map(|&x| {
let diff = x as f64 - mean;
diff * diff
})
.sum::<f64>()
/ data.len() as f64;
let std_dev = variance.sqrt();
let cv = std_dev / mean;
assert!(harmonic_mean > 0.0);
assert!(cv > 0.0);
assert!(std_dev > 0.0);
}
Ok(())
}
}