feat: added support to wasm (#94)

* test: run tests also in wasm targets

* fix: install rand with wasm-bindgen por wasm targets

* fix: use actual usize size to access buffer.

* fix: do not run functions that create files in wasm.

* test: do not run in wasm test that panics.

Co-authored-by: Luis Moreno <morenol@users.noreply.github.com>
This commit is contained in:
Luis Moreno
2021-04-28 15:58:39 -04:00
committed by GitHub
parent 5ed5772a4e
commit 162bed2aa2
71 changed files with 294 additions and 51 deletions
+6
View File
@@ -38,6 +38,9 @@ jobs:
target: ${{ matrix.platform.target }} target: ${{ matrix.platform.target }}
profile: minimal profile: minimal
default: true default: true
- name: Install test runner for wasm
if: matrix.platform.target == 'wasm32-unknown-unknown'
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Stable Build - name: Stable Build
uses: actions-rs/cargo@v1 uses: actions-rs/cargo@v1
with: with:
@@ -49,3 +52,6 @@ jobs:
with: with:
command: test command: test
args: --all-features args: --all-features
- name: Tests in WASM
if: matrix.platform.target == 'wasm32-unknown-unknown'
run: wasm-pack test --node -- --all-features
+6
View File
@@ -27,11 +27,17 @@ rand = "0.7.3"
rand_distr = "0.3.0" rand_distr = "0.3.0"
serde = { version = "1.0.115", features = ["derive"], optional = true } serde = { version = "1.0.115", features = ["derive"], optional = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
rand = { version = "0.7.3", features = ["wasm-bindgen"] }
[dev-dependencies] [dev-dependencies]
criterion = "0.3" criterion = "0.3"
serde_json = "1.0" serde_json = "1.0"
bincode = "1.3.1" bincode = "1.3.1"
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3"
[[bench]] [[bench]]
name = "distance" name = "distance"
harness = false harness = false
+1
View File
@@ -314,6 +314,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn bbdtree_iris() { fn bbdtree_iris() {
let data = DenseMatrix::from_2d_array(&[ let data = DenseMatrix::from_2d_array(&[
+3 -2
View File
@@ -466,6 +466,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn cover_tree_test() { fn cover_tree_test() {
let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
@@ -482,7 +483,7 @@ mod tests {
let knn: Vec<i32> = knn.iter().map(|v| *v.2).collect(); let knn: Vec<i32> = knn.iter().map(|v| *v.2).collect();
assert_eq!(vec!(3, 4, 5, 6, 7), knn); assert_eq!(vec!(3, 4, 5, 6, 7), knn);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn cover_tree_test1() { fn cover_tree_test1() {
let data = vec![ let data = vec![
@@ -501,7 +502,7 @@ mod tests {
assert_eq!(vec!(0, 1, 2), knn); assert_eq!(vec!(0, 1, 2), knn);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2 -1
View File
@@ -150,6 +150,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn knn_find() { fn knn_find() {
let data1 = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let data1 = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
@@ -196,7 +197,7 @@ mod tests {
assert_eq!(vec!(1, 2, 3), found_idxs2); assert_eq!(vec!(1, 2, 3), found_idxs2);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn knn_point_eq() { fn knn_point_eq() {
let point1 = KNNPoint { let point1 = KNNPoint {
+5
View File
@@ -96,12 +96,14 @@ impl<'a, T: PartialOrd + Debug> HeapSelection<T> {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn with_capacity() { fn with_capacity() {
let heap = HeapSelection::<i32>::with_capacity(3); let heap = HeapSelection::<i32>::with_capacity(3);
assert_eq!(3, heap.k); assert_eq!(3, heap.k);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_add() { fn test_add() {
let mut heap = HeapSelection::with_capacity(3); let mut heap = HeapSelection::with_capacity(3);
@@ -119,6 +121,7 @@ mod tests {
assert_eq!(vec![2, 0, -5], heap.get()); assert_eq!(vec![2, 0, -5], heap.get());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_add1() { fn test_add1() {
let mut heap = HeapSelection::with_capacity(3); let mut heap = HeapSelection::with_capacity(3);
@@ -133,6 +136,7 @@ mod tests {
assert_eq!(vec![0f64, -1f64, -5f64], heap.get()); assert_eq!(vec![0f64, -1f64, -5f64], heap.get());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_add2() { fn test_add2() {
let mut heap = HeapSelection::with_capacity(3); let mut heap = HeapSelection::with_capacity(3);
@@ -145,6 +149,7 @@ mod tests {
assert_eq!(vec![5.6568, 2.8284, 0.0], heap.get()); assert_eq!(vec![5.6568, 2.8284, 0.0], heap.get());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_add_ordered() { fn test_add_ordered() {
let mut heap = HeapSelection::with_capacity(3); let mut heap = HeapSelection::with_capacity(3);
+1
View File
@@ -113,6 +113,7 @@ impl<T: Float> QuickArgSort for Vec<T> {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn with_capacity() { fn with_capacity() {
let arr1 = vec![0.3, 0.1, 0.2, 0.4, 0.9, 0.5, 0.7, 0.6, 0.8]; let arr1 = vec![0.3, 0.1, 0.2, 0.4, 0.9, 0.5, 0.7, 0.6, 0.8];
+2
View File
@@ -268,6 +268,7 @@ mod tests {
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
use crate::math::distance::euclidian::Euclidian; use crate::math::distance::euclidian::Euclidian;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_predict_dbscan() { fn fit_predict_dbscan() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -299,6 +300,7 @@ mod tests {
assert_eq!(expected_labels, predicted_labels); assert_eq!(expected_labels, predicted_labels);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -299,6 +299,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn invalid_k() { fn invalid_k() {
let x = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]); let x = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]);
@@ -312,6 +313,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_predict_iris() { fn fit_predict_iris() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -346,6 +348,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -56,9 +56,11 @@ pub fn load_dataset() -> Dataset<f32, f32> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
#[cfg(not(target_arch = "wasm32"))]
use super::super::*; use super::super::*;
use super::*; use super::*;
#[cfg(not(target_arch = "wasm32"))]
#[test] #[test]
#[ignore] #[ignore]
fn refresh_boston_dataset() { fn refresh_boston_dataset() {
@@ -67,6 +69,7 @@ mod tests {
assert!(serialize_data(&dataset, "boston.xy").is_ok()); assert!(serialize_data(&dataset, "boston.xy").is_ok());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn boston_dataset() { fn boston_dataset() {
let dataset = load_dataset(); let dataset = load_dataset();
+3
View File
@@ -66,17 +66,20 @@ pub fn load_dataset() -> Dataset<f32, f32> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
#[cfg(not(target_arch = "wasm32"))]
use super::super::*; use super::super::*;
use super::*; use super::*;
#[test] #[test]
#[ignore] #[ignore]
#[cfg(not(target_arch = "wasm32"))]
fn refresh_cancer_dataset() { fn refresh_cancer_dataset() {
// run this test to generate breast_cancer.xy file. // run this test to generate breast_cancer.xy file.
let dataset = load_dataset(); let dataset = load_dataset();
assert!(serialize_data(&dataset, "breast_cancer.xy").is_ok()); assert!(serialize_data(&dataset, "breast_cancer.xy").is_ok());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn cancer_dataset() { fn cancer_dataset() {
let dataset = load_dataset(); let dataset = load_dataset();
+3
View File
@@ -50,9 +50,11 @@ pub fn load_dataset() -> Dataset<f32, f32> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
#[cfg(not(target_arch = "wasm32"))]
use super::super::*; use super::super::*;
use super::*; use super::*;
#[cfg(not(target_arch = "wasm32"))]
#[test] #[test]
#[ignore] #[ignore]
fn refresh_diabetes_dataset() { fn refresh_diabetes_dataset() {
@@ -61,6 +63,7 @@ mod tests {
assert!(serialize_data(&dataset, "diabetes.xy").is_ok()); assert!(serialize_data(&dataset, "diabetes.xy").is_ok());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn boston_dataset() { fn boston_dataset() {
let dataset = load_dataset(); let dataset = load_dataset();
+3 -1
View File
@@ -45,9 +45,11 @@ pub fn load_dataset() -> Dataset<f32, f32> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
#[cfg(not(target_arch = "wasm32"))]
use super::super::*; use super::super::*;
use super::*; use super::*;
#[cfg(not(target_arch = "wasm32"))]
#[test] #[test]
#[ignore] #[ignore]
fn refresh_digits_dataset() { fn refresh_digits_dataset() {
@@ -55,7 +57,7 @@ mod tests {
let dataset = load_dataset(); let dataset = load_dataset();
assert!(serialize_data(&dataset, "digits.xy").is_ok()); assert!(serialize_data(&dataset, "digits.xy").is_ok());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn digits_dataset() { fn digits_dataset() {
let dataset = load_dataset(); let dataset = load_dataset();
+3
View File
@@ -137,6 +137,7 @@ mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_make_blobs() { fn test_make_blobs() {
let dataset = make_blobs(10, 2, 3); let dataset = make_blobs(10, 2, 3);
@@ -149,6 +150,7 @@ mod tests {
assert_eq!(dataset.num_samples, 10); assert_eq!(dataset.num_samples, 10);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_make_circles() { fn test_make_circles() {
let dataset = make_circles(10, 0.5, 0.05); let dataset = make_circles(10, 0.5, 0.05);
@@ -161,6 +163,7 @@ mod tests {
assert_eq!(dataset.num_samples, 10); assert_eq!(dataset.num_samples, 10);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_make_moons() { fn test_make_moons() {
let dataset = make_moons(10, 0.05); let dataset = make_moons(10, 0.05);
+3
View File
@@ -50,9 +50,11 @@ pub fn load_dataset() -> Dataset<f32, f32> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
#[cfg(not(target_arch = "wasm32"))]
use super::super::*; use super::super::*;
use super::*; use super::*;
#[cfg(not(target_arch = "wasm32"))]
#[test] #[test]
#[ignore] #[ignore]
fn refresh_iris_dataset() { fn refresh_iris_dataset() {
@@ -61,6 +63,7 @@ mod tests {
assert!(serialize_data(&dataset, "iris.xy").is_ok()); assert!(serialize_data(&dataset, "iris.xy").is_ok());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn iris_dataset() { fn iris_dataset() {
let dataset = load_dataset(); let dataset = load_dataset();
+8 -2
View File
@@ -8,9 +8,12 @@ pub mod digits;
pub mod generator; pub mod generator;
pub mod iris; pub mod iris;
#[cfg(not(target_arch = "wasm32"))]
use crate::math::num::RealNumber; use crate::math::num::RealNumber;
#[cfg(not(target_arch = "wasm32"))]
use std::fs::File; use std::fs::File;
use std::io; use std::io;
#[cfg(not(target_arch = "wasm32"))]
use std::io::prelude::*; use std::io::prelude::*;
/// Dataset /// Dataset
@@ -49,6 +52,8 @@ impl<X, Y> Dataset<X, Y> {
} }
} }
// Running this in wasm throws: operation not supported on this platform.
#[cfg(not(target_arch = "wasm32"))]
#[allow(dead_code)] #[allow(dead_code)]
pub(crate) fn serialize_data<X: RealNumber, Y: RealNumber>( pub(crate) fn serialize_data<X: RealNumber, Y: RealNumber>(
dataset: &Dataset<X, Y>, dataset: &Dataset<X, Y>,
@@ -85,9 +90,9 @@ pub(crate) fn deserialize_data(
const USIZE_SIZE: usize = std::mem::size_of::<usize>(); const USIZE_SIZE: usize = std::mem::size_of::<usize>();
let (num_samples, num_features) = { let (num_samples, num_features) = {
let mut buffer = [0u8; USIZE_SIZE]; let mut buffer = [0u8; USIZE_SIZE];
buffer.copy_from_slice(&bytes[0..8]); buffer.copy_from_slice(&bytes[0..USIZE_SIZE]);
let num_features = usize::from_le_bytes(buffer); let num_features = usize::from_le_bytes(buffer);
buffer.copy_from_slice(&bytes[8..16]); buffer.copy_from_slice(&bytes[8..8 + USIZE_SIZE]);
let num_samples = usize::from_le_bytes(buffer); let num_samples = usize::from_le_bytes(buffer);
(num_samples, num_features) (num_samples, num_features)
}; };
@@ -116,6 +121,7 @@ pub(crate) fn deserialize_data(
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn as_matrix() { fn as_matrix() {
let dataset = Dataset { let dataset = Dataset {
+4 -2
View File
@@ -325,7 +325,7 @@ mod tests {
&[6.8, 161.0, 60.0, 15.6], &[6.8, 161.0, 60.0, 15.6],
]) ])
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn pca_components() { fn pca_components() {
let us_arrests = us_arrests_data(); let us_arrests = us_arrests_data();
@@ -341,7 +341,7 @@ mod tests {
assert!(expected.approximate_eq(&pca.components().abs(), 0.4)); assert!(expected.approximate_eq(&pca.components().abs(), 0.4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_covariance() { fn decompose_covariance() {
let us_arrests = us_arrests_data(); let us_arrests = us_arrests_data();
@@ -451,6 +451,7 @@ mod tests {
.approximate_eq(&expected_projection.abs(), 1e-4)); .approximate_eq(&expected_projection.abs(), 1e-4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_correlation() { fn decompose_correlation() {
let us_arrests = us_arrests_data(); let us_arrests = us_arrests_data();
@@ -566,6 +567,7 @@ mod tests {
.approximate_eq(&expected_projection.abs(), 1e-4)); .approximate_eq(&expected_projection.abs(), 1e-4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2
View File
@@ -153,6 +153,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn svd_decompose() { fn svd_decompose() {
// https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/USArrests.html // https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/USArrests.html
@@ -227,6 +228,7 @@ mod tests {
.approximate_eq(&expected, 1e-4)); .approximate_eq(&expected, 1e-4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2
View File
@@ -279,6 +279,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
use crate::metrics::*; use crate::metrics::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_predict_iris() { fn fit_predict_iris() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -324,6 +325,7 @@ mod tests {
assert!(accuracy(&y, &classifier.predict(&x).unwrap()) >= 0.95); assert!(accuracy(&y, &classifier.predict(&x).unwrap()) >= 0.95);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2
View File
@@ -231,6 +231,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
use crate::metrics::mean_absolute_error; use crate::metrics::mean_absolute_error;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_longley() { fn fit_longley() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -273,6 +274,7 @@ mod tests {
assert!(mean_absolute_error(&y, &y_hat) < 1.0); assert!(mean_absolute_error(&y, &y_hat) < 1.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2 -1
View File
@@ -168,7 +168,7 @@ pub trait CholeskyDecomposableMatrix<T: RealNumber>: BaseMatrix<T> {
mod tests { mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn cholesky_decompose() { fn cholesky_decompose() {
let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]); let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]);
@@ -187,6 +187,7 @@ mod tests {
.approximate_eq(&a.abs(), 1e-4)); .approximate_eq(&a.abs(), 1e-4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn cholesky_solve_mut() { fn cholesky_solve_mut() {
let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]); let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]);
+3 -3
View File
@@ -816,7 +816,7 @@ fn sort<T: RealNumber, M: BaseMatrix<T>>(d: &mut Vec<T>, e: &mut Vec<T>, V: &mut
mod tests { mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_symmetric() { fn decompose_symmetric() {
let A = DenseMatrix::from_2d_array(&[ let A = DenseMatrix::from_2d_array(&[
@@ -843,7 +843,7 @@ mod tests {
assert!((0f64 - evd.e[i]).abs() < std::f64::EPSILON); assert!((0f64 - evd.e[i]).abs() < std::f64::EPSILON);
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_asymmetric() { fn decompose_asymmetric() {
let A = DenseMatrix::from_2d_array(&[ let A = DenseMatrix::from_2d_array(&[
@@ -870,7 +870,7 @@ mod tests {
assert!((0f64 - evd.e[i]).abs() < std::f64::EPSILON); assert!((0f64 - evd.e[i]).abs() < std::f64::EPSILON);
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_complex() { fn decompose_complex() {
let A = DenseMatrix::from_2d_array(&[ let A = DenseMatrix::from_2d_array(&[
+2 -1
View File
@@ -260,6 +260,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose() { fn decompose() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[0., 1., 5.], &[5., 6., 0.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[0., 1., 5.], &[5., 6., 0.]]);
@@ -274,7 +275,7 @@ mod tests {
assert!(lu.U().approximate_eq(&expected_U, 1e-4)); assert!(lu.U().approximate_eq(&expected_U, 1e-4));
assert!(lu.pivot().approximate_eq(&expected_pivot, 1e-4)); assert!(lu.pivot().approximate_eq(&expected_pivot, 1e-4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn inverse() { fn inverse() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[0., 1., 5.], &[5., 6., 0.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[0., 1., 5.], &[5., 6., 0.]]);
+5
View File
@@ -706,6 +706,7 @@ mod tests {
use crate::linalg::BaseMatrix; use crate::linalg::BaseMatrix;
use crate::linalg::BaseVector; use crate::linalg::BaseVector;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mean() { fn mean() {
let m = vec![1., 2., 3.]; let m = vec![1., 2., 3.];
@@ -713,6 +714,7 @@ mod tests {
assert_eq!(m.mean(), 2.0); assert_eq!(m.mean(), 2.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn std() { fn std() {
let m = vec![1., 2., 3.]; let m = vec![1., 2., 3.];
@@ -720,6 +722,7 @@ mod tests {
assert!((m.std() - 0.81f64).abs() < 1e-2); assert!((m.std() - 0.81f64).abs() < 1e-2);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn var() { fn var() {
let m = vec![1., 2., 3., 4.]; let m = vec![1., 2., 3., 4.];
@@ -727,6 +730,7 @@ mod tests {
assert!((m.var() - 1.25f64).abs() < std::f64::EPSILON); assert!((m.var() - 1.25f64).abs() < std::f64::EPSILON);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_take() { fn vec_take() {
let m = vec![1., 2., 3., 4., 5.]; let m = vec![1., 2., 3., 4., 5.];
@@ -734,6 +738,7 @@ mod tests {
assert_eq!(m.take(&vec!(0, 0, 4, 4)), vec![1., 1., 5., 5.]); assert_eq!(m.take(&vec!(0, 0, 4, 4)), vec![1., 1., 5., 5.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn take() { fn take() {
let m = DenseMatrix::from_2d_array(&[ let m = DenseMatrix::from_2d_array(&[
+29 -29
View File
@@ -1060,14 +1060,14 @@ impl<T: RealNumber> BaseMatrix<T> for DenseMatrix<T> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_dot() { fn vec_dot() {
let v1 = vec![1., 2., 3.]; let v1 = vec![1., 2., 3.];
let v2 = vec![4., 5., 6.]; let v2 = vec![4., 5., 6.];
assert_eq!(32.0, BaseVector::dot(&v1, &v2)); assert_eq!(32.0, BaseVector::dot(&v1, &v2));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_copy_from() { fn vec_copy_from() {
let mut v1 = vec![1., 2., 3.]; let mut v1 = vec![1., 2., 3.];
@@ -1075,7 +1075,7 @@ mod tests {
v1.copy_from(&v2); v1.copy_from(&v2);
assert_eq!(v1, v2); assert_eq!(v1, v2);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_approximate_eq() { fn vec_approximate_eq() {
let a = vec![1., 2., 3.]; let a = vec![1., 2., 3.];
@@ -1083,7 +1083,7 @@ mod tests {
assert!(a.approximate_eq(&b, 1e-4)); assert!(a.approximate_eq(&b, 1e-4));
assert!(!a.approximate_eq(&b, 1e-5)); assert!(!a.approximate_eq(&b, 1e-5));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn from_array() { fn from_array() {
let vec = [1., 2., 3., 4., 5., 6.]; let vec = [1., 2., 3., 4., 5., 6.];
@@ -1096,7 +1096,7 @@ mod tests {
DenseMatrix::new(2, 3, vec![1., 4., 2., 5., 3., 6.]) DenseMatrix::new(2, 3, vec![1., 4., 2., 5., 3., 6.])
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn row_column_vec_from_array() { fn row_column_vec_from_array() {
let vec = vec![1., 2., 3., 4., 5., 6.]; let vec = vec![1., 2., 3., 4., 5., 6.];
@@ -1109,7 +1109,7 @@ mod tests {
DenseMatrix::new(6, 1, vec![1., 2., 3., 4., 5., 6.]) DenseMatrix::new(6, 1, vec![1., 2., 3., 4., 5., 6.])
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn from_to_row_vec() { fn from_to_row_vec() {
let vec = vec![1., 2., 3.]; let vec = vec![1., 2., 3.];
@@ -1122,20 +1122,20 @@ mod tests {
vec![1., 2., 3.] vec![1., 2., 3.]
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn col_matrix_to_row_vector() { fn col_matrix_to_row_vector() {
let m: DenseMatrix<f64> = BaseMatrix::zeros(10, 1); let m: DenseMatrix<f64> = BaseMatrix::zeros(10, 1);
assert_eq!(m.to_row_vector().len(), 10) assert_eq!(m.to_row_vector().len(), 10)
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn iter() { fn iter() {
let vec = vec![1., 2., 3., 4., 5., 6.]; let vec = vec![1., 2., 3., 4., 5., 6.];
let m = DenseMatrix::from_array(3, 2, &vec); let m = DenseMatrix::from_array(3, 2, &vec);
assert_eq!(vec, m.iter().collect::<Vec<f32>>()); assert_eq!(vec, m.iter().collect::<Vec<f32>>());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn v_stack() { fn v_stack() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]);
@@ -1150,7 +1150,7 @@ mod tests {
let result = a.v_stack(&b); let result = a.v_stack(&b);
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn h_stack() { fn h_stack() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]);
@@ -1163,13 +1163,13 @@ mod tests {
let result = a.h_stack(&b); let result = a.h_stack(&b);
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_row() { fn get_row() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]);
assert_eq!(vec![4., 5., 6.], a.get_row(1)); assert_eq!(vec![4., 5., 6.], a.get_row(1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn matmul() { fn matmul() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]);
@@ -1178,7 +1178,7 @@ mod tests {
let result = a.matmul(&b); let result = a.matmul(&b);
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn ab() { fn ab() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]);
@@ -1201,14 +1201,14 @@ mod tests {
DenseMatrix::from_2d_array(&[&[29., 39., 49.], &[40., 54., 68.,], &[51., 69., 87.]]) DenseMatrix::from_2d_array(&[&[29., 39., 49.], &[40., 54., 68.,], &[51., 69., 87.]])
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn dot() { fn dot() {
let a = DenseMatrix::from_array(1, 3, &[1., 2., 3.]); let a = DenseMatrix::from_array(1, 3, &[1., 2., 3.]);
let b = DenseMatrix::from_array(1, 3, &[4., 5., 6.]); let b = DenseMatrix::from_array(1, 3, &[4., 5., 6.]);
assert_eq!(a.dot(&b), 32.); assert_eq!(a.dot(&b), 32.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn copy_from() { fn copy_from() {
let mut a = DenseMatrix::from_2d_array(&[&[1., 2.], &[3., 4.], &[5., 6.]]); let mut a = DenseMatrix::from_2d_array(&[&[1., 2.], &[3., 4.], &[5., 6.]]);
@@ -1216,7 +1216,7 @@ mod tests {
a.copy_from(&b); a.copy_from(&b);
assert_eq!(a, b); assert_eq!(a, b);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn slice() { fn slice() {
let m = DenseMatrix::from_2d_array(&[ let m = DenseMatrix::from_2d_array(&[
@@ -1228,7 +1228,7 @@ mod tests {
let result = m.slice(0..2, 1..3); let result = m.slice(0..2, 1..3);
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn approximate_eq() { fn approximate_eq() {
let m = DenseMatrix::from_2d_array(&[&[2., 3.], &[5., 6.]]); let m = DenseMatrix::from_2d_array(&[&[2., 3.], &[5., 6.]]);
@@ -1237,7 +1237,7 @@ mod tests {
assert!(m.approximate_eq(&m_eq, 0.5)); assert!(m.approximate_eq(&m_eq, 0.5));
assert!(!m.approximate_eq(&m_neq, 0.5)); assert!(!m.approximate_eq(&m_neq, 0.5));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn rand() { fn rand() {
let m: DenseMatrix<f64> = DenseMatrix::rand(3, 3); let m: DenseMatrix<f64> = DenseMatrix::rand(3, 3);
@@ -1247,7 +1247,7 @@ mod tests {
} }
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn transpose() { fn transpose() {
let m = DenseMatrix::from_2d_array(&[&[1.0, 3.0], &[2.0, 4.0]]); let m = DenseMatrix::from_2d_array(&[&[1.0, 3.0], &[2.0, 4.0]]);
@@ -1259,7 +1259,7 @@ mod tests {
} }
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn reshape() { fn reshape() {
let m_orig = DenseMatrix::row_vector_from_array(&[1., 2., 3., 4., 5., 6.]); let m_orig = DenseMatrix::row_vector_from_array(&[1., 2., 3., 4., 5., 6.]);
@@ -1270,7 +1270,7 @@ mod tests {
assert_eq!(m_result.get(0, 1), 2.); assert_eq!(m_result.get(0, 1), 2.);
assert_eq!(m_result.get(0, 3), 4.); assert_eq!(m_result.get(0, 3), 4.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn norm() { fn norm() {
let v = DenseMatrix::row_vector_from_array(&[3., -2., 6.]); let v = DenseMatrix::row_vector_from_array(&[3., -2., 6.]);
@@ -1279,7 +1279,7 @@ mod tests {
assert_eq!(v.norm(std::f64::INFINITY), 6.); assert_eq!(v.norm(std::f64::INFINITY), 6.);
assert_eq!(v.norm(std::f64::NEG_INFINITY), 2.); assert_eq!(v.norm(std::f64::NEG_INFINITY), 2.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn softmax_mut() { fn softmax_mut() {
let mut prob: DenseMatrix<f64> = DenseMatrix::row_vector_from_array(&[1., 2., 3.]); let mut prob: DenseMatrix<f64> = DenseMatrix::row_vector_from_array(&[1., 2., 3.]);
@@ -1288,14 +1288,14 @@ mod tests {
assert!((prob.get(0, 1) - 0.24).abs() < 0.01); assert!((prob.get(0, 1) - 0.24).abs() < 0.01);
assert!((prob.get(0, 2) - 0.66).abs() < 0.01); assert!((prob.get(0, 2) - 0.66).abs() < 0.01);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn col_mean() { fn col_mean() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.], &[7., 8., 9.]]);
let res = a.column_mean(); let res = a.column_mean();
assert_eq!(res, vec![4., 5., 6.]); assert_eq!(res, vec![4., 5., 6.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn min_max_sum() { fn min_max_sum() {
let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]); let a = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]);
@@ -1303,14 +1303,14 @@ mod tests {
assert_eq!(1., a.min()); assert_eq!(1., a.min());
assert_eq!(6., a.max()); assert_eq!(6., a.max());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn eye() { fn eye() {
let a = DenseMatrix::from_2d_array(&[&[1., 0., 0.], &[0., 1., 0.], &[0., 0., 1.]]); let a = DenseMatrix::from_2d_array(&[&[1., 0., 0.], &[0., 1., 0.], &[0., 0., 1.]]);
let res = DenseMatrix::eye(3); let res = DenseMatrix::eye(3);
assert_eq!(res, a); assert_eq!(res, a);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn to_from_json() { fn to_from_json() {
@@ -1319,7 +1319,7 @@ mod tests {
serde_json::from_str(&serde_json::to_string(&a).unwrap()).unwrap(); serde_json::from_str(&serde_json::to_string(&a).unwrap()).unwrap();
assert_eq!(a, deserialized_a); assert_eq!(a, deserialized_a);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn to_from_bincode() { fn to_from_bincode() {
@@ -1328,7 +1328,7 @@ mod tests {
bincode::deserialize(&bincode::serialize(&a).unwrap()).unwrap(); bincode::deserialize(&bincode::serialize(&a).unwrap()).unwrap();
assert_eq!(a, deserialized_a); assert_eq!(a, deserialized_a);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn to_string() { fn to_string() {
let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]); let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]);
@@ -1337,7 +1337,7 @@ mod tests {
"[[0.9, 0.4, 0.7], [0.4, 0.5, 0.3], [0.7, 0.3, 0.8]]" "[[0.9, 0.4, 0.7], [0.4, 0.5, 0.3], [0.7, 0.3, 0.8]]"
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn cov() { fn cov() {
let a = DenseMatrix::from_2d_array(&[ let a = DenseMatrix::from_2d_array(&[
+40
View File
@@ -579,6 +579,7 @@ mod tests {
use crate::linear::linear_regression::*; use crate::linear::linear_regression::*;
use nalgebra::{DMatrix, Matrix2x3, RowDVector}; use nalgebra::{DMatrix, Matrix2x3, RowDVector};
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_copy_from() { fn vec_copy_from() {
let mut v1 = RowDVector::from_vec(vec![1., 2., 3.]); let mut v1 = RowDVector::from_vec(vec![1., 2., 3.]);
@@ -589,12 +590,14 @@ mod tests {
assert_ne!(v2, v1); assert_ne!(v2, v1);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_len() { fn vec_len() {
let v = RowDVector::from_vec(vec![1., 2., 3.]); let v = RowDVector::from_vec(vec![1., 2., 3.]);
assert_eq!(3, v.len()); assert_eq!(3, v.len());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_set_vector() { fn get_set_vector() {
let mut v = RowDVector::from_vec(vec![1., 2., 3., 4.]); let mut v = RowDVector::from_vec(vec![1., 2., 3., 4.]);
@@ -607,12 +610,14 @@ mod tests {
assert_eq!(5., BaseVector::get(&v, 1)); assert_eq!(5., BaseVector::get(&v, 1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_to_vec() { fn vec_to_vec() {
let v = RowDVector::from_vec(vec![1., 2., 3.]); let v = RowDVector::from_vec(vec![1., 2., 3.]);
assert_eq!(vec![1., 2., 3.], v.to_vec()); assert_eq!(vec![1., 2., 3.], v.to_vec());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_init() { fn vec_init() {
let zeros: RowDVector<f32> = BaseVector::zeros(3); let zeros: RowDVector<f32> = BaseVector::zeros(3);
@@ -623,6 +628,7 @@ mod tests {
assert_eq!(twos, RowDVector::from_vec(vec![2., 2., 2.])); assert_eq!(twos, RowDVector::from_vec(vec![2., 2., 2.]));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_dot() { fn vec_dot() {
let v1 = RowDVector::from_vec(vec![1., 2., 3.]); let v1 = RowDVector::from_vec(vec![1., 2., 3.]);
@@ -630,6 +636,7 @@ mod tests {
assert_eq!(32.0, BaseVector::dot(&v1, &v2)); assert_eq!(32.0, BaseVector::dot(&v1, &v2));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_approximate_eq() { fn vec_approximate_eq() {
let a = RowDVector::from_vec(vec![1., 2., 3.]); let a = RowDVector::from_vec(vec![1., 2., 3.]);
@@ -638,6 +645,7 @@ mod tests {
assert!(!a.approximate_eq(&(&noise + &a), 1e-5)); assert!(!a.approximate_eq(&(&noise + &a), 1e-5));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_set_dynamic() { fn get_set_dynamic() {
let mut m = DMatrix::from_row_slice(2, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]); let mut m = DMatrix::from_row_slice(2, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
@@ -650,6 +658,7 @@ mod tests {
assert_eq!(10., BaseMatrix::get(&m, 1, 1)); assert_eq!(10., BaseMatrix::get(&m, 1, 1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn zeros() { fn zeros() {
let expected = DMatrix::from_row_slice(2, 2, &[0., 0., 0., 0.]); let expected = DMatrix::from_row_slice(2, 2, &[0., 0., 0., 0.]);
@@ -659,6 +668,7 @@ mod tests {
assert_eq!(m, expected); assert_eq!(m, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn ones() { fn ones() {
let expected = DMatrix::from_row_slice(2, 2, &[1., 1., 1., 1.]); let expected = DMatrix::from_row_slice(2, 2, &[1., 1., 1., 1.]);
@@ -668,6 +678,7 @@ mod tests {
assert_eq!(m, expected); assert_eq!(m, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn eye() { fn eye() {
let expected = DMatrix::from_row_slice(3, 3, &[1., 0., 0., 0., 1., 0., 0., 0., 1.]); let expected = DMatrix::from_row_slice(3, 3, &[1., 0., 0., 0., 1., 0., 0., 0., 1.]);
@@ -675,6 +686,7 @@ mod tests {
assert_eq!(m, expected); assert_eq!(m, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn shape() { fn shape() {
let m: DMatrix<f64> = BaseMatrix::zeros(5, 10); let m: DMatrix<f64> = BaseMatrix::zeros(5, 10);
@@ -684,6 +696,7 @@ mod tests {
assert_eq!(ncols, 10); assert_eq!(ncols, 10);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn scalar_add_sub_mul_div() { fn scalar_add_sub_mul_div() {
let mut m = DMatrix::from_row_slice(2, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]); let mut m = DMatrix::from_row_slice(2, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
@@ -697,6 +710,7 @@ mod tests {
assert_eq!(m, expected); assert_eq!(m, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn add_sub_mul_div() { fn add_sub_mul_div() {
let mut m = DMatrix::from_row_slice(2, 2, &[1.0, 2.0, 3.0, 4.0]); let mut m = DMatrix::from_row_slice(2, 2, &[1.0, 2.0, 3.0, 4.0]);
@@ -715,6 +729,7 @@ mod tests {
assert_eq!(m, expected); assert_eq!(m, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn to_from_row_vector() { fn to_from_row_vector() {
let v = RowDVector::from_vec(vec![1., 2., 3., 4.]); let v = RowDVector::from_vec(vec![1., 2., 3., 4.]);
@@ -723,12 +738,14 @@ mod tests {
assert_eq!(m.to_row_vector(), expected); assert_eq!(m.to_row_vector(), expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn col_matrix_to_row_vector() { fn col_matrix_to_row_vector() {
let m: DMatrix<f64> = BaseMatrix::zeros(10, 1); let m: DMatrix<f64> = BaseMatrix::zeros(10, 1);
assert_eq!(m.to_row_vector().len(), 10) assert_eq!(m.to_row_vector().len(), 10)
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_row_col_as_vec() { fn get_row_col_as_vec() {
let m = DMatrix::from_row_slice(3, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]); let m = DMatrix::from_row_slice(3, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]);
@@ -737,12 +754,14 @@ mod tests {
assert_eq!(m.get_col_as_vec(1), vec!(2., 5., 8.)); assert_eq!(m.get_col_as_vec(1), vec!(2., 5., 8.));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_row() { fn get_row() {
let a = DMatrix::from_row_slice(3, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]); let a = DMatrix::from_row_slice(3, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]);
assert_eq!(RowDVector::from_vec(vec![4., 5., 6.]), a.get_row(1)); assert_eq!(RowDVector::from_vec(vec![4., 5., 6.]), a.get_row(1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn copy_row_col_as_vec() { fn copy_row_col_as_vec() {
let m = DMatrix::from_row_slice(3, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]); let m = DMatrix::from_row_slice(3, 3, &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]);
@@ -754,6 +773,7 @@ mod tests {
assert_eq!(v, vec!(2., 5., 8.)); assert_eq!(v, vec!(2., 5., 8.));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn element_add_sub_mul_div() { fn element_add_sub_mul_div() {
let mut m = DMatrix::from_row_slice(2, 2, &[1.0, 2.0, 3.0, 4.0]); let mut m = DMatrix::from_row_slice(2, 2, &[1.0, 2.0, 3.0, 4.0]);
@@ -767,6 +787,7 @@ mod tests {
assert_eq!(m, expected); assert_eq!(m, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vstack_hstack() { fn vstack_hstack() {
let m1 = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., 5., 6.]); let m1 = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., 5., 6.]);
@@ -782,6 +803,7 @@ mod tests {
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn matmul() { fn matmul() {
let a = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., 5., 6.]); let a = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., 5., 6.]);
@@ -791,6 +813,7 @@ mod tests {
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn dot() { fn dot() {
let a = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]); let a = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]);
@@ -798,6 +821,7 @@ mod tests {
assert_eq!(14., a.dot(&b)); assert_eq!(14., a.dot(&b));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn slice() { fn slice() {
let a = DMatrix::from_row_slice( let a = DMatrix::from_row_slice(
@@ -810,6 +834,7 @@ mod tests {
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn approximate_eq() { fn approximate_eq() {
let a = DMatrix::from_row_slice(3, 3, &[1., 2., 3., 4., 5., 6., 7., 8., 9.]); let a = DMatrix::from_row_slice(3, 3, &[1., 2., 3., 4., 5., 6., 7., 8., 9.]);
@@ -822,6 +847,7 @@ mod tests {
assert!(!a.approximate_eq(&(&noise + &a), 1e-5)); assert!(!a.approximate_eq(&(&noise + &a), 1e-5));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn negative_mut() { fn negative_mut() {
let mut v = DMatrix::from_row_slice(1, 3, &[3., -2., 6.]); let mut v = DMatrix::from_row_slice(1, 3, &[3., -2., 6.]);
@@ -829,6 +855,7 @@ mod tests {
assert_eq!(v, DMatrix::from_row_slice(1, 3, &[-3., 2., -6.])); assert_eq!(v, DMatrix::from_row_slice(1, 3, &[-3., 2., -6.]));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn transpose() { fn transpose() {
let m = DMatrix::from_row_slice(2, 2, &[1.0, 3.0, 2.0, 4.0]); let m = DMatrix::from_row_slice(2, 2, &[1.0, 3.0, 2.0, 4.0]);
@@ -837,6 +864,7 @@ mod tests {
assert_eq!(m_transposed, expected); assert_eq!(m_transposed, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn rand() { fn rand() {
let m: DMatrix<f64> = BaseMatrix::rand(3, 3); let m: DMatrix<f64> = BaseMatrix::rand(3, 3);
@@ -847,6 +875,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn norm() { fn norm() {
let v = DMatrix::from_row_slice(1, 3, &[3., -2., 6.]); let v = DMatrix::from_row_slice(1, 3, &[3., -2., 6.]);
@@ -856,6 +885,7 @@ mod tests {
assert_eq!(BaseMatrix::norm(&v, std::f64::NEG_INFINITY), 2.); assert_eq!(BaseMatrix::norm(&v, std::f64::NEG_INFINITY), 2.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn col_mean() { fn col_mean() {
let a = DMatrix::from_row_slice(3, 3, &[1., 2., 3., 4., 5., 6., 7., 8., 9.]); let a = DMatrix::from_row_slice(3, 3, &[1., 2., 3., 4., 5., 6., 7., 8., 9.]);
@@ -863,6 +893,7 @@ mod tests {
assert_eq!(res, vec![4., 5., 6.]); assert_eq!(res, vec![4., 5., 6.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn reshape() { fn reshape() {
let m_orig = DMatrix::from_row_slice(1, 6, &[1., 2., 3., 4., 5., 6.]); let m_orig = DMatrix::from_row_slice(1, 6, &[1., 2., 3., 4., 5., 6.]);
@@ -874,6 +905,7 @@ mod tests {
assert_eq!(BaseMatrix::get(&m_result, 0, 3), 4.); assert_eq!(BaseMatrix::get(&m_result, 0, 3), 4.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn copy_from() { fn copy_from() {
let mut src = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]); let mut src = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]);
@@ -882,6 +914,7 @@ mod tests {
assert_eq!(src, dst); assert_eq!(src, dst);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn abs_mut() { fn abs_mut() {
let mut a = DMatrix::from_row_slice(2, 2, &[1., -2., 3., -4.]); let mut a = DMatrix::from_row_slice(2, 2, &[1., -2., 3., -4.]);
@@ -890,6 +923,7 @@ mod tests {
assert_eq!(a, expected); assert_eq!(a, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn min_max_sum() { fn min_max_sum() {
let a = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., 5., 6.]); let a = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., 5., 6.]);
@@ -898,6 +932,7 @@ mod tests {
assert_eq!(6., a.max()); assert_eq!(6., a.max());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn max_diff() { fn max_diff() {
let a1 = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., -5., 6.]); let a1 = DMatrix::from_row_slice(2, 3, &[1., 2., 3., 4., -5., 6.]);
@@ -906,6 +941,7 @@ mod tests {
assert_eq!(a2.max_diff(&a2), 0.); assert_eq!(a2.max_diff(&a2), 0.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn softmax_mut() { fn softmax_mut() {
let mut prob: DMatrix<f64> = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]); let mut prob: DMatrix<f64> = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]);
@@ -915,6 +951,7 @@ mod tests {
assert!((BaseMatrix::get(&prob, 0, 2) - 0.66).abs() < 0.01); assert!((BaseMatrix::get(&prob, 0, 2) - 0.66).abs() < 0.01);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn pow_mut() { fn pow_mut() {
let mut a = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]); let mut a = DMatrix::from_row_slice(1, 3, &[1., 2., 3.]);
@@ -922,6 +959,7 @@ mod tests {
assert_eq!(a, DMatrix::from_row_slice(1, 3, &[1., 8., 27.])); assert_eq!(a, DMatrix::from_row_slice(1, 3, &[1., 8., 27.]));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn argmax() { fn argmax() {
let a = DMatrix::from_row_slice(3, 3, &[1., 2., 3., -5., -6., -7., 0.1, 0.2, 0.1]); let a = DMatrix::from_row_slice(3, 3, &[1., 2., 3., -5., -6., -7., 0.1, 0.2, 0.1]);
@@ -929,6 +967,7 @@ mod tests {
assert_eq!(res, vec![2, 0, 1]); assert_eq!(res, vec![2, 0, 1]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn unique() { fn unique() {
let a = DMatrix::from_row_slice(3, 3, &[1., 2., 2., -2., -6., -7., 2., 3., 4.]); let a = DMatrix::from_row_slice(3, 3, &[1., 2., 2., -2., -6., -7., 2., 3., 4.]);
@@ -937,6 +976,7 @@ mod tests {
assert_eq!(res, vec![-7., -6., -2., 1., 2., 3., 4.]); assert_eq!(res, vec![-7., -6., -2., 1., 2., 3., 4.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn ols_fit_predict() { fn ols_fit_predict() {
let x = DMatrix::from_row_slice( let x = DMatrix::from_row_slice(
+44 -1
View File
@@ -530,6 +530,7 @@ mod tests {
use crate::metrics::mean_absolute_error; use crate::metrics::mean_absolute_error;
use ndarray::{arr1, arr2, Array1, Array2}; use ndarray::{arr1, arr2, Array1, Array2};
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_get_set() { fn vec_get_set() {
let mut result = arr1(&[1., 2., 3.]); let mut result = arr1(&[1., 2., 3.]);
@@ -541,6 +542,7 @@ mod tests {
assert_eq!(5., BaseVector::get(&result, 1)); assert_eq!(5., BaseVector::get(&result, 1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_copy_from() { fn vec_copy_from() {
let mut v1 = arr1(&[1., 2., 3.]); let mut v1 = arr1(&[1., 2., 3.]);
@@ -551,18 +553,21 @@ mod tests {
assert_ne!(v1, v2); assert_ne!(v1, v2);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_len() { fn vec_len() {
let v = arr1(&[1., 2., 3.]); let v = arr1(&[1., 2., 3.]);
assert_eq!(3, v.len()); assert_eq!(3, v.len());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_to_vec() { fn vec_to_vec() {
let v = arr1(&[1., 2., 3.]); let v = arr1(&[1., 2., 3.]);
assert_eq!(vec![1., 2., 3.], v.to_vec()); assert_eq!(vec![1., 2., 3.], v.to_vec());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_dot() { fn vec_dot() {
let v1 = arr1(&[1., 2., 3.]); let v1 = arr1(&[1., 2., 3.]);
@@ -570,6 +575,7 @@ mod tests {
assert_eq!(32.0, BaseVector::dot(&v1, &v2)); assert_eq!(32.0, BaseVector::dot(&v1, &v2));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vec_approximate_eq() { fn vec_approximate_eq() {
let a = arr1(&[1., 2., 3.]); let a = arr1(&[1., 2., 3.]);
@@ -578,6 +584,7 @@ mod tests {
assert!(!a.approximate_eq(&(&noise + &a), 1e-5)); assert!(!a.approximate_eq(&(&noise + &a), 1e-5));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn from_to_row_vec() { fn from_to_row_vec() {
let vec = arr1(&[1., 2., 3.]); let vec = arr1(&[1., 2., 3.]);
@@ -588,12 +595,14 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn col_matrix_to_row_vector() { fn col_matrix_to_row_vector() {
let m: Array2<f64> = BaseMatrix::zeros(10, 1); let m: Array2<f64> = BaseMatrix::zeros(10, 1);
assert_eq!(m.to_row_vector().len(), 10) assert_eq!(m.to_row_vector().len(), 10)
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn add_mut() { fn add_mut() {
let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -604,6 +613,7 @@ mod tests {
assert_eq!(a1, a3); assert_eq!(a1, a3);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn sub_mut() { fn sub_mut() {
let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -614,6 +624,7 @@ mod tests {
assert_eq!(a1, a3); assert_eq!(a1, a3);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mul_mut() { fn mul_mut() {
let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -624,6 +635,7 @@ mod tests {
assert_eq!(a1, a3); assert_eq!(a1, a3);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn div_mut() { fn div_mut() {
let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -634,6 +646,7 @@ mod tests {
assert_eq!(a1, a3); assert_eq!(a1, a3);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn div_element_mut() { fn div_element_mut() {
let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -642,6 +655,7 @@ mod tests {
assert_eq!(BaseMatrix::get(&a, 1, 1), 1.); assert_eq!(BaseMatrix::get(&a, 1, 1), 1.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mul_element_mut() { fn mul_element_mut() {
let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -650,6 +664,7 @@ mod tests {
assert_eq!(BaseMatrix::get(&a, 1, 1), 25.); assert_eq!(BaseMatrix::get(&a, 1, 1), 25.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn add_element_mut() { fn add_element_mut() {
let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -657,7 +672,7 @@ mod tests {
assert_eq!(BaseMatrix::get(&a, 1, 1), 10.); assert_eq!(BaseMatrix::get(&a, 1, 1), 10.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn sub_element_mut() { fn sub_element_mut() {
let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut a = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -666,6 +681,7 @@ mod tests {
assert_eq!(BaseMatrix::get(&a, 1, 1), 0.); assert_eq!(BaseMatrix::get(&a, 1, 1), 0.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn vstack_hstack() { fn vstack_hstack() {
let a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let a1 = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -680,6 +696,7 @@ mod tests {
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_set() { fn get_set() {
let mut result = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let mut result = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -691,6 +708,7 @@ mod tests {
assert_eq!(10., BaseMatrix::get(&result, 1, 1)); assert_eq!(10., BaseMatrix::get(&result, 1, 1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn matmul() { fn matmul() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -700,6 +718,7 @@ mod tests {
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn dot() { fn dot() {
let a = arr2(&[[1., 2., 3.]]); let a = arr2(&[[1., 2., 3.]]);
@@ -707,6 +726,7 @@ mod tests {
assert_eq!(14., BaseMatrix::dot(&a, &b)); assert_eq!(14., BaseMatrix::dot(&a, &b));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn slice() { fn slice() {
let a = arr2(&[ let a = arr2(&[
@@ -719,6 +739,7 @@ mod tests {
assert_eq!(result, expected); assert_eq!(result, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn scalar_ops() { fn scalar_ops() {
let a = arr2(&[[1., 2., 3.]]); let a = arr2(&[[1., 2., 3.]]);
@@ -728,6 +749,7 @@ mod tests {
assert_eq!(&arr2(&[[0.5, 1., 1.5]]), a.clone().div_scalar_mut(2.)); assert_eq!(&arr2(&[[0.5, 1., 1.5]]), a.clone().div_scalar_mut(2.));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn transpose() { fn transpose() {
let m = arr2(&[[1.0, 3.0], [2.0, 4.0]]); let m = arr2(&[[1.0, 3.0], [2.0, 4.0]]);
@@ -736,6 +758,7 @@ mod tests {
assert_eq!(m_transposed, expected); assert_eq!(m_transposed, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn norm() { fn norm() {
let v = arr2(&[[3., -2., 6.]]); let v = arr2(&[[3., -2., 6.]]);
@@ -745,6 +768,7 @@ mod tests {
assert_eq!(v.norm(std::f64::NEG_INFINITY), 2.); assert_eq!(v.norm(std::f64::NEG_INFINITY), 2.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn negative_mut() { fn negative_mut() {
let mut v = arr2(&[[3., -2., 6.]]); let mut v = arr2(&[[3., -2., 6.]]);
@@ -752,6 +776,7 @@ mod tests {
assert_eq!(v, arr2(&[[-3., 2., -6.]])); assert_eq!(v, arr2(&[[-3., 2., -6.]]));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn reshape() { fn reshape() {
let m_orig = arr2(&[[1., 2., 3., 4., 5., 6.]]); let m_orig = arr2(&[[1., 2., 3., 4., 5., 6.]]);
@@ -763,6 +788,7 @@ mod tests {
assert_eq!(BaseMatrix::get(&m_result, 0, 3), 4.); assert_eq!(BaseMatrix::get(&m_result, 0, 3), 4.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn copy_from() { fn copy_from() {
let mut src = arr2(&[[1., 2., 3.]]); let mut src = arr2(&[[1., 2., 3.]]);
@@ -771,6 +797,7 @@ mod tests {
assert_eq!(src, dst); assert_eq!(src, dst);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn min_max_sum() { fn min_max_sum() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.]]);
@@ -779,6 +806,7 @@ mod tests {
assert_eq!(6., a.max()); assert_eq!(6., a.max());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn max_diff() { fn max_diff() {
let a1 = arr2(&[[1., 2., 3.], [4., -5., 6.]]); let a1 = arr2(&[[1., 2., 3.], [4., -5., 6.]]);
@@ -787,6 +815,7 @@ mod tests {
assert_eq!(a2.max_diff(&a2), 0.); assert_eq!(a2.max_diff(&a2), 0.);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn softmax_mut() { fn softmax_mut() {
let mut prob: Array2<f64> = arr2(&[[1., 2., 3.]]); let mut prob: Array2<f64> = arr2(&[[1., 2., 3.]]);
@@ -796,6 +825,7 @@ mod tests {
assert!((BaseMatrix::get(&prob, 0, 2) - 0.66).abs() < 0.01); assert!((BaseMatrix::get(&prob, 0, 2) - 0.66).abs() < 0.01);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn pow_mut() { fn pow_mut() {
let mut a = arr2(&[[1., 2., 3.]]); let mut a = arr2(&[[1., 2., 3.]]);
@@ -803,6 +833,7 @@ mod tests {
assert_eq!(a, arr2(&[[1., 8., 27.]])); assert_eq!(a, arr2(&[[1., 8., 27.]]));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn argmax() { fn argmax() {
let a = arr2(&[[1., 2., 3.], [-5., -6., -7.], [0.1, 0.2, 0.1]]); let a = arr2(&[[1., 2., 3.], [-5., -6., -7.], [0.1, 0.2, 0.1]]);
@@ -810,6 +841,7 @@ mod tests {
assert_eq!(res, vec![2, 0, 1]); assert_eq!(res, vec![2, 0, 1]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn unique() { fn unique() {
let a = arr2(&[[1., 2., 2.], [-2., -6., -7.], [2., 3., 4.]]); let a = arr2(&[[1., 2., 2.], [-2., -6., -7.], [2., 3., 4.]]);
@@ -818,6 +850,7 @@ mod tests {
assert_eq!(res, vec![-7., -6., -2., 1., 2., 3., 4.]); assert_eq!(res, vec![-7., -6., -2., 1., 2., 3., 4.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_row_as_vector() { fn get_row_as_vector() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
@@ -825,12 +858,14 @@ mod tests {
assert_eq!(res, vec![4., 5., 6.]); assert_eq!(res, vec![4., 5., 6.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_row() { fn get_row() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
assert_eq!(arr1(&[4., 5., 6.]), a.get_row(1)); assert_eq!(arr1(&[4., 5., 6.]), a.get_row(1));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn get_col_as_vector() { fn get_col_as_vector() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
@@ -838,6 +873,7 @@ mod tests {
assert_eq!(res, vec![2., 5., 8.]); assert_eq!(res, vec![2., 5., 8.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn copy_row_col_as_vec() { fn copy_row_col_as_vec() {
let m = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); let m = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
@@ -849,6 +885,7 @@ mod tests {
assert_eq!(v, vec!(2., 5., 8.)); assert_eq!(v, vec!(2., 5., 8.));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn col_mean() { fn col_mean() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
@@ -856,6 +893,7 @@ mod tests {
assert_eq!(res, vec![4., 5., 6.]); assert_eq!(res, vec![4., 5., 6.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn eye() { fn eye() {
let a = arr2(&[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]); let a = arr2(&[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]);
@@ -863,6 +901,7 @@ mod tests {
assert_eq!(res, a); assert_eq!(res, a);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn rand() { fn rand() {
let m: Array2<f64> = BaseMatrix::rand(3, 3); let m: Array2<f64> = BaseMatrix::rand(3, 3);
@@ -873,6 +912,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn approximate_eq() { fn approximate_eq() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
@@ -881,6 +921,7 @@ mod tests {
assert!(!a.approximate_eq(&(&noise + &a), 1e-5)); assert!(!a.approximate_eq(&(&noise + &a), 1e-5));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn abs_mut() { fn abs_mut() {
let mut a = arr2(&[[1., -2.], [3., -4.]]); let mut a = arr2(&[[1., -2.], [3., -4.]]);
@@ -889,6 +930,7 @@ mod tests {
assert_eq!(a, expected); assert_eq!(a, expected);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lr_fit_predict_iris() { fn lr_fit_predict_iris() {
let x = arr2(&[ let x = arr2(&[
@@ -930,6 +972,7 @@ mod tests {
assert!(error <= 1.0); assert!(error <= 1.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn my_fit_longley_ndarray() { fn my_fit_longley_ndarray() {
let x = arr2(&[ let x = arr2(&[
+2 -1
View File
@@ -195,7 +195,7 @@ pub trait QRDecomposableMatrix<T: RealNumber>: BaseMatrix<T> {
mod tests { mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose() { fn decompose() {
let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]); let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]);
@@ -214,6 +214,7 @@ mod tests {
assert!(qr.R().abs().approximate_eq(&r.abs(), 1e-4)); assert!(qr.R().abs().approximate_eq(&r.abs(), 1e-4));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn qr_solve_mut() { fn qr_solve_mut() {
let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]); let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]);
+4 -4
View File
@@ -150,7 +150,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
use crate::linalg::BaseVector; use crate::linalg::BaseVector;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mean() { fn mean() {
let m = DenseMatrix::from_2d_array(&[ let m = DenseMatrix::from_2d_array(&[
@@ -164,7 +164,7 @@ mod tests {
assert_eq!(m.mean(0), expected_0); assert_eq!(m.mean(0), expected_0);
assert_eq!(m.mean(1), expected_1); assert_eq!(m.mean(1), expected_1);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn std() { fn std() {
let m = DenseMatrix::from_2d_array(&[ let m = DenseMatrix::from_2d_array(&[
@@ -178,7 +178,7 @@ mod tests {
assert!(m.std(0).approximate_eq(&expected_0, 1e-2)); assert!(m.std(0).approximate_eq(&expected_0, 1e-2));
assert!(m.std(1).approximate_eq(&expected_1, 1e-2)); assert!(m.std(1).approximate_eq(&expected_1, 1e-2));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn var() { fn var() {
let m = DenseMatrix::from_2d_array(&[&[1., 2., 3., 4.], &[5., 6., 7., 8.]]); let m = DenseMatrix::from_2d_array(&[&[1., 2., 3., 4.], &[5., 6., 7., 8.]]);
@@ -188,7 +188,7 @@ mod tests {
assert!(m.var(0).approximate_eq(&expected_0, std::f64::EPSILON)); assert!(m.var(0).approximate_eq(&expected_0, std::f64::EPSILON));
assert!(m.var(1).approximate_eq(&expected_1, std::f64::EPSILON)); assert!(m.var(1).approximate_eq(&expected_1, std::f64::EPSILON));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn scale() { fn scale() {
let mut m = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]); let mut m = DenseMatrix::from_2d_array(&[&[1., 2., 3.], &[4., 5., 6.]]);
+4 -3
View File
@@ -482,7 +482,7 @@ impl<T: RealNumber, M: SVDDecomposableMatrix<T>> SVD<T, M> {
mod tests { mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_symmetric() { fn decompose_symmetric() {
let A = DenseMatrix::from_2d_array(&[ let A = DenseMatrix::from_2d_array(&[
@@ -513,7 +513,7 @@ mod tests {
assert!((s[i] - svd.s[i]).abs() < 1e-4); assert!((s[i] - svd.s[i]).abs() < 1e-4);
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_asymmetric() { fn decompose_asymmetric() {
let A = DenseMatrix::from_2d_array(&[ let A = DenseMatrix::from_2d_array(&[
@@ -714,7 +714,7 @@ mod tests {
assert!((s[i] - svd.s[i]).abs() < 1e-4); assert!((s[i] - svd.s[i]).abs() < 1e-4);
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn solve() { fn solve() {
let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]); let a = DenseMatrix::from_2d_array(&[&[0.9, 0.4, 0.7], &[0.4, 0.5, 0.3], &[0.7, 0.3, 0.8]]);
@@ -725,6 +725,7 @@ mod tests {
assert!(w.approximate_eq(&expected_w, 1e-2)); assert!(w.approximate_eq(&expected_w, 1e-2));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn decompose_restore() { fn decompose_restore() {
let a = DenseMatrix::from_2d_array(&[&[1.0, 2.0, 3.0, 4.0], &[5.0, 6.0, 7.0, 8.0]]); let a = DenseMatrix::from_2d_array(&[&[1.0, 2.0, 3.0, 4.0], &[5.0, 6.0, 7.0, 8.0]]);
+1
View File
@@ -126,6 +126,7 @@ mod tests {
impl<T: RealNumber, M: Matrix<T>> BiconjugateGradientSolver<T, M> for BGSolver {} impl<T: RealNumber, M: Matrix<T>> BiconjugateGradientSolver<T, M> for BGSolver {}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn bg_solver() { fn bg_solver() {
let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]); let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]);
+3
View File
@@ -291,6 +291,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
use crate::metrics::mean_absolute_error; use crate::metrics::mean_absolute_error;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn elasticnet_longley() { fn elasticnet_longley() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -334,6 +335,7 @@ mod tests {
assert!(mean_absolute_error(&y_hat, &y) < 30.0); assert!(mean_absolute_error(&y_hat, &y) < 30.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn elasticnet_fit_predict1() { fn elasticnet_fit_predict1() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -400,6 +402,7 @@ mod tests {
assert!(l1_model.coefficients().get(0, 0) > l1_model.coefficients().get(2, 0)); assert!(l1_model.coefficients().get(0, 0) > l1_model.coefficients().get(2, 0));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2
View File
@@ -226,6 +226,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
use crate::metrics::mean_absolute_error; use crate::metrics::mean_absolute_error;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lasso_fit_predict() { fn lasso_fit_predict() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -274,6 +275,7 @@ mod tests {
assert!(mean_absolute_error(&y_hat, &y) < 2.0); assert!(mean_absolute_error(&y_hat, &y) < 2.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2
View File
@@ -200,6 +200,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn ols_fit_predict() { fn ols_fit_predict() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -250,6 +251,7 @@ mod tests {
.all(|(&a, &b)| (a - b).abs() <= 5.0)); .all(|(&a, &b)| (a - b).abs() <= 5.0));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+7
View File
@@ -452,6 +452,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
use crate::metrics::accuracy; use crate::metrics::accuracy;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn multiclass_objective_f() { fn multiclass_objective_f() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -519,6 +520,7 @@ mod tests {
assert!((g.get(0, 0).abs() - 32.0).abs() < 1e-4); assert!((g.get(0, 0).abs() - 32.0).abs() < 1e-4);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn binary_objective_f() { fn binary_objective_f() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -575,6 +577,7 @@ mod tests {
assert!((g.get(0, 2) - 3.8693).abs() < 1e-4); assert!((g.get(0, 2) - 3.8693).abs() < 1e-4);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lr_fit_predict() { fn lr_fit_predict() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -612,6 +615,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lr_fit_predict_multiclass() { fn lr_fit_predict_multiclass() {
let blobs = make_blobs(15, 4, 3); let blobs = make_blobs(15, 4, 3);
@@ -635,6 +639,7 @@ mod tests {
assert!(lr_reg.coefficients().abs().sum() < lr.coefficients().abs().sum()); assert!(lr_reg.coefficients().abs().sum() < lr.coefficients().abs().sum());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lr_fit_predict_binary() { fn lr_fit_predict_binary() {
let blobs = make_blobs(20, 4, 2); let blobs = make_blobs(20, 4, 2);
@@ -658,6 +663,7 @@ mod tests {
assert!(lr_reg.coefficients().abs().sum() < lr.coefficients().abs().sum()); assert!(lr_reg.coefficients().abs().sum() < lr.coefficients().abs().sum());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
@@ -688,6 +694,7 @@ mod tests {
assert_eq!(lr, deserialized_lr); assert_eq!(lr, deserialized_lr);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lr_fit_predict_iris() { fn lr_fit_predict_iris() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
+2
View File
@@ -274,6 +274,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
use crate::metrics::mean_absolute_error; use crate::metrics::mean_absolute_error;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn ridge_fit_predict() { fn ridge_fit_predict() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -329,6 +330,7 @@ mod tests {
assert!(mean_absolute_error(&y_hat_svd, &y) < 2.0); assert!(mean_absolute_error(&y_hat_svd, &y) < 2.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+1
View File
@@ -57,6 +57,7 @@ impl<T: RealNumber> Distance<Vec<T>, T> for Euclidian {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn squared_distance() { fn squared_distance() {
let a = vec![1., 2., 3.]; let a = vec![1., 2., 3.];
+1
View File
@@ -52,6 +52,7 @@ impl<T: PartialEq, F: RealNumber> Distance<Vec<T>, F> for Hamming {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn hamming_distance() { fn hamming_distance() {
let a = vec![1, 0, 0, 1, 0, 0, 1]; let a = vec![1, 0, 0, 1, 0, 0, 1];
+1
View File
@@ -133,6 +133,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mahalanobis_distance() { fn mahalanobis_distance() {
let data = DenseMatrix::from_2d_array(&[ let data = DenseMatrix::from_2d_array(&[
+1
View File
@@ -48,6 +48,7 @@ impl<T: RealNumber> Distance<Vec<T>, T> for Manhattan {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn manhattan_distance() { fn manhattan_distance() {
let a = vec![1., 2., 3.]; let a = vec![1., 2., 3.];
+1
View File
@@ -61,6 +61,7 @@ impl<T: RealNumber> Distance<Vec<T>, T> for Minkowski {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn minkowski_distance() { fn minkowski_distance() {
let a = vec![1., 2., 3.]; let a = vec![1., 2., 3.];
+1
View File
@@ -136,6 +136,7 @@ impl RealNumber for f32 {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn sigmoid() { fn sigmoid() {
assert_eq!(1.0.sigmoid(), 0.7310585786300049); assert_eq!(1.0.sigmoid(), 0.7310585786300049);
+1
View File
@@ -30,6 +30,7 @@ impl<T: RealNumber, V: BaseVector<T>> RealNumberVector<T> for V {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn unique_with_indices() { fn unique_with_indices() {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
+1
View File
@@ -57,6 +57,7 @@ impl Accuracy {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn accuracy() { fn accuracy() {
let y_pred: Vec<f64> = vec![0., 2., 1., 3.]; let y_pred: Vec<f64> = vec![0., 2., 1., 3.];
+1
View File
@@ -93,6 +93,7 @@ impl AUC {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn auc() { fn auc() {
let y_true: Vec<f64> = vec![0., 0., 1., 1.]; let y_true: Vec<f64> = vec![0., 0., 1., 1.];
+1
View File
@@ -43,6 +43,7 @@ impl HCVScore {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn homogeneity_score() { fn homogeneity_score() {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
+3
View File
@@ -101,6 +101,7 @@ pub fn mutual_info_score<T: RealNumber>(contingency: &[Vec<usize>]) -> T {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn contingency_matrix_test() { fn contingency_matrix_test() {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
@@ -112,6 +113,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn entropy_test() { fn entropy_test() {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
@@ -119,6 +121,7 @@ mod tests {
assert!((1.2770f32 - entropy(&v1).unwrap()).abs() < 1e-4); assert!((1.2770f32 - entropy(&v1).unwrap()).abs() < 1e-4);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mutual_info_score_test() { fn mutual_info_score_test() {
let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0]; let v1 = vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 4.0];
+1
View File
@@ -59,6 +59,7 @@ impl<T: RealNumber> F1<T> {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn f1() { fn f1() {
let y_pred: Vec<f64> = vec![0., 0., 1., 1., 1., 1.]; let y_pred: Vec<f64> = vec![0., 0., 1., 1., 1., 1.];
+1
View File
@@ -56,6 +56,7 @@ impl MeanAbsoluteError {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mean_absolute_error() { fn mean_absolute_error() {
let y_true: Vec<f64> = vec![3., -0.5, 2., 7.]; let y_true: Vec<f64> = vec![3., -0.5, 2., 7.];
+1
View File
@@ -56,6 +56,7 @@ impl MeanSquareError {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn mean_squared_error() { fn mean_squared_error() {
let y_true: Vec<f64> = vec![3., -0.5, 2., 7.]; let y_true: Vec<f64> = vec![3., -0.5, 2., 7.];
+1
View File
@@ -77,6 +77,7 @@ impl Precision {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn precision() { fn precision() {
let y_true: Vec<f64> = vec![0., 1., 1., 0.]; let y_true: Vec<f64> = vec![0., 1., 1., 0.];
+1
View File
@@ -70,6 +70,7 @@ impl R2 {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn r2() { fn r2() {
let y_true: Vec<f64> = vec![3., -0.5, 2., 7.]; let y_true: Vec<f64> = vec![3., -0.5, 2., 7.];
+1
View File
@@ -77,6 +77,7 @@ impl Recall {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn recall() { fn recall() {
let y_true: Vec<f64> = vec![0., 1., 1., 0.]; let y_true: Vec<f64> = vec![0., 1., 1., 0.];
+7
View File
@@ -144,6 +144,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::*; use crate::linalg::naive::dense_matrix::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_kfold_return_test_indices_simple() { fn run_kfold_return_test_indices_simple() {
let k = KFold { let k = KFold {
@@ -158,6 +159,7 @@ mod tests {
assert_eq!(test_indices[2], (22..33).collect::<Vec<usize>>()); assert_eq!(test_indices[2], (22..33).collect::<Vec<usize>>());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_kfold_return_test_indices_odd() { fn run_kfold_return_test_indices_odd() {
let k = KFold { let k = KFold {
@@ -172,6 +174,7 @@ mod tests {
assert_eq!(test_indices[2], (23..34).collect::<Vec<usize>>()); assert_eq!(test_indices[2], (23..34).collect::<Vec<usize>>());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_kfold_return_test_mask_simple() { fn run_kfold_return_test_mask_simple() {
let k = KFold { let k = KFold {
@@ -197,6 +200,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_kfold_return_split_simple() { fn run_kfold_return_split_simple() {
let k = KFold { let k = KFold {
@@ -212,6 +216,7 @@ mod tests {
assert_eq!(train_test_splits[1].1, (11..22).collect::<Vec<usize>>()); assert_eq!(train_test_splits[1].1, (11..22).collect::<Vec<usize>>());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_kfold_return_split_simple_shuffle() { fn run_kfold_return_split_simple_shuffle() {
let k = KFold { let k = KFold {
@@ -227,6 +232,7 @@ mod tests {
assert_eq!(train_test_splits[1].1.len(), 11_usize); assert_eq!(train_test_splits[1].1.len(), 11_usize);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn numpy_parity_test() { fn numpy_parity_test() {
let k = KFold { let k = KFold {
@@ -247,6 +253,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn numpy_parity_test_shuffle() { fn numpy_parity_test_shuffle() {
let k = KFold { let k = KFold {
+4
View File
@@ -285,6 +285,7 @@ mod tests {
use crate::model_selection::kfold::KFold; use crate::model_selection::kfold::KFold;
use crate::neighbors::knn_regressor::KNNRegressor; use crate::neighbors::knn_regressor::KNNRegressor;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_train_test_split() { fn run_train_test_split() {
let n = 123; let n = 123;
@@ -308,6 +309,7 @@ mod tests {
#[derive(Clone)] #[derive(Clone)]
struct NoParameters {} struct NoParameters {}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_cross_validate_biased() { fn test_cross_validate_biased() {
struct BiasedEstimator {} struct BiasedEstimator {}
@@ -367,6 +369,7 @@ mod tests {
assert_eq!(0.4, results.mean_train_score()); assert_eq!(0.4, results.mean_train_score());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_cross_validate_knn() { fn test_cross_validate_knn() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -411,6 +414,7 @@ mod tests {
assert!(results.mean_train_score() < results.mean_test_score()); assert!(results.mean_train_score() < results.mean_test_score());
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_cross_val_predict_knn() { fn test_cross_val_predict_knn() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
+3
View File
@@ -346,6 +346,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_bernoulli_naive_bayes() { fn run_bernoulli_naive_bayes() {
// Tests that BernoulliNB when alpha=1.0 gives the same values as // Tests that BernoulliNB when alpha=1.0 gives the same values as
@@ -398,6 +399,7 @@ mod tests {
assert_eq!(y_hat, &[1.]); assert_eq!(y_hat, &[1.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn bernoulli_nb_scikit_parity() { fn bernoulli_nb_scikit_parity() {
let x = DenseMatrix::<f64>::from_2d_array(&[ let x = DenseMatrix::<f64>::from_2d_array(&[
@@ -460,6 +462,7 @@ mod tests {
)); ));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -351,6 +351,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_categorical_naive_bayes() { fn run_categorical_naive_bayes() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -431,6 +432,7 @@ mod tests {
assert_eq!(y_hat, vec![0., 1.]); assert_eq!(y_hat, vec![0., 1.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_categorical_naive_bayes2() { fn run_categorical_naive_bayes2() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -459,6 +461,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -259,6 +259,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_gaussian_naive_bayes() { fn run_gaussian_naive_bayes() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -295,6 +296,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_gaussian_naive_bayes_with_priors() { fn run_gaussian_naive_bayes_with_priors() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -314,6 +316,7 @@ mod tests {
assert_eq!(gnb.class_priors(), &priors); assert_eq!(gnb.class_priors(), &priors);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -297,6 +297,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn run_multinomial_naive_bayes() { fn run_multinomial_naive_bayes() {
// Tests that MultinomialNB when alpha=1.0 gives the same values as // Tests that MultinomialNB when alpha=1.0 gives the same values as
@@ -352,6 +353,7 @@ mod tests {
assert_eq!(y_hat, &[0.]); assert_eq!(y_hat, &[0.]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn multinomial_nb_scikit_parity() { fn multinomial_nb_scikit_parity() {
let x = DenseMatrix::<f64>::from_2d_array(&[ let x = DenseMatrix::<f64>::from_2d_array(&[
@@ -411,6 +413,7 @@ mod tests {
1e-5 1e-5
)); ));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -251,6 +251,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn knn_fit_predict() { fn knn_fit_predict() {
let x = let x =
@@ -262,6 +263,7 @@ mod tests {
assert_eq!(y.to_vec(), y_hat); assert_eq!(y.to_vec(), y_hat);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn knn_fit_predict_weighted() { fn knn_fit_predict_weighted() {
let x = DenseMatrix::from_2d_array(&[&[1.], &[2.], &[3.], &[4.], &[5.]]); let x = DenseMatrix::from_2d_array(&[&[1.], &[2.], &[3.], &[4.], &[5.]]);
@@ -279,6 +281,7 @@ mod tests {
assert_eq!(vec![3.0], y_hat); assert_eq!(vec![3.0], y_hat);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+3
View File
@@ -231,6 +231,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
use crate::math::distance::Distances; use crate::math::distance::Distances;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn knn_fit_predict_weighted() { fn knn_fit_predict_weighted() {
let x = let x =
@@ -254,6 +255,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn knn_fit_predict_uniform() { fn knn_fit_predict_uniform() {
let x = let x =
@@ -268,6 +270,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
@@ -88,6 +88,7 @@ mod tests {
use crate::optimization::line_search::Backtracking; use crate::optimization::line_search::Backtracking;
use crate::optimization::FunctionOrder; use crate::optimization::FunctionOrder;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn gradient_descent() { fn gradient_descent() {
let x0 = DenseMatrix::row_vector_from_array(&[-1., 1.]); let x0 = DenseMatrix::row_vector_from_array(&[-1., 1.]);
+1
View File
@@ -239,6 +239,7 @@ mod tests {
use crate::optimization::line_search::Backtracking; use crate::optimization::line_search::Backtracking;
use crate::optimization::FunctionOrder; use crate::optimization::FunctionOrder;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn lbfgs() { fn lbfgs() {
let x0 = DenseMatrix::row_vector_from_array(&[0., 0.]); let x0 = DenseMatrix::row_vector_from_array(&[0., 0.]);
+1
View File
@@ -112,6 +112,7 @@ impl<T: Float> LineSearchMethod<T> for Backtracking<T> {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn backtracking() { fn backtracking() {
let f = |x: f64| -> f64 { x.powf(2.) + x }; let f = |x: f64| -> f64 { x.powf(2.) + x };
+5
View File
@@ -225,6 +225,7 @@ mod tests {
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
use crate::preprocessing::series_encoder::CategoryMapper; use crate::preprocessing::series_encoder::CategoryMapper;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn adjust_idxs() { fn adjust_idxs() {
assert_eq!(find_new_idxs(0, &[], &[]), Vec::<usize>::new()); assert_eq!(find_new_idxs(0, &[], &[]), Vec::<usize>::new());
@@ -269,6 +270,7 @@ mod tests {
(orig, oh_enc) (orig, oh_enc)
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn hash_encode_f64_series() { fn hash_encode_f64_series() {
let series = vec![3.0, 1.0, 2.0, 1.0]; let series = vec![3.0, 1.0, 2.0, 1.0];
@@ -279,6 +281,7 @@ mod tests {
let orig_val: f64 = inv.unwrap().into(); let orig_val: f64 = inv.unwrap().into();
assert_eq!(orig_val, 2.0); assert_eq!(orig_val, 2.0);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_fit() { fn test_fit() {
let (x, _) = build_fake_matrix(); let (x, _) = build_fake_matrix();
@@ -294,6 +297,7 @@ mod tests {
assert_eq!(num_cat, vec![2, 4]); assert_eq!(num_cat, vec![2, 4]);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn matrix_transform_test() { fn matrix_transform_test() {
let (x, expected_x) = build_fake_matrix(); let (x, expected_x) = build_fake_matrix();
@@ -309,6 +313,7 @@ mod tests {
assert_eq!(nm, expected_x); assert_eq!(nm, expected_x);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fail_on_bad_category() { fn fail_on_bad_category() {
let m = DenseMatrix::from_2d_array(&[ let m = DenseMatrix::from_2d_array(&[
+6
View File
@@ -201,6 +201,7 @@ where
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn from_categories() { fn from_categories() {
let fake_categories: Vec<usize> = vec![1, 2, 3, 4, 5, 3, 5, 3, 1, 2, 4]; let fake_categories: Vec<usize> = vec![1, 2, 3, 4, 5, 3, 5, 3, 1, 2, 4];
@@ -219,12 +220,14 @@ mod tests {
let enc = CategoryMapper::<&str>::from_positional_category_vec(fake_category_pos); let enc = CategoryMapper::<&str>::from_positional_category_vec(fake_category_pos);
enc enc
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn ordinal_encoding() { fn ordinal_encoding() {
let enc = build_fake_str_enc(); let enc = build_fake_str_enc();
assert_eq!(1f64, enc.get_ordinal::<f64>(&"dog").unwrap()) assert_eq!(1f64, enc.get_ordinal::<f64>(&"dog").unwrap())
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn category_map_and_vec() { fn category_map_and_vec() {
let category_map: HashMap<&str, usize> = vec![("background", 0), ("dog", 1), ("cat", 2)] let category_map: HashMap<&str, usize> = vec![("background", 0), ("dog", 1), ("cat", 2)]
@@ -239,6 +242,7 @@ mod tests {
assert_eq!(oh_vec, res); assert_eq!(oh_vec, res);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn positional_categories_vec() { fn positional_categories_vec() {
let enc = build_fake_str_enc(); let enc = build_fake_str_enc();
@@ -250,6 +254,7 @@ mod tests {
assert_eq!(oh_vec, res); assert_eq!(oh_vec, res);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn invert_label_test() { fn invert_label_test() {
let enc = build_fake_str_enc(); let enc = build_fake_str_enc();
@@ -262,6 +267,7 @@ mod tests {
}; };
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn test_many_categorys() { fn test_many_categorys() {
let enc = build_fake_str_enc(); let enc = build_fake_str_enc();
+4
View File
@@ -159,6 +159,7 @@ impl<T: RealNumber, V: BaseVector<T>> Kernel<T, V> for SigmoidKernel<T> {
mod tests { mod tests {
use super::*; use super::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn linear_kernel() { fn linear_kernel() {
let v1 = vec![1., 2., 3.]; let v1 = vec![1., 2., 3.];
@@ -167,6 +168,7 @@ mod tests {
assert_eq!(32f64, Kernels::linear().apply(&v1, &v2)); assert_eq!(32f64, Kernels::linear().apply(&v1, &v2));
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn rbf_kernel() { fn rbf_kernel() {
let v1 = vec![1., 2., 3.]; let v1 = vec![1., 2., 3.];
@@ -175,6 +177,7 @@ mod tests {
assert!((0.2265f64 - Kernels::rbf(0.055).apply(&v1, &v2)).abs() < 1e-4); assert!((0.2265f64 - Kernels::rbf(0.055).apply(&v1, &v2)).abs() < 1e-4);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn polynomial_kernel() { fn polynomial_kernel() {
let v1 = vec![1., 2., 3.]; let v1 = vec![1., 2., 3.];
@@ -186,6 +189,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn sigmoid_kernel() { fn sigmoid_kernel() {
let v1 = vec![1., 2., 3.]; let v1 = vec![1., 2., 3.];
+3
View File
@@ -729,6 +729,7 @@ mod tests {
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
use crate::svm::*; use crate::svm::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn svc_fit_predict() { fn svc_fit_predict() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -771,6 +772,7 @@ mod tests {
assert!(accuracy(&y_hat, &y) >= 0.9); assert!(accuracy(&y_hat, &y) >= 0.9);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn svc_fit_predict_rbf() { fn svc_fit_predict_rbf() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -814,6 +816,7 @@ mod tests {
assert!(accuracy(&y_hat, &y) >= 0.9); assert!(accuracy(&y_hat, &y) >= 0.9);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn svc_serde() { fn svc_serde() {
+2
View File
@@ -536,6 +536,7 @@ mod tests {
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
use crate::svm::*; use crate::svm::*;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn svr_fit_predict() { fn svr_fit_predict() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -569,6 +570,7 @@ mod tests {
assert!(mean_squared_error(&y_hat, &y) < 2.5); assert!(mean_squared_error(&y_hat, &y) < 2.5);
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn svr_serde() { fn svr_serde() {
+4
View File
@@ -640,6 +640,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn gini_impurity() { fn gini_impurity() {
assert!( assert!(
@@ -656,6 +657,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_predict_iris() { fn fit_predict_iris() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -708,6 +710,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_predict_baloons() { fn fit_predict_baloons() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -744,6 +747,7 @@ mod tests {
); );
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {
+2
View File
@@ -506,6 +506,7 @@ mod tests {
use super::*; use super::*;
use crate::linalg::naive::dense_matrix::DenseMatrix; use crate::linalg::naive::dense_matrix::DenseMatrix;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
fn fit_longley() { fn fit_longley() {
let x = DenseMatrix::from_2d_array(&[ let x = DenseMatrix::from_2d_array(&[
@@ -580,6 +581,7 @@ mod tests {
} }
} }
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test] #[test]
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn serde() { fn serde() {