#[cfg(test)]
mod tests {
use crate::auto_feature_engineering::{AutoFeatureEngineer, DatasetMetaFeatures};
use crate::{
AdvancedNeuromorphicProcessor, AdvancedQuantumOptimizer, NeuromorphicTransformationSystem,
QuantumTransformationOptimizer, TransformationType,
};
use scirs2_core::ndarray::Array2;
#[test]
fn test_advanced_neuromorphic_creation() {
let processor = AdvancedNeuromorphicProcessor::new(10, 20, 5);
assert_eq!(processor.get_advanced_diagnostics().throughput, 0.0);
assert_eq!(processor.get_advanced_diagnostics().memory_efficiency, 1.0);
}
#[test]
fn test_advanced_quantum_creation() {
let bounds = vec![(0.0, 1.0); 5];
let optimizer = AdvancedQuantumOptimizer::new(5, 20, bounds, 100);
assert!(optimizer.is_ok());
if let Ok(opt) = optimizer {
let metrics = opt.get_advanced_diagnostics();
assert!(metrics.quantum_efficiency >= 0.0);
assert!(metrics.quantum_efficiency <= 1.0);
}
}
#[test]
fn test_quantum_transformation_optimizer() {
let optimizer = QuantumTransformationOptimizer::new();
assert!(optimizer.is_ok());
}
#[test]
fn test_neuromorphic_transformation_system() {
let mut system = NeuromorphicTransformationSystem::new();
let meta_features = create_test_meta_features();
let recommendations = system.recommend_transformations(&meta_features);
assert!(recommendations.is_ok() || recommendations.is_err()); }
#[test]
fn test_auto_feature_engineer_creation() {
let engineer = AutoFeatureEngineer::new();
assert!(engineer.is_ok());
}
#[test]
fn test_basic_functionality() {
let meta_features = create_test_meta_features();
assert_eq!(meta_features.n_samples, 1000);
assert_eq!(meta_features.n_features, 50);
assert!((meta_features.sparsity - 0.1).abs() < f64::EPSILON);
}
#[test]
fn test_advanced_integration_workflow() {
let _quantum_opt =
QuantumTransformationOptimizer::new().expect("Failed to create quantum optimizer");
let mut neuro_system = NeuromorphicTransformationSystem::new();
let _auto_engineer = AutoFeatureEngineer::new().expect("Failed to create auto engineer");
let meta_features = create_test_meta_features();
let recommendations = neuro_system.recommend_transformations(&meta_features);
match recommendations {
Ok(_) => println!("✅ Neuromorphic recommendations generated successfully"),
Err(_) => println!(
"⚠️ Neuromorphic recommendations returned an error (expected in some cases)"
),
}
}
#[test]
fn test_transformation_type_completeness() {
let types = vec![
TransformationType::StandardScaler,
TransformationType::MinMaxScaler,
TransformationType::RobustScaler,
TransformationType::PowerTransformer,
TransformationType::PolynomialFeatures,
TransformationType::PCA,
];
assert_eq!(types.len(), 6);
}
#[test]
fn test_meta_features_validation() {
let meta_features = create_test_meta_features();
assert!(meta_features.n_samples > 0);
assert!(meta_features.n_features > 0);
assert!(meta_features.sparsity >= 0.0 && meta_features.sparsity <= 1.0);
assert!(meta_features.missing_ratio >= 0.0 && meta_features.missing_ratio <= 1.0);
assert!(meta_features.outlier_ratio >= 0.0 && meta_features.outlier_ratio <= 1.0);
assert!(meta_features.variance_ratio >= 0.0 && meta_features.variance_ratio <= 1.0);
}
#[test]
fn test_synthetic_data_generation() {
let data = create_test_dataset(100, 10);
assert_eq!(data.nrows(), 100);
assert_eq!(data.ncols(), 10);
let sum = data.iter().sum::<f64>();
assert!(sum.abs() > f64::EPSILON);
}
#[test]
fn test_advanced_performance_metrics() {
let bounds = vec![(0.0, 1.0); 3];
let optimizer = AdvancedQuantumOptimizer::new(3, 10, bounds, 50);
if let Ok(opt) = optimizer {
let _metrics = opt.get_advanced_diagnostics();
println!("✅ Quantum optimizer metrics validated");
}
}
#[test]
fn test_advanced_data_processing() {
let small_data = create_test_dataset(10, 5);
let medium_data = create_test_dataset(100, 20);
let large_data = create_test_dataset(1000, 50);
assert_eq!(small_data.dim(), (10, 5));
assert_eq!(medium_data.dim(), (100, 20));
assert_eq!(large_data.dim(), (1000, 50));
let sum = small_data.iter().sum::<f64>();
assert!(sum.abs() > f64::EPSILON, "Data should not be all zeros");
println!("✅ Advanced data processing validated");
}
#[allow(dead_code)]
fn create_test_meta_features() -> DatasetMetaFeatures {
DatasetMetaFeatures {
n_samples: 1000,
n_features: 50,
sparsity: 0.1,
mean_correlation: 0.2,
std_correlation: 0.3,
mean_skewness: 0.4,
mean_kurtosis: 0.5,
missing_ratio: 0.1,
variance_ratio: 0.8,
outlier_ratio: 0.05,
has_missing: true,
}
}
#[allow(dead_code)]
fn create_test_dataset(_n_samples: usize, nfeatures: usize) -> Array2<f64> {
use scirs2_core::random::{Rng, RngExt};
let mut rng = scirs2_core::random::rng();
let mut data = Array2::zeros((_n_samples, nfeatures));
for i in 0.._n_samples {
for j in 0..nfeatures {
data[[i, j]] = rng.random_range(-10.0..10.0);
}
}
data
}
}