Skip to content

Commit 6282ee7

Browse files
authored
Merge pull request #1397 from deeptools/rust_tests
Rust tests
2 parents 4414609 + 1f99fbf commit 6282ee7

File tree

10 files changed

+209
-21
lines changed

10 files changed

+209
-21
lines changed

.github/workflows/pypi.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: pypi
1+
name: pypi upload
22

33
on:
44
create:

.github/workflows/planemo.yml renamed to .github/workflows/test_planemo.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Planemo
1+
name: tests_planemo
22
on: [push, pull_request, workflow_dispatch]
33

44
env:

.github/workflows/test.yml renamed to .github/workflows/test_pytest.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Test
1+
name: tests_pytest
22
on: [push, pull_request, workflow_dispatch]
33

44
defaults:
@@ -41,7 +41,7 @@ jobs:
4141
runs-on: ubuntu-latest
4242
strategy:
4343
matrix:
44-
python-version: ['3.9','3.10', '3.11', '3.12']
44+
python-version: ['3.9','3.10', '3.11', '3.12', '3.13']
4545
steps:
4646
- uses: actions/checkout@v4
4747
- uses: actions/setup-python@v5
@@ -73,7 +73,7 @@ jobs:
7373
runs-on: macOS-latest
7474
strategy:
7575
matrix:
76-
python-version: ['3.9','3.10', '3.11', '3.12']
76+
python-version: ['3.9','3.10', '3.11', '3.12', '3.13']
7777
steps:
7878
- uses: actions/checkout@v4
7979
- uses: actions/setup-python@v5

.github/workflows/cargo_test.yml renamed to .github/workflows/test_rust.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Cargo
1+
name: tests_rust
22
on: [push, pull_request, workflow_dispatch]
33

44
jobs:

.github/workflows/maturin.yml renamed to .github/workflows/wheels.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
name: Wheels
1+
name: build wheels
22
# maturin generate-ci github > .github/workflows/maturin.yml
33
# Also, see: https://github.com/jackh726/bigtools/blob/master/.github/workflows/release-python.yml
44

55
on:
66
push:
77
pull_request:
8-
workflow_dispatch:
98

109
permissions:
1110
contents: read

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ mod filtering;
1010
mod multibamsummary;
1111
mod normalization;
1212
#[cfg(test)]
13-
mod test;
13+
mod tests;
1414

