use super::super::super::*;
#[test]
fn test_sum_of_squares_basic() {
let a = Vector::from_slice(&[1.0, 2.0, 3.0]);
let result = a.sum_of_squares().unwrap();
assert_eq!(result, 14.0); }
#[test]
fn test_sum_of_squares_negative() {
let a = Vector::from_slice(&[-1.0, -2.0, 3.0]);
let result = a.sum_of_squares().unwrap();
assert_eq!(result, 14.0); }
#[test]
fn test_sum_of_squares_single() {
let a = Vector::from_slice(&[5.0]);
let result = a.sum_of_squares().unwrap();
assert_eq!(result, 25.0);
}
#[test]
fn test_sum_of_squares_zero() {
let a = Vector::from_slice(&[0.0, 0.0, 0.0]);
let result = a.sum_of_squares().unwrap();
assert_eq!(result, 0.0);
}
#[test]
fn test_sum_of_squares_pythagorean() {
let a = Vector::from_slice(&[3.0, 4.0]);
let result = a.sum_of_squares().unwrap();
assert_eq!(result, 25.0); }
#[test]
fn test_sum_of_squares_empty() {
let a: Vector<f32> = Vector::from_slice(&[]);
let result = a.sum_of_squares().unwrap();
assert_eq!(result, 0.0);
}
#[test]
fn test_mean_basic() {
let a = Vector::from_slice(&[1.0, 2.0, 3.0, 4.0]);
let result = a.mean().unwrap();
assert!((result - 2.5).abs() < 1e-5); }
#[test]
fn test_mean_negative() {
let a = Vector::from_slice(&[-2.0, -4.0, -6.0]);
let result = a.mean().unwrap();
assert!((result - (-4.0)).abs() < 1e-5); }
#[test]
fn test_mean_mixed() {
let a = Vector::from_slice(&[-10.0, 0.0, 10.0]);
let result = a.mean().unwrap();
assert!(result.abs() < 1e-5); }
#[test]
fn test_mean_single() {
let a = Vector::from_slice(&[42.0]);
let result = a.mean().unwrap();
assert!((result - 42.0).abs() < 1e-5); }
#[test]
fn test_mean_all_same() {
let a = Vector::from_slice(&[5.0, 5.0, 5.0, 5.0, 5.0]);
let result = a.mean().unwrap();
assert!((result - 5.0).abs() < 1e-5); }
#[test]
fn test_mean_empty() {
let a: Vector<f32> = Vector::from_slice(&[]);
let result = a.mean();
assert!(matches!(result, Err(TruenoError::EmptyVector)));
}
#[test]
fn test_variance_basic() {
let a = Vector::from_slice(&[1.0, 2.0, 3.0, 4.0, 5.0]);
let result = a.variance().unwrap();
assert!((result - 2.0).abs() < 1e-5);
}
#[test]
fn test_variance_constant() {
let a = Vector::from_slice(&[7.0, 7.0, 7.0, 7.0]);
let result = a.variance().unwrap();
assert!(result.abs() < 1e-5);
}
#[test]
fn test_variance_single() {
let a = Vector::from_slice(&[42.0]);
let result = a.variance().unwrap();
assert!(result.abs() < 1e-5);
}
#[test]
fn test_variance_symmetric() {
let a = Vector::from_slice(&[-2.0, -1.0, 0.0, 1.0, 2.0]);
let result = a.variance().unwrap();
assert!((result - 2.0).abs() < 1e-5);
}
#[test]
fn test_variance_two_values() {
let a = Vector::from_slice(&[1.0, 5.0]);
let result = a.variance().unwrap();
assert!((result - 4.0).abs() < 1e-5);
}
#[test]
fn test_variance_empty() {
let a: Vector<f32> = Vector::from_slice(&[]);
let result = a.variance();
assert!(matches!(result, Err(TruenoError::EmptyVector)));
}
#[test]
fn test_stddev_basic() {
let a = Vector::from_slice(&[1.0, 2.0, 3.0, 4.0, 5.0]);
let result = a.stddev().unwrap();
assert!((result - std::f32::consts::SQRT_2).abs() < 1e-5);
}
#[test]
fn test_stddev_constant() {
let a = Vector::from_slice(&[7.0, 7.0, 7.0, 7.0]);
let result = a.stddev().unwrap();
assert!(result.abs() < 1e-5);
}
#[test]
fn test_stddev_single() {
let a = Vector::from_slice(&[42.0]);
let result = a.stddev().unwrap();
assert!(result.abs() < 1e-5);
}
#[test]
fn test_stddev_symmetric() {
let a = Vector::from_slice(&[-2.0, -1.0, 0.0, 1.0, 2.0]);
let result = a.stddev().unwrap();
assert!((result - std::f32::consts::SQRT_2).abs() < 1e-5);
}
#[test]
fn test_stddev_two_values() {
let a = Vector::from_slice(&[1.0, 5.0]);
let result = a.stddev().unwrap();
assert!((result - 2.0).abs() < 1e-5);
}
#[test]
fn test_stddev_empty() {
let a: Vector<f32> = Vector::from_slice(&[]);
let result = a.stddev();
assert!(matches!(result, Err(TruenoError::EmptyVector)));
}
#[test]
fn test_covariance_positive() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0]);
let y = Vector::from_slice(&[2.0, 4.0, 6.0]);
let result = x.covariance(&y).unwrap();
assert!((result - (4.0 / 3.0)).abs() < 1e-5);
}
#[test]
fn test_covariance_negative() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0]);
let y = Vector::from_slice(&[3.0, 2.0, 1.0]);
let result = x.covariance(&y).unwrap();
assert!((result - (-2.0 / 3.0)).abs() < 1e-5);
}
#[test]
fn test_covariance_zero() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0, 2.0]);
let y = Vector::from_slice(&[1.0, 3.0, 1.0, 3.0]);
let result = x.covariance(&y).unwrap();
assert!(result.abs() < 1e-5);
}
#[test]
fn test_covariance_self() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0, 4.0, 5.0]);
let cov = x.covariance(&x).unwrap();
let var = x.variance().unwrap();
assert!((cov - var).abs() < 1e-5);
}
#[test]
fn test_covariance_size_mismatch() {
let x = Vector::from_slice(&[1.0, 2.0]);
let y = Vector::from_slice(&[1.0, 2.0, 3.0]);
let result = x.covariance(&y);
assert!(matches!(result, Err(TruenoError::SizeMismatch { expected: 2, actual: 3 })));
}
#[test]
fn test_covariance_empty() {
let x: Vector<f32> = Vector::from_slice(&[]);
let y: Vector<f32> = Vector::from_slice(&[]);
let result = x.covariance(&y);
assert!(matches!(result, Err(TruenoError::EmptyVector)));
}
#[test]
fn test_correlation_perfect_positive() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0]);
let y = Vector::from_slice(&[2.0, 4.0, 6.0]);
let result = x.correlation(&y).unwrap();
assert!((result - 1.0).abs() < 1e-5);
}
#[test]
fn test_correlation_perfect_negative() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0, 4.0]);
let y = Vector::from_slice(&[4.0, 3.0, 2.0, 1.0]);
let result = x.correlation(&y).unwrap();
assert!((result - (-1.0)).abs() < 1e-5);
}
#[test]
fn test_correlation_zero() {
let x = Vector::from_slice(&[1.0, 2.0, 1.0, 2.0]);
let y = Vector::from_slice(&[1.0, 1.0, 2.0, 2.0]);
let result = x.correlation(&y).unwrap();
assert!(result.abs() < 1e-5);
}
#[test]
fn test_correlation_self() {
let x = Vector::from_slice(&[1.0, 2.0, 3.0, 4.0, 5.0]);
let result = x.correlation(&x).unwrap();
assert!((result - 1.0).abs() < 1e-5);
}
#[test]
fn test_correlation_constant_vector() {
let x = Vector::from_slice(&[5.0, 5.0, 5.0]);
let y = Vector::from_slice(&[1.0, 2.0, 3.0]);
let result = x.correlation(&y);
assert!(matches!(result, Err(TruenoError::DivisionByZero)));
}
#[test]
fn test_correlation_size_mismatch() {
let x = Vector::from_slice(&[1.0, 2.0]);
let y = Vector::from_slice(&[1.0, 2.0, 3.0]);
let result = x.correlation(&y);
assert!(matches!(result, Err(TruenoError::SizeMismatch { expected: 2, actual: 3 })));
}