tests for multiple tx and rx

main
pantonshire 2 years ago
parent 3d65cf3329
commit acc6bae9ca

@ -736,7 +736,7 @@ struct CountOverflowError;
#[cfg(test)]
mod tests {
use std::{time::Duration, thread};
use std::{time::{Duration, Instant}, thread};
use super::{debouncer, fold};
@ -773,4 +773,58 @@ mod tests {
assert_eq!(rx.recv().unwrap(), &[1, 2, 3]);
assert!(rx.recv().is_err());
}
#[test]
fn test_multi_tx() {
let (tx1, rx) = debouncer(Duration::from_millis(100), fold::fold_vec_push::<u8>);
let tx2 = tx1.clone();
tx1.send(1).unwrap();
tx2.send(2).unwrap();
assert_eq!(rx.recv().unwrap(), &[1, 2]);
drop(tx1);
tx2.send(3).unwrap();
tx2.send(4).unwrap();
assert_eq!(rx.recv().unwrap(), &[3, 4]);
let start_time = Instant::now();
tx2.send(5).unwrap();
tx2.send(6).unwrap();
assert_eq!(rx.recv().unwrap(), &[5, 6]);
assert!(Instant::now().duration_since(start_time) >= Duration::from_millis(100));
tx2.send(7).unwrap();
tx2.send(8).unwrap();
drop(tx2);
assert_eq!(rx.recv().unwrap(), &[7, 8]);
assert!(rx.recv().is_err());
}
#[test]
fn test_multi_rx() {
let (tx, rx1) = debouncer(Duration::from_millis(100), fold::fold_vec_push::<u8>);
let rx2 = rx1.clone();
tx.send(1).unwrap();
tx.send(2).unwrap();
assert_eq!(rx1.recv().unwrap(), &[1, 2]);
tx.send(3).unwrap();
tx.send(4).unwrap();
assert_eq!(rx2.recv().unwrap(), &[3, 4]);
drop(rx1);
tx.send(5).unwrap();
tx.send(6).unwrap();
assert_eq!(rx2.recv().unwrap(), &[5, 6]);
drop(rx2);
assert!(tx.send(7).is_err());
}
}

Loading…
Cancel
Save