//! let (tx1, rx1) = channel();
//! let (tx2, rx2) = channel();
//!
-//! tx1.send(1);
-//! tx2.send(2);
+//! tx1.send(1i);
+//! tx2.send(2i);
//!
//! select! {
//! val = rx1.recv() => {
-//! assert_eq!(val, 1);
+//! assert_eq!(val, 1i);
//! },
//! val = rx2.recv() => {
-//! assert_eq!(val, 2);
+//! assert_eq!(val, 2i);
//! }
//! }
//! ```
#![allow(dead_code)]
+#![experimental = "This implementation, while likely sufficient, is unsafe and \
+ likely to be error prone. At some point in the future this \
+ module will likely be replaced, and it is currently \
+ unknown how much API breakage that will cause. The ability \
+ to select over a number of channels will remain forever, \
+ but no guarantees beyond this are being made"]
+
use core::prelude::*;
-use alloc::owned::Box;
+use alloc::boxed::Box;
use core::cell::Cell;
use core::kinds::marker;
use core::mem;
/// event could either be that data is available or the corresponding
/// channel has been closed.
pub fn wait(&self) -> uint {
- self.wait2(false)
+ self.wait2(true)
}
/// Helper method for skipping the preflight checks during testing
let (tx3, rx3) = channel::<int>();
spawn(proc() {
- for _ in range(0, 20) { task::deschedule(); }
+ for _ in range(0u, 20) { task::deschedule(); }
tx1.send(1);
rx3.recv();
- for _ in range(0, 20) { task::deschedule(); }
+ for _ in range(0u, 20) { task::deschedule(); }
});
select! (
let (tx3, rx3) = channel::<()>();
spawn(proc() {
- for _ in range(0, 20) { task::deschedule(); }
+ for _ in range(0u, 20) { task::deschedule(); }
tx1.send(1);
tx2.send(2);
rx3.recv();
tx3.send(());
});
- for _ in range(0, 1000) { task::deschedule(); }
+ for _ in range(0u, 1000) { task::deschedule(); }
drop(tx1.clone());
tx2.send(());
rx3.recv();
tx2.send(());
});
- for _ in range(0, 100) { task::deschedule() }
+ for _ in range(0u, 100) { task::deschedule() }
tx1.send(());
rx2.recv();
})
tx2.send(());
});
- for _ in range(0, 100) { task::deschedule() }
+ for _ in range(0u, 100) { task::deschedule() }
tx1.send(());
rx2.recv();
})
tx2.send(());
});
- for _ in range(0, 100) { task::deschedule() }
+ for _ in range(0u, 100) { task::deschedule() }
tx1.send(());
rx2.recv();
})
test!(fn sync1() {
- let (tx, rx) = sync_channel(1);
+ let (tx, rx) = sync_channel::<int>(1);
tx.send(1);
select! {
n = rx.recv() => { assert_eq!(n, 1); }
})
test!(fn sync2() {
- let (tx, rx) = sync_channel(0);
+ let (tx, rx) = sync_channel::<int>(0);
spawn(proc() {
- for _ in range(0, 100) { task::deschedule() }
+ for _ in range(0u, 100) { task::deschedule() }
tx.send(1);
});
select! {
})
test!(fn sync3() {
- let (tx1, rx1) = sync_channel(0);
- let (tx2, rx2) = channel();
+ let (tx1, rx1) = sync_channel::<int>(0);
+ let (tx2, rx2): (Sender<int>, Receiver<int>) = channel();
spawn(proc() { tx1.send(1); });
spawn(proc() { tx2.send(2); });
select! {