use orx_parallel::*;
type Order = (u32, u64);
fn pending_orders() -> Vec<Order> {
(1..=1000).map(|id| (id, 1_000 + id as u64 * 10)).collect()
}
fn main() {
let mut queue: Vec<Order> = pending_orders();
let total_in_queue: u64 = queue.iter().map(|(_, amt)| amt).sum();
let batch_size = 200;
let batch_total: u64 = queue
.par_drain(..batch_size)
.map(|(_, amount)| amount)
.reduce(|a, b| a + b)
.unwrap_or(0);
assert_eq!(queue.len(), 1000 - batch_size);
let remaining_total: u64 = queue.iter().map(|(_, amt)| amt).sum();
assert_eq!(batch_total + remaining_total, total_in_queue);
}