1515
#[pymodule]
1616
fn hp(m: &Bound<'_, PyModule>) -> PyResult<()> {

src/test.rs

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/tests/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pub mod test_calc;
2+
pub mod test_normalization;

src/tests/test_calc.rs

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
use crate::calc::*;
2+
use ndarray::{Array1, Array2};
3+
4+
mod vector_calculations_tests{
5+
use super::*;
6+
7+
#[test]
8+
fn test_median() {
9+
let v: Vec<u32> = vec![1,2,3,4,5];
10+
assert_eq!(median(v), 3.0);
11+
}
12+
13+
#[test]
14+
fn test_mean_float() {
15+
let v: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
16+
assert_eq!(mean_float(v.iter().collect()), 3.0);
17+
}
18+
19+
#[test]
20+
fn test_median_float() {
21+
let v: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
22+
assert_eq!(median_float(v.iter().collect()), 3.0);
23+
}
24+
25+
26+
#[test]
27+
fn test_min_float() {
28+
let v: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
29+
assert_eq!(min_float(v.iter().collect()), 1.0);
30+
}
31+
32+
#[test]
33+
fn test_max_float() {
34+
let v: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
35+
assert_eq!(max_float(v.iter().collect()), 5.0);
36+
}
37+
38+
#[test]
39+
fn test_sum_float() {
40+
let v: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
41+
assert_eq!(sum_float(v.iter().collect()), 15.0);
42+
}
43+
44+
#[test]
45+
fn test_std_float() {
46+
let v: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
47+
assert_eq!(std_float(v.iter().collect()), 1.5811388);
48+
49+
let v: Vec<f32> = vec![1.0, 1.0, 1.0];
50+
assert_eq!(std_float(v.iter().collect()), 0.0);
51+
52+
assert_eq!(std_float(vec![]), 0.0);
53+
}
54+
}
55+
56+
mod scalefactor_calculations_tests{
57+
use super::*;
58+
#[test]
59+
fn test_calc_ratio() {
60+
let cov1: f32 = 5.0;
61+
let cov2: f32 = 10.0;
62+
63+
let sf1: f32 = 1.0;
64+
let sf2: f32 = 2.0;
65+
66+
let pc1: f32 = 1.0;
67+
let pc2: f32 = 2.0;
68+
69+
let log2 = "log2";
70+
let ratio = "ratio";
71+
let reciprocal_ratio = "reciprocal_ratio";
72+
let subtract = "subtract";
73+
74+
let r1 = calc_ratio(
75+
cov1, cov2,
76+
&sf1, &sf2,
77+
&pc1, &pc2,
78+
log2
79+
);
80+
let r2 = calc_ratio(
81+
cov1, cov2,
82+
&sf1, &sf2,
83+
&pc1, &pc2,
84+
ratio
85+
);
86+
let r3 = calc_ratio(
87+
cov1, cov2,
88+
&sf1, &sf2,
89+
&pc1, &pc2,
90+
reciprocal_ratio
91+
);
92+
let r4 = calc_ratio(
93+
cov1, cov2,
94+
&sf1, &sf2,
95+
&pc1, &pc2,
96+
subtract
97+
);
98+
assert_eq!(r1, -1.87);
99+
assert_eq!(r2, 0.27);
100+
assert_eq!(r3, -0.27);
101+
assert_eq!(r4, -16.0);
102+
}
103+
104+
#[test]
105+
fn test_deseq_scalefactors() {
106+
let counts = Array2::from_shape_vec((3, 3), vec![
107+
1.0, 2.0, 3.0,
108+
4.0, 5.0, 6.0,
109+
7.0, 8.0, 9.0
110+
]).unwrap();
111+
let sf = deseq_scalefactors(&counts);
112+
let expected_sf = Array1::from_vec(vec![1.233106, 0.9864848, 0.82207066]);
113+
assert_eq!(sf, expected_sf);
114+
}
115+
}

src/tests/test_normalization.rs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
use crate::normalization::*;
2+
3+
mod scale_factor_tests {
4+
use super::*;
5+
6+
#[test]
7+
fn test_scale_factor_rpkm() {
8+
let nm = "RPKM";
9+
let sf = scale_factor(
10+
nm,
11+
1000, 10, 10000,
12+
20.0, 20.0,
13+
1.0, &false
14+
);
15+
assert_eq!(sf, 99999.99);
16+
}
17+
18+
#[test]
19+
fn test_scale_factor_cpm() {
20+
let nm = "CPM";
21+
let sf = scale_factor(
22+
nm,
23+
1000, 10, 10000,
24+
20.0, 20.0,
25+
1.0, &false
26+
);
27+
assert_eq!(sf, 999.99994);
28+
}
29+
30+
#[test]
31+
fn test_scale_factor_bpm() {
32+
let nm = "BPM";
33+
let sf = scale_factor(
34+
nm,
35+
1000, 10, 10000,
36+
20.0, 20.0,
37+
1.0, &false
38+
);
39+
assert_eq!(sf, 999.99994);
40+
}
41+
42+
#[test]
43+
fn test_scale_factor_rpgc() {
44+
let nm = "RPGC";
45+
let sf = scale_factor(
46+
nm,
47+
1000, 10, 10000,
48+
20.0, 20.0,
49+
1.0, &false
50+
);
51+
assert_eq!(sf, 0.5);
52+
}
53+
54+
#[test]
55+
fn test_preset_scalefactor() {
56+
let nm = "RPKM";
57+
let sf = scale_factor(
58+
nm,
59+
1000, 10, 10000,
60+
20.0, 20.0,
61+
5.5, &false
62+
);
63+
assert_eq!(sf, 5.5);
64+
}
65+
}
66+
67+
mod bamcompare_scale_factor_tests{
68+
use super::*;
69+
70+
#[test]
71+
fn test_bamcompare_readcount() {
72+
let nm = "readCount";
73+
let (sf1, sf2) = scale_factor_bamcompare(
74+
nm,
75+
1000, 2000,
76+
10, 10000,
77+
"RPKM",
78+
20.0, 20.0,
79+
1.0, 1.0
80+
);
81+
assert_eq!(sf1, 1.0);
82+
assert_eq!(sf2, 0.5);
83+
}
84+
}

0 commit comments

Comments
 (0)