#![allow(unexpected_cfgs)]
use scirs2_core::ndarray::{array, Array2};
#[cfg(feature = "neighbors")]
#[test]
#[allow(non_snake_case)]
fn test_knn_basic_functionality() {
use sklears::neighbors::KNeighborsClassifier;
use sklears::traits::{Fit, Predict};
let X = Array2::from_shape_vec(
(6, 2),
vec![1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 5.0, 6.0, 6.0, 7.0, 7.0, 5.0],
)
.expect("operation should succeed");
let y = array![0, 0, 0, 1, 1, 1];
let classifier = KNeighborsClassifier::new(3);
let fitted_classifier = classifier
.fit(&X, &y)
.expect("model fitting should succeed");
let predictions = fitted_classifier
.predict(&X)
.expect("prediction should succeed");
assert_eq!(predictions.len(), y.len());
for (&pred, &true_label) in predictions.iter().zip(y.iter()) {
assert_eq!(pred, true_label);
}
}
#[cfg(feature = "metrics")]
#[test]
#[allow(non_snake_case)]
fn test_basic_metrics() {
use sklears::metrics::classification::accuracy_score;
let y_true = array![0, 1, 2, 0, 1, 2];
let y_pred = array![0, 2, 1, 0, 0, 1];
let accuracy = accuracy_score(&y_true, &y_pred).expect("operation should succeed");
assert!((accuracy - 0.3333333333333333).abs() < 1e-10);
}
#[cfg(feature = "preprocessing")]
#[test]
#[allow(non_snake_case)]
fn test_label_encoding() {
use sklears::preprocessing::encoding::LabelEncoder;
use sklears::traits::Transform;
let labels = vec!["cat", "dog", "bird", "cat", "dog"];
let encoder = LabelEncoder::new();
let fitted_encoder = encoder
.fit(&labels, &())
.expect("serialization should succeed");
let encoded = fitted_encoder
.transform(&labels)
.expect("serialization should succeed");
assert_eq!(encoded[0], encoded[3]); assert_eq!(encoded[1], encoded[4]);
}
#[cfg(feature = "datasets")]
#[test]
#[allow(non_snake_case)]
fn test_simple_data_generation() {
use sklears::datasets::make_classification;
let (X, y) = make_classification(
10, 3, 2, 0, 2, Some(42), )
.expect("operation should succeed");
assert_eq!(X.shape(), &[10, 3]);
assert_eq!(y.len(), 10);
let (X2, y2) = make_classification(
10, 3, 2, 0, 2, Some(42), )
.expect("operation should succeed");
assert_eq!(X, X2);
assert_eq!(y, y2);
}
#[test]
#[allow(non_snake_case)]
fn test_basic_validation() {
}
#[test]
#[allow(non_snake_case)]
fn test_array_utilities() {
use sklears::utils::array_utils::label_counts;
let data = array![1, 2, 2, 3, 1, 3, 3];
let counts = label_counts(&data);
assert_eq!(counts.len(), 3);
assert_eq!(counts[&1], 2);
assert_eq!(counts[&2], 2);
assert_eq!(counts[&3], 3);
}
#[cfg(feature = "tree")]
#[test]
#[allow(non_snake_case)]
fn test_basic_decision_tree() {
use sklears::traits::{Fit, Predict};
use sklears::tree::DecisionTreeClassifier;
let X = Array2::from_shape_vec((4, 2), vec![0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0])
.expect("shape and data length should match");
let y = array![0.0, 1.0, 1.0, 0.0];
let tree = DecisionTreeClassifier::new();
let fitted_tree = tree.fit(&X, &y).expect("model fitting should succeed");
let predictions = fitted_tree.predict(&X).expect("prediction should succeed");
assert_eq!(predictions.len(), y.len());
}
#[cfg(all(feature = "neighbors", test))]
#[test]
#[allow(non_snake_case)]
fn test_knn_properties() {
use sklears::neighbors::KNeighborsClassifier;
use sklears::traits::{Fit, Predict};
let X = Array2::from_shape_vec(
(4, 2),
vec![
1.0, 2.0, 1.0, 2.0, 3.0, 4.0, 3.0, 4.0, ],
)
.expect("operation should succeed");
let y = array![0, 0, 1, 1];
let classifier = KNeighborsClassifier::new(1);
let fitted_classifier = classifier
.fit(&X, &y)
.expect("model fitting should succeed");
let predictions = fitted_classifier
.predict(&X)
.expect("prediction should succeed");
assert_eq!(predictions[0], predictions[1]);
assert_eq!(predictions[2], predictions[3]);
}