#[test]
fn test_spectral_clustering_unsupervised_estimator_trait() {
let data = Matrix::from_vec(
6,
2,
vec![1.0, 1.0, 1.1, 1.0, 0.9, 1.1, 5.0, 5.0, 5.1, 5.0, 4.9, 5.1],
)
.expect("Matrix creation should succeed");
let mut sc = SpectralClustering::new(2);
UnsupervisedEstimator::fit(&mut sc, &data).expect("UnsupervisedEstimator::fit should succeed");
assert!(sc.is_fitted());
let labels = UnsupervisedEstimator::predict(&sc, &data);
assert_eq!(labels.len(), 6);
}
#[test]
#[should_panic(expected = "Model not fitted")]
fn test_spectral_clustering_unsupervised_predict_before_fit() {
let data =
Matrix::from_vec(2, 2, vec![1.0, 1.0, 2.0, 2.0]).expect("Matrix creation should succeed");
let sc = SpectralClustering::new(2);
let _ = UnsupervisedEstimator::predict(&sc, &data);
}
#[test]
fn test_spectral_clustering_debug_impl() {
let sc = SpectralClustering::new(3);
let debug_str = format!("{:?}", sc);
assert!(debug_str.contains("SpectralClustering"));
assert!(debug_str.contains("n_clusters"));
}
#[test]
fn test_spectral_clustering_clone() {
let data = Matrix::from_vec(4, 2, vec![0.0, 0.0, 0.1, 0.1, 5.0, 5.0, 5.1, 5.1])
.expect("Matrix creation should succeed");
let mut sc = SpectralClustering::new(2).with_gamma(0.5);
sc.fit(&data).expect("Fit should succeed");
let sc_clone = sc.clone();
assert!(sc_clone.is_fitted());
assert_eq!(sc.labels(), sc_clone.labels());
}
#[test]
fn test_spectral_clustering_with_n_neighbors() {
let sc = SpectralClustering::new(2).with_n_neighbors(5);
let debug_str = format!("{:?}", sc);
assert!(debug_str.contains("5"));
}
#[test]
fn test_spectral_clustering_knn_small_n_neighbors() {
let data = Matrix::from_vec(4, 2, vec![0.0, 0.0, 0.1, 0.1, 5.0, 5.0, 5.1, 5.1])
.expect("Matrix creation should succeed");
let mut sc = SpectralClustering::new(2)
.with_affinity(Affinity::KNN)
.with_n_neighbors(100); sc.fit(&data)
.expect("Fit should succeed with clamped n_neighbors");
assert!(sc.is_fitted());
}
#[test]
fn test_affinity_debug_clone_eq() {
let rbf = Affinity::RBF;
let knn = Affinity::KNN;
let rbf_clone = rbf;
assert_eq!(rbf, rbf_clone);
assert_ne!(rbf, knn);
let debug_rbf = format!("{:?}", rbf);
assert!(debug_rbf.contains("RBF"));
let debug_knn = format!("{:?}", knn);
assert!(debug_knn.contains("KNN"));
}
#[test]
fn test_spectral_clustering_high_gamma() {
let data = Matrix::from_vec(4, 2, vec![0.0, 0.0, 0.1, 0.1, 100.0, 100.0, 100.1, 100.1])
.expect("Matrix creation should succeed");
let mut sc = SpectralClustering::new(2).with_gamma(100.0);
sc.fit(&data).expect("Fit should succeed with high gamma");
assert!(sc.is_fitted());
}
#[test]
fn test_spectral_clustering_single_feature() {
let data =
Matrix::from_vec(4, 1, vec![0.0, 0.1, 10.0, 10.1]).expect("Matrix creation should succeed");
let mut sc = SpectralClustering::new(2);
sc.fit(&data).expect("Fit should succeed with 1D data");
let labels = sc.labels();
assert_eq!(labels.len(), 4);
assert_eq!(labels[0], labels[1]);
assert_eq!(labels[2], labels[3]);
assert_ne!(labels[0], labels[2]);
}