Skip to content

Commit f11665d

Browse files
committed
Move tests into new file in 'tests' folder
1 parent 7c161b6 commit f11665d

File tree

2 files changed

+189
-190
lines changed

2 files changed

+189
-190
lines changed

src/deviation.rs

-190
Original file line numberDiff line numberDiff line change
@@ -194,193 +194,3 @@ where
194194
10. * f64::log10(maxv_f * maxv_f / self.mean_sq_dev(&other))
195195
}
196196
}
197-
198-
#[cfg(test)]
199-
mod tests {
200-
use super::*;
201-
use approx::assert_abs_diff_eq;
202-
use ndarray::*;
203-
use ndarray_rand::RandomExt;
204-
use rand::distributions::Uniform;
205-
use std::f64;
206-
207-
#[test]
208-
fn test_count_eq() {
209-
let a = array![0., 0.];
210-
let b = array![1., 0.];
211-
let c = array![0., 1.];
212-
let d = array![1., 1.];
213-
214-
assert_eq!(a.count_eq(&a), 2);
215-
assert_eq!(a.count_eq(&b), 1);
216-
assert_eq!(a.count_eq(&c), 1);
217-
assert_eq!(a.count_eq(&d), 0);
218-
}
219-
220-
#[test]
221-
fn test_count_neq() {
222-
let a = array![0., 0.];
223-
let b = array![1., 0.];
224-
let c = array![0., 1.];
225-
let d = array![1., 1.];
226-
227-
assert_eq!(a.count_neq(&a), 0);
228-
assert_eq!(a.count_neq(&b), 1);
229-
assert_eq!(a.count_neq(&c), 1);
230-
assert_eq!(a.count_neq(&d), 2);
231-
}
232-
233-
#[test]
234-
fn test_sq_l2_dist() {
235-
let a = array![0., 1., 4., 2.];
236-
let b = array![1., 1., 2., 4.];
237-
238-
assert_eq!(a.sq_l2_dist(&b), 9.);
239-
}
240-
241-
#[test]
242-
fn test_l2_dist() {
243-
let a = array![0., 1., 4., 2.];
244-
let b = array![1., 1., 2., 4.];
245-
246-
assert_eq!(a.l2_dist(&b), 3.);
247-
}
248-
249-
#[test]
250-
fn test_l1_dist() {
251-
let a = array![0., 1., 4., 2.];
252-
let b = array![1., 1., 2., 4.];
253-
254-
assert_eq!(a.l1_dist(&b), 5.);
255-
}
256-
257-
#[test]
258-
fn test_linf_dist() {
259-
let a = array![0., 0.];
260-
let b = array![1., 0.];
261-
let c = array![1., 2.];
262-
263-
assert_eq!(a.linf_dist(&a), 0.);
264-
265-
assert_eq!(a.linf_dist(&b), 1.);
266-
assert_eq!(b.linf_dist(&a), 1.);
267-
268-
assert_eq!(a.linf_dist(&c), 2.);
269-
assert_eq!(c.linf_dist(&a), 2.);
270-
}
271-
272-
#[test]
273-
fn test_gkl_div() {
274-
let a = Array::random((5,), Uniform::new(0., 1.));
275-
let b = Array::random((5,), Uniform::new(1., 2.));
276-
let c = Array::random((5,), Uniform::new(-1., 0.));
277-
278-
assert_eq!(a.gkl_div(&a), 0.);
279-
assert!(a.gkl_div(&b) > 0.);
280-
assert!(b.gkl_div(&a) > 0.);
281-
assert_ne!(a.gkl_div(&b), b.gkl_div(&a));
282-
283-
// TODO: what is the sign check logic doing in StatsBase.jl impl?
284-
assert!(f64::is_nan(a.gkl_div(&c)));
285-
}
286-
287-
#[test]
288-
fn test_mean_abs_dev() {
289-
let a = array![1., 1.];
290-
let b = array![3., 5.];
291-
292-
assert_eq!(a.mean_abs_dev(&a), 0.);
293-
assert_eq!(a.mean_abs_dev(&b), 3.);
294-
assert_eq!(b.mean_abs_dev(&a), 3.);
295-
}
296-
297-
#[test]
298-
fn test_max_abs_dev() {
299-
// This is effectively an alias for linf_dist, so not retesting deeply
300-
let a = array![0., 0.];
301-
let b = array![2., 4.];
302-
303-
assert_eq!(a.max_abs_dev(&a), 0.);
304-
assert_eq!(a.max_abs_dev(&b), 4.);
305-
assert_eq!(b.max_abs_dev(&a), 4.);
306-
}
307-
308-
#[test]
309-
fn test_mean_sq_dev() {
310-
let a = array![1., 1.];
311-
let b = array![3., 5.];
312-
313-
assert_eq!(a.mean_sq_dev(&a), 0.);
314-
assert_eq!(a.mean_sq_dev(&b), 10.);
315-
assert_eq!(b.mean_sq_dev(&a), 10.);
316-
}
317-
318-
#[test]
319-
fn test_root_mean_sq_dev() {
320-
let a = array![1., 1.];
321-
let b = array![3., 5.];
322-
323-
assert_eq!(a.root_mean_sq_dev(&a), 0.);
324-
assert_abs_diff_eq!(a.root_mean_sq_dev(&b), 10.0.sqrt());
325-
assert_abs_diff_eq!(b.root_mean_sq_dev(&a), 10.0.sqrt());
326-
}
327-
328-
#[test]
329-
fn test_peak_signal_to_noise_ratio() {
330-
let a = array![1., 1.];
331-
assert!(a.peak_signal_to_noise_ratio(&a, 1.).is_infinite());
332-
333-
let a = array![1., 2., 3., 4., 5., 6., 7.];
334-
let b = array![1., 3., 3., 4., 6., 7., 8.];
335-
let maxv = 8.;
336-
let expected = 20. * Float::log10(maxv) - 10. * Float::log10(a.mean_sq_dev(&b));
337-
let actual = a.peak_signal_to_noise_ratio(&b, maxv);
338-
339-
assert_abs_diff_eq!(actual, expected);
340-
}
341-
342-
#[test]
343-
fn test_deviations_with_n_by_m_ints() {
344-
let a = array![[0, 1], [4, 2]];
345-
let b = array![[1, 1], [2, 4]];
346-
347-
assert_eq!(a.count_eq(&a), 4);
348-
assert_eq!(a.count_neq(&a), 0);
349-
assert_eq!(a.sq_l2_dist(&b), 9);
350-
assert_eq!(a.l2_dist(&b), 3.);
351-
assert_eq!(a.l1_dist(&b), 5);
352-
assert_eq!(a.linf_dist(&b), 2);
353-
354-
assert_abs_diff_eq!(a.mean_abs_dev(&b), 1.25);
355-
assert_eq!(a.max_abs_dev(&b), 2);
356-
assert_abs_diff_eq!(a.mean_sq_dev(&b), 2.25);
357-
assert_abs_diff_eq!(a.root_mean_sq_dev(&b), 1.5);
358-
assert_abs_diff_eq!(
359-
a.peak_signal_to_noise_ratio(&b, 4),
360-
8.519374645445623,
361-
epsilon = f64::EPSILON
362-
);
363-
364-
// TODO: gkl_div
365-
}
366-
367-
#[test]
368-
fn test_deviations_with_empty_inputs() {
369-
let a: Array1<f64> = array![];
370-
371-
assert_eq!(a.count_eq(&a), 0);
372-
assert_eq!(a.count_neq(&a), 0);
373-
assert_eq!(a.sq_l2_dist(&a), 0.);
374-
assert_eq!(a.l2_dist(&a), 0.);
375-
assert_eq!(a.l1_dist(&a), 0.);
376-
assert_eq!(a.linf_dist(&a), 0.);
377-
378-
assert!(a.mean_abs_dev(&a).is_nan());
379-
assert_eq!(a.max_abs_dev(&a), 0.);
380-
assert!(a.mean_sq_dev(&a).is_nan());
381-
assert!(a.root_mean_sq_dev(&a).is_nan());
382-
assert!(a.peak_signal_to_noise_ratio(&a, 0.).is_nan());
383-
384-
// TODO: gkl_div
385-
}
386-
}

