#![cfg(all(feature = "posix", feature = "async"))]
use osal_rs::os::{block_on, AsyncMutex, AsyncQueue, AsyncSemaphore};
use osal_rs::utils::{OsalRsBool, Result};
use osal_rs::{log_debug, log_info};
const TAG: &str = "AsyncTests";
#[test]
fn test_block_on_ready_future() -> Result<()> {
log_info!(TAG, "Starting test_block_on_ready_future");
let result = block_on(async { 41u32 + 1 });
log_debug!(TAG, "block_on result: {}", result);
assert_eq!(result, 42);
log_info!(TAG, "test_block_on_ready_future PASSED");
Ok(())
}
#[test]
fn test_async_mutex_lock() -> Result<()> {
log_info!(TAG, "Starting test_async_mutex_lock");
let value = block_on(async {
let mutex = AsyncMutex::new(0u32);
{
let mut guard = mutex.lock().await;
*guard += 41;
}
let guard = mutex.lock().await;
*guard
});
log_debug!(TAG, "AsyncMutex value: {}", value);
assert_eq!(value, 41);
log_info!(TAG, "test_async_mutex_lock PASSED");
Ok(())
}
#[test]
fn test_async_semaphore_wait_and_signal() -> Result<()> {
log_info!(TAG, "Starting test_async_semaphore_wait_and_signal");
let sem = AsyncSemaphore::new(1, 0)?;
let signal_result = sem.signal();
log_debug!(TAG, "signal result: {:?}", signal_result);
assert_eq!(signal_result, OsalRsBool::True);
let wait_result = block_on(sem.wait_async());
log_debug!(TAG, "wait_async result: {:?}", wait_result);
assert_eq!(wait_result, OsalRsBool::True);
log_info!(TAG, "test_async_semaphore_wait_and_signal PASSED");
Ok(())
}
#[test]
fn test_async_queue_post() -> Result<()> {
log_info!(TAG, "Starting test_async_queue_post");
let queue = AsyncQueue::new(4, 4)?;
let payload = [1u8, 2, 3, 4];
block_on(queue.post_async(&payload)).unwrap();
queue.post(&payload, 0)?;
log_info!(TAG, "test_async_queue_post PASSED");
Ok(())
}