#[cfg(test)]
mod unit_tests {
use martos::task_manager::TaskManager;
use martos::timer::Timer;
use sequential_test::sequential;
use std::sync::atomic::{AtomicU32, Ordering};
#[test]
#[sequential]
fn test_empty_task_manager() {
TaskManager::test_start_task_manager();
}
static TEST_ONE_FINITE_TASK_TASK_MANAGER_COUNTER: AtomicU32 = AtomicU32::new(1);
fn test_one_finite_task_task_manager_setup_fn() {}
fn test_one_finite_task_task_manager_loop_fn() {
TEST_ONE_FINITE_TASK_TASK_MANAGER_COUNTER.fetch_add(1, Ordering::Relaxed);
}
fn test_one_finite_task_task_manager_stop_condition_fn() -> bool {
let value = unsafe { TEST_ONE_FINITE_TASK_TASK_MANAGER_COUNTER.as_ptr().read() };
if value % 50 == 0 {
return true;
}
false
}
#[test]
#[sequential]
fn test_one_finite_task_task_manager() {
TaskManager::add_task(
test_one_finite_task_task_manager_setup_fn,
test_one_finite_task_task_manager_loop_fn,
test_one_finite_task_task_manager_stop_condition_fn,
);
TaskManager::test_start_task_manager();
assert_eq!(
unsafe { TEST_ONE_FINITE_TASK_TASK_MANAGER_COUNTER.as_ptr().read() },
50
);
}
static TEST_ONE_INFINITE_TASK_TASK_MANAGER_COUNTER: AtomicU32 = AtomicU32::new(1);
fn test_one_infinite_task_task_manager_setup_fn() {}
fn test_one_infinite_task_task_manager_loop_fn() {
TEST_ONE_INFINITE_TASK_TASK_MANAGER_COUNTER.fetch_add(1, Ordering::Relaxed);
}
fn test_one_infinite_task_task_manager_stop_condition_fn() -> bool {
false
}
#[test]
#[sequential]
fn test_one_infinite_task_task_manager() {
TaskManager::add_task(
test_one_infinite_task_task_manager_setup_fn,
test_one_infinite_task_task_manager_loop_fn,
test_one_infinite_task_task_manager_stop_condition_fn,
);
TaskManager::test_start_task_manager();
}
static TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER1: AtomicU32 = AtomicU32::new(1);
fn test_two_finite_tasks_task_manager_setup_fn1() {}
fn test_two_finite_tasks_task_manager_loop_fn1() {
TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER1.fetch_add(1, Ordering::Relaxed);
}
fn test_two_finite_tasks_task_manager_stop_condition_fn1() -> bool {
let value = unsafe { TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER1.as_ptr().read() };
if value % 50 == 0 {
return true;
}
false
}
static TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER2: AtomicU32 = AtomicU32::new(1);
fn test_two_finite_tasks_task_manager_setup_fn2() {}
fn test_two_finite_tasks_task_manager_loop_fn2() {
TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER2.fetch_add(1, Ordering::Relaxed);
}
fn test_two_finite_tasks_task_manager_stop_condition_fn2() -> bool {
let value = unsafe { TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER2.as_ptr().read() };
if value % 25 == 0 {
return true;
}
false
}
#[test]
#[sequential]
fn test_two_finite_tasks_task_manager() {
TaskManager::add_task(
test_two_finite_tasks_task_manager_setup_fn1,
test_two_finite_tasks_task_manager_loop_fn1,
test_two_finite_tasks_task_manager_stop_condition_fn1,
);
TaskManager::add_task(
test_two_finite_tasks_task_manager_setup_fn2,
test_two_finite_tasks_task_manager_loop_fn2,
test_two_finite_tasks_task_manager_stop_condition_fn2,
);
TaskManager::test_start_task_manager();
assert_eq!(
unsafe { TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER1.as_ptr().read() },
50
);
assert_eq!(
unsafe { TEST_TWO_FINITE_TASK_TASK_MANAGER_COUNTER2.as_ptr().read() },
25
);
}
static TEST_TWO_DIFFERENT_TASK_TASK_MANAGER_COUNTER1: AtomicU32 = AtomicU32::new(1);
fn test_two_different_tasks_task_manager_setup_fn1() {}
fn test_two_different_tasks_task_manager_loop_fn1() {
TEST_TWO_DIFFERENT_TASK_TASK_MANAGER_COUNTER1.fetch_add(1, Ordering::Relaxed);
}
fn test_two_different_tasks_task_manager_stop_condition_fn1() -> bool {
let value = unsafe {
TEST_TWO_DIFFERENT_TASK_TASK_MANAGER_COUNTER1
.as_ptr()
.read()
};
if value % 50 == 0 {
return true;
}
false
}
static TEST_TWO_DIFFERENT_TASK_TASK_MANAGER_COUNTER2: AtomicU32 = AtomicU32::new(1);
fn test_two_different_tasks_task_manager_setup_fn2() {}
fn test_two_different_tasks_task_manager_loop_fn2() {
TEST_TWO_DIFFERENT_TASK_TASK_MANAGER_COUNTER2.fetch_add(1, Ordering::Relaxed);
}
fn test_two_different_tasks_task_manager_stop_condition_fn2() -> bool {
false
}
#[test]
#[sequential]
fn test_two_different_tasks_task_manager() {
TaskManager::add_task(
test_two_different_tasks_task_manager_setup_fn1,
test_two_different_tasks_task_manager_loop_fn1,
test_two_different_tasks_task_manager_stop_condition_fn1,
);
TaskManager::add_task(
test_two_different_tasks_task_manager_setup_fn2,
test_two_different_tasks_task_manager_loop_fn2,
test_two_different_tasks_task_manager_stop_condition_fn2,
);
TaskManager::test_start_task_manager();
assert_eq!(
unsafe {
TEST_TWO_DIFFERENT_TASK_TASK_MANAGER_COUNTER1
.as_ptr()
.read()
},
50
);
}
static TEST_TWO_INFINITE_TASK_TASK_MANAGER_COUNTER1: AtomicU32 = AtomicU32::new(1);
fn test_two_infinite_tasks_task_manager_setup_fn1() {}
fn test_two_infinite_tasks_task_manager_loop_fn1() {
TEST_TWO_INFINITE_TASK_TASK_MANAGER_COUNTER1.fetch_add(1, Ordering::Relaxed);
}
fn test_two_infinite_tasks_task_manager_stop_condition_fn1() -> bool {
false
}
static TEST_TWO_INFINITE_TASK_TASK_MANAGER_COUNTER2: AtomicU32 = AtomicU32::new(1);
fn test_two_infinite_tasks_task_manager_setup_fn2() {}
fn test_two_infinite_tasks_task_manager_loop_fn2() {
TEST_TWO_INFINITE_TASK_TASK_MANAGER_COUNTER2.fetch_add(1, Ordering::Relaxed);
}
fn test_two_infinite_tasks_task_manager_stop_condition_fn2() -> bool {
false
}
#[test]
#[sequential]
fn test_two_infinite_tasks_task_manager() {
TaskManager::add_task(
test_two_infinite_tasks_task_manager_setup_fn1,
test_two_infinite_tasks_task_manager_loop_fn1,
test_two_infinite_tasks_task_manager_stop_condition_fn1,
);
TaskManager::add_task(
test_two_infinite_tasks_task_manager_setup_fn2,
test_two_infinite_tasks_task_manager_loop_fn2,
test_two_infinite_tasks_task_manager_stop_condition_fn2,
);
TaskManager::test_start_task_manager();
}
static TEST_SETUP_TASK_MANAGER_COUNTER: AtomicU32 = AtomicU32::new(1);
fn test_setup_task_manager_setup_fn() {
TEST_SETUP_TASK_MANAGER_COUNTER.store(42, Ordering::Relaxed);
}
fn test_setup_task_manager_loop_fn() {}
fn test_setup_task_manager_stop_condition_fn() -> bool {
false
}
#[test]
#[sequential]
fn test_setup_task_manager() {
TaskManager::add_task(
test_setup_task_manager_setup_fn,
test_setup_task_manager_loop_fn,
test_setup_task_manager_stop_condition_fn,
);
TaskManager::test_start_task_manager();
assert_eq!(
unsafe { TEST_SETUP_TASK_MANAGER_COUNTER.as_ptr().read() },
42
);
}
#[test]
fn test_setup_timer() {
Timer::setup_timer();
assert_eq!(Timer::get_tick_counter(), 0);
}
#[test]
fn test_loop_timer() {
Timer::setup_timer();
Timer::loop_timer();
assert_eq!(Timer::get_tick_counter(), 0);
}
#[test]
fn test_stop_condition_timer() {
assert!(!Timer::stop_condition_timer());
}
}