tests/deviation.rs

+189
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
use ndarray_stats::DeviationExt;
2+
3+
use approx::assert_abs_diff_eq;
4+
use ndarray::{array, Array, Array1};
5+
use ndarray_rand::RandomExt;
6+
use num_traits::Float;
7+
use rand::distributions::Uniform;
8+
9+
use std::f64;
10+
11+
#[test]
12+
fn test_count_eq() {
13+
let a = array![0., 0.];
14+
let b = array![1., 0.];
15+
let c = array![0., 1.];
16+
let d = array![1., 1.];
17+
18+
assert_eq!(a.count_eq(&a), 2);
19+
assert_eq!(a.count_eq(&b), 1);
20+
assert_eq!(a.count_eq(&c), 1);
21+
assert_eq!(a.count_eq(&d), 0);
22+
}
23+
24+
#[test]
25+
fn test_count_neq() {
26+
let a = array![0., 0.];
27+
let b = array![1., 0.];
28+
let c = array![0., 1.];
29+
let d = array![1., 1.];
30+
31+
assert_eq!(a.count_neq(&a), 0);
32+
assert_eq!(a.count_neq(&b), 1);
33+
assert_eq!(a.count_neq(&c), 1);
34+
assert_eq!(a.count_neq(&d), 2);
35+
}
36+
37+
#[test]
38+
fn test_sq_l2_dist() {
39+
let a = array![0., 1., 4., 2.];
40+
let b = array![1., 1., 2., 4.];
41+
42+
assert_eq!(a.sq_l2_dist(&b), 9.);
43+
}
44+
45+
#[test]
46+
fn test_l2_dist() {
47+
let a = array![0., 1., 4., 2.];
48+
let b = array![1., 1., 2., 4.];
49+
50+
assert_eq!(a.l2_dist(&b), 3.);
51+
}
52+
53+
#[test]
54+
fn test_l1_dist() {
55+
let a = array![0., 1., 4., 2.];
56+
let b = array![1., 1., 2., 4.];
57+
58+
assert_eq!(a.l1_dist(&b), 5.);
59+
}
60+
61+
#[test]
62+
fn test_linf_dist() {
63+
let a = array![0., 0.];
64+
let b = array![1., 0.];
65+
let c = array![1., 2.];
66+
67+
assert_eq!(a.linf_dist(&a), 0.);
68+
69+
assert_eq!(a.linf_dist(&b), 1.);
70+
assert_eq!(b.linf_dist(&a), 1.);
71+
72+
assert_eq!(a.linf_dist(&c), 2.);
73+
assert_eq!(c.linf_dist(&a), 2.);
74+
}
75+
76+
#[test]
77+
fn test_gkl_div() {
78+
let a = Array::random((5,), Uniform::new(0., 1.));
79+
let b = Array::random((5,), Uniform::new(1., 2.));
80+
let c = Array::random((5,), Uniform::new(-1., 0.));
81+
82+
assert_eq!(a.gkl_div(&a), 0.);
83+
assert!(a.gkl_div(&b) > 0.);
84+
assert!(b.gkl_div(&a) > 0.);
85+
assert_ne!(a.gkl_div(&b), b.gkl_div(&a));
86+
87+
// TODO: what is the sign check logic doing in StatsBase.jl impl?
88+
assert!(f64::is_nan(a.gkl_div(&c)));
89+
}
90+
91+
#[test]
92+
fn test_mean_abs_dev() {
93+
let a = array![1., 1.];
94+
let b = array![3., 5.];
95+
96+
assert_eq!(a.mean_abs_dev(&a), 0.);
97+
assert_eq!(a.mean_abs_dev(&b), 3.);
98+
assert_eq!(b.mean_abs_dev(&a), 3.);
99+
}
100+
101+
#[test]
102+
fn test_max_abs_dev() {
103+
// This is effectively an alias for linf_dist, so not retesting deeply
104+
let a = array![0., 0.];
105+
let b = array![2., 4.];
106+
107+
assert_eq!(a.max_abs_dev(&a), 0.);
108+
assert_eq!(a.max_abs_dev(&b), 4.);
109+
assert_eq!(b.max_abs_dev(&a), 4.);
110+
}
111+
112+
#[test]
113+
fn test_mean_sq_dev() {
114+
let a = array![1., 1.];
115+
let b = array![3., 5.];
116+
117+
assert_eq!(a.mean_sq_dev(&a), 0.);
118+
assert_eq!(a.mean_sq_dev(&b), 10.);
119+
assert_eq!(b.mean_sq_dev(&a), 10.);
120+
}
121+
122+
#[test]
123+
fn test_root_mean_sq_dev() {
124+
let a = array![1., 1.];
125+
let b = array![3., 5.];
126+
127+
assert_eq!(a.root_mean_sq_dev(&a), 0.);
128+
assert_abs_diff_eq!(a.root_mean_sq_dev(&b), 10.0.sqrt());
129+
assert_abs_diff_eq!(b.root_mean_sq_dev(&a), 10.0.sqrt());
130+
}
131+
132+
#[test]
133+
fn test_peak_signal_to_noise_ratio() {
134+
let a = array![1., 1.];
135+
assert!(a.peak_signal_to_noise_ratio(&a, 1.).is_infinite());
136+
137+
let a = array![1., 2., 3., 4., 5., 6., 7.];
138+
let b = array![1., 3., 3., 4., 6., 7., 8.];
139+
let maxv = 8.;
140+
let expected = 20. * Float::log10(maxv) - 10. * Float::log10(a.mean_sq_dev(&b));
141+
let actual = a.peak_signal_to_noise_ratio(&b, maxv);
142+
143+
assert_abs_diff_eq!(actual, expected);
144+
}
145+
146+
#[test]
147+
fn test_deviations_with_n_by_m_ints() {
148+
let a = array![[0, 1], [4, 2]];
149+
let b = array![[1, 1], [2, 4]];
150+
151+
assert_eq!(a.count_eq(&a), 4);
152+
assert_eq!(a.count_neq(&a), 0);
153+
assert_eq!(a.sq_l2_dist(&b), 9);
154+
assert_eq!(a.l2_dist(&b), 3.);
155+
assert_eq!(a.l1_dist(&b), 5);
156+
assert_eq!(a.linf_dist(&b), 2);
157+
158+
assert_abs_diff_eq!(a.mean_abs_dev(&b), 1.25);
159+
assert_eq!(a.max_abs_dev(&b), 2);
160+
assert_abs_diff_eq!(a.mean_sq_dev(&b), 2.25);
161+
assert_abs_diff_eq!(a.root_mean_sq_dev(&b), 1.5);
162+
assert_abs_diff_eq!(
163+
a.peak_signal_to_noise_ratio(&b, 4),
164+
8.519374645445623,
165+
epsilon = f64::EPSILON
166+
);
167+
168+
// TODO: gkl_div
169+
}
170+
171+
#[test]
172+
fn test_deviations_with_empty_inputs() {
173+
let a: Array1<f64> = array![];
174+
175+
assert_eq!(a.count_eq(&a), 0);
176+
assert_eq!(a.count_neq(&a), 0);
177+
assert_eq!(a.sq_l2_dist(&a), 0.);
178+
assert_eq!(a.l2_dist(&a), 0.);
179+
assert_eq!(a.l1_dist(&a), 0.);
180+
assert_eq!(a.linf_dist(&a), 0.);
181+
182+
assert!(a.mean_abs_dev(&a).is_nan());
183+
assert_eq!(a.max_abs_dev(&a), 0.);
184+
assert!(a.mean_sq_dev(&a).is_nan());
185+
assert!(a.root_mean_sq_dev(&a).is_nan());
186+
assert!(a.peak_signal_to_noise_ratio(&a, 0.).is_nan());
187+
188+
// TODO: gkl_div
189+
}

0 commit comments

Comments
 (0)