use super::*;
use crate::channel::config::ChannelConfig;
use crate::channel::error::ChannelError;
#[test]
fn test_unified_channel_basic() {
let (sender, receiver) = unified_channel::<i32>(16).unwrap();
sender.send(42).unwrap();
assert_eq!(receiver.recv().unwrap(), 42);
assert!(sender.try_send(100).is_ok());
assert_eq!(receiver.try_recv().unwrap(), 100);
}
#[test]
fn test_unified_channel_batch() {
let config = ChannelConfig {
capacity: 64,
enable_batching: true,
batch_size: 10,
..Default::default()
};
let (sender, receiver) = unified_channel_with_config::<i32>(config).unwrap();
let messages = vec![1, 2, 3, 4, 5];
let sent = sender.send_batch(messages).unwrap();
assert_eq!(sent, 5);
let received = receiver.recv_batch(10);
assert_eq!(received, vec![1, 2, 3, 4, 5]);
}
#[test]
fn test_unified_channel_stats() {
let (sender, receiver) = unified_channel::<i32>(16).unwrap();
for i in 0..5 {
sender.send(i).unwrap();
}
for _ in 0..3 {
receiver.recv().unwrap();
}
let stats = receiver.stats();
assert_eq!(stats.messages_sent, 5);
assert_eq!(stats.messages_received, 3);
assert_eq!(stats.current_length, 2);
}
#[test]
fn test_unified_channel_close() {
let (sender, receiver) = unified_channel::<i32>(16).unwrap();
sender.send(42).unwrap();
receiver.channel.close();
assert_eq!(receiver.recv().unwrap(), 42);
assert!(receiver.recv().is_err());
}
#[test]
fn test_unified_channel_adaptive_overflow_fifo() {
let config = ChannelConfig {
capacity: 2,
enable_pooling: true,
max_pool_size: 4,
..Default::default()
};
let (sender, receiver) = unified_channel_with_config::<i32>(config).unwrap();
for i in 1..=5 {
sender.send(i).unwrap();
}
assert!(sender.send(6).is_err());
for expected in 1..=5 {
assert_eq!(receiver.recv().unwrap(), expected);
}
assert!(receiver.recv().is_err());
}
#[test]
fn try_send_returns_value_on_full_send_consumes() {
let config = ChannelConfig {
capacity: 1,
enable_pooling: false,
max_pool_size: 0,
..Default::default()
};
let (sender, receiver) = unified_channel_with_config::<i32>(config).unwrap();
sender.send(1).unwrap();
let err = sender.try_send(2).expect_err("channel is full");
assert_eq!(err, (2, ChannelError::Full));
assert_eq!(sender.send(3), Err(ChannelError::Full));
assert_eq!(receiver.recv().unwrap(), 1);
assert!(receiver.recv().is_err());
}