#[cfg(feature = "rayon")]
mod rayon_tests {
use dithereens::*;
#[test]
fn test_rayon_dither_iter() {
let values = vec![0.2f32, 0.5, 0.8];
let results = dither_iter(values, 0.0, 255.0, 0.5, 42);
assert_eq!(results.len(), 3);
for &result in &results {
assert!((-1.0..=256.0).contains(&result));
}
}
#[test]
fn test_rayon_simple_dither_iter() {
let values = vec![0.2f32, 0.5, 0.8];
let results = simple_dither_iter(values, 255.0, 42);
assert_eq!(results.len(), 3);
for &result in &results {
assert!((0.0..=255.0).contains(&result));
}
}
#[test]
fn test_rayon_dither_slice() {
let mut values = vec![0.2f32, 0.5, 0.8];
let original_values = values.clone();
dither_slice(&mut values, 0.0, 255.0, 0.5, 42);
assert_eq!(values.len(), 3);
assert_ne!(values, original_values);
for &v in &values {
assert!((0.0..=255.0).contains(&v));
}
}
#[test]
fn test_rayon_simple_dither_slice() {
let mut values = vec![0.2f32, 0.5, 0.8];
let original_values = values.clone();
simple_dither_slice(&mut values, 255.0, 42);
assert_eq!(values.len(), 3);
for &result in &values {
assert!((0.0..=255.0).contains(&result));
}
assert_ne!(values, original_values);
}
#[test]
fn test_rayon_deterministic_results() {
let values = vec![0.1f32, 0.3, 0.7, 0.9];
let results1 = simple_dither_iter(values.clone(), 255.0, 123);
let results2 = simple_dither_iter(values.clone(), 255.0, 123);
assert_eq!(
results1, results2,
"Results should be deterministic with same seed"
);
let results3 = simple_dither_iter(values, 255.0, 456);
assert_ne!(
results1, results3,
"Different seeds should produce different results"
);
}
#[test]
fn test_rayon_large_dataset() {
let values: Vec<f32> = (0..1000).map(|i| i as f32 / 1000.0).collect();
let results = simple_dither_iter(values, 255.0, 42);
assert_eq!(results.len(), 1000);
for &result in &results {
assert!((0.0..=255.0).contains(&result));
}
}
#[test]
fn test_rayon_vs_sequential_consistency() {
let values = vec![0.25f32, 0.5, 0.75];
let seq_results: Vec<f32> = values
.iter()
.enumerate()
.map(|(i, &v)| simple_dither(v, 255.0, i as u32, 42))
.collect();
let par_results = simple_dither_iter(values, 255.0, 42);
assert_eq!(
seq_results, par_results,
"Sequential and parallel versions should produce identical results"
);
for &v in &par_results {
assert!((0.0..=255.0).contains(&v));
}
}
}