Skip to content

Commit f160567

Browse files
committed
Replace quickcheck! with #[quickcheck]
1 parent 6be6646 commit f160567

File tree

4 files changed

+146
-148
lines changed

4 files changed

+146
-148
lines changed

src/correlation.rs

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -171,31 +171,31 @@ mod cov_tests {
171171
use super::*;
172172
use ndarray::array;
173173
use ndarray_rand::RandomExt;
174-
use quickcheck::quickcheck;
174+
use quickcheck_macros::quickcheck;
175175
use rand;
176176
use rand::distributions::Uniform;
177177

178-
quickcheck! {
179-
fn constant_random_variables_have_zero_covariance_matrix(value: f64) -> bool {
180-
let n_random_variables = 3;
181-
let n_observations = 4;
182-
let a = Array::from_elem((n_random_variables, n_observations), value);
183-
a.cov(1.).all_close(
184-
&Array::zeros((n_random_variables, n_random_variables)),
185-
1e-8
186-
)
187-
}
178+
#[quickcheck]
179+
fn constant_random_variables_have_zero_covariance_matrix(value: f64) -> bool {
180+
let n_random_variables = 3;
181+
let n_observations = 4;
182+
let a = Array::from_elem((n_random_variables, n_observations), value);
183+
a.cov(1.).all_close(
184+
&Array::zeros((n_random_variables, n_random_variables)),
185+
1e-8
186+
)
187+
}
188188

189-
fn covariance_matrix_is_symmetric(bound: f64) -> bool {
190-
let n_random_variables = 3;
191-
let n_observations = 4;
192-
let a = Array::random(
193-
(n_random_variables, n_observations),
194-
Uniform::new(-bound.abs(), bound.abs())
195-
);
196-
let covariance = a.cov(1.);
197-
covariance.all_close(&covariance.t(), 1e-8)
198-
}
189+
#[quickcheck]
190+
fn covariance_matrix_is_symmetric(bound: f64) -> bool {
191+
let n_random_variables = 3;
192+
let n_observations = 4;
193+
let a = Array::random(
194+
(n_random_variables, n_observations),
195+
Uniform::new(-bound.abs(), bound.abs())
196+
);
197+
let covariance = a.cov(1.);
198+
covariance.all_close(&covariance.t(), 1e-8)
199199
}
200200

201201
#[test]
@@ -273,28 +273,28 @@ mod pearson_correlation_tests {
273273
use super::*;
274274
use ndarray::array;
275275
use ndarray_rand::RandomExt;
276-
use quickcheck::quickcheck;
276+
use quickcheck_macros::quickcheck;
277277
use rand::distributions::Uniform;
278278

279-
quickcheck! {
280-
fn output_matrix_is_symmetric(bound: f64) -> bool {
281-
let n_random_variables = 3;
282-
let n_observations = 4;
283-
let a = Array::random(
284-
(n_random_variables, n_observations),
285-
Uniform::new(-bound.abs(), bound.abs())
286-
);
287-
let pearson_correlation = a.pearson_correlation();
288-
pearson_correlation.all_close(&pearson_correlation.t(), 1e-8)
289-
}
279+
#[quickcheck]
280+
fn output_matrix_is_symmetric(bound: f64) -> bool {
281+
let n_random_variables = 3;
282+
let n_observations = 4;
283+
let a = Array::random(
284+
(n_random_variables, n_observations),
285+
Uniform::new(-bound.abs(), bound.abs())
286+
);
287+
let pearson_correlation = a.pearson_correlation();
288+
pearson_correlation.all_close(&pearson_correlation.t(), 1e-8)
289+
}
290290

291-
fn constant_random_variables_have_nan_correlation(value: f64) -> bool {
292-
let n_random_variables = 3;
293-
let n_observations = 4;
294-
let a = Array::from_elem((n_random_variables, n_observations), value);
295-
let pearson_correlation = a.pearson_correlation();
296-
pearson_correlation.iter().map(|x| x.is_nan()).fold(true, |acc, flag| acc & flag)
297-
}
291+
#[quickcheck]
292+
fn constant_random_variables_have_nan_correlation(value: f64) -> bool {
293+
let n_random_variables = 3;
294+
let n_observations = 4;
295+
let a = Array::from_elem((n_random_variables, n_observations), value);
296+
let pearson_correlation = a.pearson_correlation();
297+
pearson_correlation.iter().map(|x| x.is_nan()).fold(true, |acc, flag| acc & flag)
298298
}
299299

300300
#[test]

src/histogram/bins.rs

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -351,68 +351,71 @@ impl<A: Ord> Bins<A> {
351351
#[cfg(test)]
352352
mod edges_tests {
353353
use super::*;
354-
use quickcheck::quickcheck;
354+
use quickcheck_macros::quickcheck;
355355
use std::collections::BTreeSet;
356356
use std::iter::FromIterator;
357357

358-
quickcheck! {
359-
fn check_sorted_from_vec(v: Vec<i32>) -> bool {
360-
let edges = Edges::from(v);
361-
let n = edges.len();
362-
for i in 1..n {
363-
if edges[i-1] > edges[i] {
364-
return false;
365-
}
358+
#[quickcheck]
359+
fn check_sorted_from_vec(v: Vec<i32>) -> bool {
360+
let edges = Edges::from(v);
361+
let n = edges.len();
362+
for i in 1..n {
363+
if edges[i-1] > edges[i] {
364+
return false;
366365
}
367-
true
368366
}
367+
true
368+
}
369369

370-
fn check_sorted_from_array(v: Vec<i32>) -> bool {
371-
let a = Array1::from_vec(v);
372-
let edges = Edges::from(a);
373-
let n = edges.len();
374-
for i in 1..n {
375-
if edges[i-1] > edges[i] {
376-
return false;
377-
}
370+
#[quickcheck]
371+
fn check_sorted_from_array(v: Vec<i32>) -> bool {
372+
let a = Array1::from_vec(v);
373+
let edges = Edges::from(a);
374+
let n = edges.len();
375+
for i in 1..n {
376+
if edges[i-1] > edges[i] {
377+
return false;
378378
}
379-
true
380379
}
380+
true
381+
}
381382

382-
fn edges_are_right_exclusive(v: Vec<i32>) -> bool {
383-
let edges = Edges::from(v);
384-
let view = edges.as_array_view();
385-
if view.len() == 0 {
386-
true
387-
} else {
388-
let last = view[view.len()-1];
389-
edges.indices_of(&last).is_none()
390-
}
383+
#[quickcheck]
384+
fn edges_are_right_exclusive(v: Vec<i32>) -> bool {
385+
let edges = Edges::from(v);
386+
let view = edges.as_array_view();
387+
if view.len() == 0 {
388+
true
389+
} else {
390+
let last = view[view.len()-1];
391+
edges.indices_of(&last).is_none()
391392
}
393+
}
392394

393-
fn edges_are_left_inclusive(v: Vec<i32>) -> bool {
394-
let edges = Edges::from(v);
395-
match edges.len() {
396-
1 => true,
397-
_ => {
398-
let view = edges.as_array_view();
399-
if view.len() == 0 {
400-
true
401-
} else {
402-
let first = view[0];
403-
edges.indices_of(&first).is_some()
404-
}
395+
#[quickcheck]
396+
fn edges_are_left_inclusive(v: Vec<i32>) -> bool {
397+
let edges = Edges::from(v);
398+
match edges.len() {
399+
1 => true,
400+
_ => {
401+
let view = edges.as_array_view();
402+
if view.len() == 0 {
403+
true
404+
} else {
405+
let first = view[0];
406+
edges.indices_of(&first).is_some()
405407
}
406408
}
407409
}
410+
}
408411

409-
fn edges_are_deduped(v: Vec<i32>) -> bool {
410-
let unique_elements = BTreeSet::from_iter(v.iter());
411-
let edges = Edges::from(v.clone());
412-
let view = edges.as_array_view();
413-
let unique_edges = BTreeSet::from_iter(view.iter());
414-
unique_edges == unique_elements
415-
}
412+
#[quickcheck]
413+
fn edges_are_deduped(v: Vec<i32>) -> bool {
414+
let unique_elements = BTreeSet::from_iter(v.iter());
415+
let edges = Edges::from(v.clone());
416+
let view = edges.as_array_view();
417+
let unique_edges = BTreeSet::from_iter(view.iter());
418+
unique_edges == unique_elements
416419
}
417420
}
418421

src/maybe_nan/mod.rs

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -370,37 +370,38 @@ where
370370
#[cfg(test)]
371371
mod tests {
372372
use super::*;
373-
use quickcheck::quickcheck;
374-
375-
quickcheck! {
376-
fn remove_nan_mut_idempotent(is_nan: Vec<bool>) -> bool {
377-
let mut values: Vec<_> = is_nan
378-
.into_iter()
379-
.map(|is_nan| if is_nan { None } else { Some(1) })
380-
.collect();
381-
let view = ArrayViewMut1::from_shape(values.len(), &mut values).unwrap();
382-
let removed = remove_nan_mut(view);
383-
removed == remove_nan_mut(removed.to_owned().view_mut())
384-
}
373+
use quickcheck_macros::quickcheck;
374+
375+
#[quickcheck]
376+
fn remove_nan_mut_idempotent(is_nan: Vec<bool>) -> bool {
377+
let mut values: Vec<_> = is_nan
378+
.into_iter()
379+
.map(|is_nan| if is_nan { None } else { Some(1) })
380+
.collect();
381+
let view = ArrayViewMut1::from_shape(values.len(), &mut values).unwrap();
382+
let removed = remove_nan_mut(view);
383+
removed == remove_nan_mut(removed.to_owned().view_mut())
384+
}
385385

386-
fn remove_nan_mut_only_nan_remaining(is_nan: Vec<bool>) -> bool {
387-
let mut values: Vec<_> = is_nan
388-
.into_iter()
389-
.map(|is_nan| if is_nan { None } else { Some(1) })
390-
.collect();
391-
let view = ArrayViewMut1::from_shape(values.len(), &mut values).unwrap();
392-
remove_nan_mut(view).iter().all(|elem| !elem.is_nan())
393-
}
386+
#[quickcheck]
387+
fn remove_nan_mut_only_nan_remaining(is_nan: Vec<bool>) -> bool {
388+
let mut values: Vec<_> = is_nan
389+
.into_iter()
390+
.map(|is_nan| if is_nan { None } else { Some(1) })
391+
.collect();
392+
let view = ArrayViewMut1::from_shape(values.len(), &mut values).unwrap();
393+
remove_nan_mut(view).iter().all(|elem| !elem.is_nan())
394+
}
394395

395-
fn remove_nan_mut_keep_all_non_nan(is_nan: Vec<bool>) -> bool {
396-
let non_nan_count = is_nan.iter().filter(|&&is_nan| !is_nan).count();
397-
let mut values: Vec<_> = is_nan
398-
.into_iter()
399-
.map(|is_nan| if is_nan { None } else { Some(1) })
400-
.collect();
401-
let view = ArrayViewMut1::from_shape(values.len(), &mut values).unwrap();
402-
remove_nan_mut(view).len() == non_nan_count
403-
}
396+
#[quickcheck]
397+
fn remove_nan_mut_keep_all_non_nan(is_nan: Vec<bool>) -> bool {
398+
let non_nan_count = is_nan.iter().filter(|&&is_nan| !is_nan).count();
399+
let mut values: Vec<_> = is_nan
400+
.into_iter()
401+
.map(|is_nan| if is_nan { None } else { Some(1) })
402+
.collect();
403+
let view = ArrayViewMut1::from_shape(values.len(), &mut values).unwrap();
404+
remove_nan_mut(view).len() == non_nan_count
404405
}
405406
}
406407

tests/quantile.rs

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ extern crate itertools;
22
extern crate ndarray;
33
extern crate ndarray_stats;
44
extern crate noisy_float;
5-
#[macro_use]
6-
extern crate quickcheck;
75
extern crate quickcheck_macros;
86

97
use itertools::izip;
@@ -32,11 +30,10 @@ fn test_argmin() {
3230
assert_eq!(a.argmin(), Err(MinMaxError::EmptyInput));
3331
}
3432

35-
quickcheck! {
36-
fn argmin_matches_min(data: Vec<f32>) -> bool {
37-
let a = Array1::from(data);
38-
a.argmin().map(|i| &a[i]) == a.min()
39-
}
33+
#[quickcheck]
34+
fn argmin_matches_min(data: Vec<f32>) -> bool {
35+
let a = Array1::from(data);
36+
a.argmin().map(|i| &a[i]) == a.min()
4037
}
4138

4239
#[test]
@@ -57,16 +54,15 @@ fn test_argmin_skipnan() {
5754
assert_eq!(a.argmin_skipnan(), Err(MinMaxError::EmptyInput));
5855
}
5956

60-
quickcheck! {
61-
fn argmin_skipnan_matches_min_skipnan(data: Vec<Option<i32>>) -> bool {
62-
let a = Array1::from(data);
63-
let min = a.min_skipnan();
64-
let argmin = a.argmin_skipnan();
65-
if min.is_none() {
66-
argmin == Err(MinMaxError::EmptyInput)
67-
} else {
68-
a[argmin.unwrap()] == *min
69-
}
57+
#[quickcheck]
58+
fn argmin_skipnan_matches_min_skipnan(data: Vec<Option<i32>>) -> bool {
59+
let a = Array1::from(data);
60+
let min = a.min_skipnan();
61+
let argmin = a.argmin_skipnan();
62+
if min.is_none() {
63+
argmin == Err(MinMaxError::EmptyInput)
64+
} else {
65+
a[argmin.unwrap()] == *min
7066
}
7167
}
7268

@@ -112,11 +108,10 @@ fn test_argmax() {
112108
assert_eq!(a.argmax(), Err(MinMaxError::EmptyInput));
113109
}
114110

115-
quickcheck! {
116-
fn argmax_matches_max(data: Vec<f32>) -> bool {
117-
let a = Array1::from(data);
118-
a.argmax().map(|i| &a[i]) == a.max()
119-
}
111+
#[quickcheck]
112+
fn argmax_matches_max(data: Vec<f32>) -> bool {
113+
let a = Array1::from(data);
114+
a.argmax().map(|i| &a[i]) == a.max()
120115
}
121116

122117
#[test]
@@ -140,16 +135,15 @@ fn test_argmax_skipnan() {
140135
assert_eq!(a.argmax_skipnan(), Err(MinMaxError::EmptyInput));
141136
}
142137

143-
quickcheck! {
144-
fn argmax_skipnan_matches_max_skipnan(data: Vec<Option<i32>>) -> bool {
145-
let a = Array1::from(data);
146-
let max = a.max_skipnan();
147-
let argmax = a.argmax_skipnan();
148-
if max.is_none() {
149-
argmax == Err(MinMaxError::EmptyInput)
150-
} else {
151-
a[argmax.unwrap()] == *max
152-
}
138+
#[quickcheck]
139+
fn argmax_skipnan_matches_max_skipnan(data: Vec<Option<i32>>) -> bool {
140+
let a = Array1::from(data);
141+
let max = a.max_skipnan();
142+
let argmax = a.argmax_skipnan();
143+
if max.is_none() {
144+
argmax == Err(MinMaxError::EmptyInput)
145+
} else {
146+
a[argmax.unwrap()] == *max
153147
}
154148
}
155149

0 commit comments

Comments
 (0)