extern crate alloc;
use alloc::vec::Vec;
use super::*;
fn make_symmetric_sample() -> (Vec<u8>, Vec<i8>) {
((0..=10).collect(), (-10..=0).collect())
}
#[test]
fn linear_corr_case01() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, 1, 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!(x_idx - y_idx <= 2);
});
assert_eq!(x_idx, 11);
assert_eq!(y_idx, 10);
}
#[test]
fn linear_corr_case02() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, -1, -1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!(y_idx - x_idx <= 2);
});
assert_eq!(x_idx, 10);
assert_eq!(y_idx, 11);
}
#[test]
fn linear_corr_case03() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, 0, 0).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!(y_idx - x_idx <= 1);
});
assert_eq!(x_idx, y_idx);
assert_eq!(x_idx, 0);
}
#[test]
fn linear_corr_case04() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, 1, 0).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!(x_idx - y_idx <= 1);
});
assert_eq!(x_idx, y_idx);
assert_eq!(x_idx, 11);
}
#[test]
fn linear_corr_case05() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, -1, 0).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!(y_idx - x_idx <= 1);
});
assert_eq!(x_idx, y_idx);
assert_eq!(x_idx, 11);
}
#[test]
fn linear_corr_case06() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, -1, 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
assert!(x_idx - y_idx <= 1);
});
assert_eq!(x_idx, y_idx);
assert_eq!(x_idx, 11);
}
#[test]
fn linear_corr_case07() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, 1, -1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
assert!(y_idx - x_idx <= 1);
});
assert_eq!(x_idx, y_idx);
assert_eq!(x_idx, 11);
}
#[test]
fn linear_corr_case08() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, 2, 0).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!((x_idx as f64 / 2f64) as usize - y_idx <= 1);
});
assert_eq!(x_idx, 11);
assert_eq!(y_idx, 5);
}
#[test]
fn linear_corr_case09() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, -2, 0).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!((y_idx as f64 / 2f64) as usize - x_idx <= 1);
});
assert_eq!(y_idx, 11);
assert_eq!(x_idx, 5);
}
#[test]
fn linear_corr_case10() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
(&x).linear_correlate(&y, 2, 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!((x_idx as f64 / 2f64) as usize - y_idx <= 1);
if x_idx < 3 {
assert_eq!(y_idx, 0);
}
});
assert_eq!(x_idx, 11);
assert_eq!(y_idx, 5);
}
#[test]
fn linear_corr_case11() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, 2, -1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
assert!((x_idx as f64 / 2f64) as isize - y_idx <= 1);
if x_idx < 2 {
assert_eq!(y_idx, 1);
}
});
assert_eq!(x_idx, 11);
assert_eq!(y_idx, 6);
}
#[test]
fn linear_corr_case12() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, -2, 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
assert!((y_idx as f64 / 2f64) as isize - x_idx <= 1);
if y_idx < 2 {
assert_eq!(x_idx, 1);
}
});
assert_eq!(y_idx, 11);
assert_eq!(x_idx, 6);
}
#[test]
fn linear_corr_case13() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, -2, -1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
assert!((y_idx as f64 / 2f64) as isize - x_idx <= 1);
if y_idx < 3 {
assert_eq!(x_idx, 0);
}
});
assert_eq!(y_idx, 11);
assert_eq!(x_idx, 5);
}
#[test]
fn linear_corr_case14() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(y.iter(), x.len() + 1, 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
if (x_idx as usize) < x.len() {
assert_eq!(y_idx, 0);
}
});
assert_eq!(x_idx, 11);
assert_eq!(y_idx, 0);
}
#[test]
fn linear_corr_case15() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, 1, x.len() + 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
if (x_idx as usize) < x.len() {
assert_eq!(y_idx, 0);
}
});
assert_eq!(x_idx, 11);
assert_eq!(y_idx, 0);
}
#[test]
fn linear_corr_case16() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, 1, y.len() as isize * -1 - 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
if (y_idx as usize) < y.len() {
assert_eq!(x_idx, 0);
}
});
assert_eq!(y_idx, 11);
assert_eq!(x_idx, 0);
}
#[test]
fn linear_corr_case17() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0isize;
let mut y_idx = 0isize;
(&x).linear_correlate(&y, y.len() as isize * -1 - 1, 1).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx as usize]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx as usize]);
y_idx += 1;
}
}
if (y_idx as usize) < y.len() {
assert_eq!(x_idx, 1);
}
});
assert_eq!(y_idx, 11);
assert_eq!(x_idx, 1);
}
#[test]
fn corr_with_case01() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
x.iter().correlate_with(&y, |v| {
v.is_secondary()
}).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
assert!(x_idx - y_idx <= 1);
});
assert_eq!(x_idx, y_idx);
assert_eq!(x_idx, x.len());
}
#[test]
fn corr_with_case02() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
x.iter().correlate_with(&y, |_| {
true
}).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
});
assert_eq!(x_idx, x.len());
assert_eq!(y_idx, 0);
}
#[test]
fn corr_with_case03() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
x.iter().correlate_with(&y, |_| {
false
}).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
});
assert_eq!(x_idx, 1);
assert_eq!(y_idx, y.len());
}
#[test]
fn corr_with_case04() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
x.iter().correlate_with(&y, |v| {
match v {
Either::Primary(p) => {
**p < 5 },
Either::Secondary(s) => {
**s > -5 }
}
}).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary(v) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
if x_idx <= 5 {
assert_eq!(y_idx, 0);
}
});
assert_eq!(x_idx, x.len());
assert_eq!(y_idx, y.len());
}
#[test]
fn corr_with_case05() {
let (x, y) = make_symmetric_sample();
let mut x_idx = 0;
let mut y_idx = 0;
x.iter().correlate_with(y.iter().enumerate(), |v| {
match v {
Either::Primary(_) => {
false },
Either::Secondary((i, _)) => {
i % 2 == 1 }
}
}).for_each(|either| {
match either {
Either::Primary(v) => {
assert_eq!(*v, x[x_idx]);
x_idx += 1;
},
Either::Secondary((_, v)) => {
assert_eq!(*v, y[y_idx]);
y_idx += 1;
}
}
if x_idx == 1 {
assert!(y_idx <= 2);
} else {
assert!(x_idx - (y_idx as f32 / 2f32) as usize <= 1);
}
});
assert_eq!(x_idx, 6);
assert_eq!(y_idx, y.len());
}