Skip to content

Commit 95535ea

Browse files
committed
add tests in separate crate
1 parent d803c13 commit 95535ea

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ members = [
6161
"suitesparse_bindings/suitesparse-src",
6262
"sprs-rand",
6363
"sprs-benches",
64+
"sprs-tests",
6465
]
6566

6667
[package.metadata.docs.rs]

sprs-tests/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "sprs-tests"
3+
version = "0.1.0"
4+
authors = ["Magnus Ulimoen <[email protected]>"]
5+
edition = "2018"
6+
publish = false
7+
8+
[dev-dependencies]
9+
sprs = { path = "..", features = ["serde"], default-features = false }
10+
serde_json = "1.0.58"

sprs-tests/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# sprs-tests
2+
3+
Ancillary crate to test `sprs` by pulling in extra dependencies

sprs-tests/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn main() {}

sprs-tests/tests/tests.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
mod serde_tests {
2+
use sprs::*;
3+
#[test]
4+
fn valid_vectors() {
5+
let json_vec =
6+
r#"{ "dim": 100, "indices": [4, 6, 10], "data": [4, 1, 8] }"#;
7+
let _vec: CsVecI<u8, i32> = serde_json::from_str(&json_vec).unwrap();
8+
9+
let json_vec = r#"{ "dim": 200, "indices": [4, 6, 10, 120], "data": [4, 1, 8, 1] }"#;
10+
let _vec: CsVecI<i8, u16> = serde_json::from_str(&json_vec).unwrap();
11+
}
12+
13+
#[test]
14+
fn invalid_vectors() {
15+
// non-sorted indices
16+
let json_vec =
17+
r#"{ "dim": 100, "indices": [4, 6, 5], "data": [4, 1, 8] }"#;
18+
let e: Result<CsVecI<u8, i32>, _> = serde_json::from_str(&json_vec);
19+
assert!(e.is_err());
20+
21+
// max(indices) > dim
22+
let json_vec =
23+
r#"{ "dim": 2, "indices": [4, 6, 8], "data": [4, 1, 8] }"#;
24+
let e: Result<CsVecI<u8, i32>, _> = serde_json::from_str(&json_vec);
25+
assert!(e.is_err());
26+
27+
// indices.len != data.len
28+
let json_vec =
29+
r#"{ "dim": 100, "indices": [4, 6, 8, 10], "data": [4, 1, 8] }"#;
30+
let e: Result<CsVecI<u8, i32>, _> = serde_json::from_str(&json_vec);
31+
assert!(e.is_err());
32+
33+
// indice does not fit in datatype
34+
let json_vec =
35+
r#"{ "dim": 100000, "indices": [4, 6, 32768], "data": [4, 1, 8] }"#;
36+
let e: Result<CsVecI<u8, i16>, _> = serde_json::from_str(&json_vec);
37+
assert!(e.is_err());
38+
}
39+
40+
#[test]
41+
fn valid_matrices() {
42+
let json_mat = r#"{ "storage": "CSR", "ncols": 10, "nrows": 2, "indptr": [0, 2, 3], "indices": [4, 6, 9], "data": [4, 1, 8] }"#;
43+
let _mat: CsMatI<u8, i32, u16> =
44+
serde_json::from_str(&json_mat).unwrap();
45+
let _mat: CsMat<u8> = serde_json::from_str(&json_mat).unwrap();
46+
}
47+
48+
#[test]
49+
fn invalid_matrices() {
50+
// indices not sorted
51+
let json_mat = r#"{ "storage": "CSR", "ncols": 10, "nrows": 2, "indptr": [0, 3, 3], "indices": [4, 9, 6], "data": [4, 1, 8] }"#;
52+
let mat: Result<CsMatI<u8, i32, u16>, _> =
53+
serde_json::from_str(&json_mat);
54+
assert!(mat.is_err());
55+
56+
// data length != indices length
57+
let json_mat = r#"{ "storage": "CSR", "ncols": 10, "nrows": 2, "indptr": [0, 2, 3], "indices": [4, 9, 6], "data": [4, 1, 8, 10] }"#;
58+
let mat: Result<CsMatI<u8, i32, u16>, _> =
59+
serde_json::from_str(&json_mat);
60+
assert!(mat.is_err());
61+
}
62+
}

0 commit comments

Comments
 (0)