use std::thread;
use super::*;
#[test]
fn test_sync() {
let (sender, receiver) = trigger();
sender.activate(42);
assert_eq!(receiver.wait(), Some(42));
sender.activate(43);
assert_eq!(receiver.wait(), Some(43));
drop(sender);
assert_eq!(receiver.wait(), None);
}
#[test]
fn test_preserve_value_after_disconnect() {
let (sender, receiver) = trigger();
sender.activate(43);
drop(sender);
assert_eq!(receiver.wait(), Some(43));
}
#[test]
fn test_threaded() {
let (sender, receiver) = trigger();
thread::scope(|s| {
s.spawn(move || {
for i in 0..10_000 {
sender.activate(i);
}
});
s.spawn(move || {
let past_i = -1;
while let Some(i) = receiver.wait() {
assert!(i > past_i);
}
});
});
}
#[test]
fn test_drop_receiver() {
let (sender, receiver) = trigger();
drop(receiver);
sender.activate(42);
}