1
0
forked from ROMEO/nexosim

Provide dummy context for testing.

This commit is contained in:
Jaŭhien Piatlicki 2025-01-15 13:29:36 +01:00
parent 27ec1396df
commit 4111d49295
4 changed files with 42 additions and 92 deletions

View File

@ -8,6 +8,9 @@ use crate::time::{Deadline, MonotonicTime};
use super::{Model, ProtoModel};
#[cfg(all(test, not(nexosim_loom)))]
use crate::channel::Receiver;
/// A local context for models.
///
/// A `Context` is a handle to the global context associated to a model
@ -521,3 +524,16 @@ impl<'a, P: ProtoModel> BuildContext<'a, P> {
);
}
}
#[cfg(all(test, not(nexosim_loom)))]
impl<M: Model> Context<M> {
/// Creates a dummy context for testing purposes.
pub(crate) fn new_dummy() -> Self {
let dummy_address = Receiver::new(1).sender();
Context::new(
String::new(),
GlobalScheduler::new_dummy(),
Address(dummy_address),
)
}
}

View File

@ -503,17 +503,13 @@ fn recycle_vec<T, U>(mut v: Vec<T>) -> Vec<U> {
#[cfg(all(test, not(nexosim_loom)))]
mod tests {
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::sync::{Arc, Mutex};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::thread;
use futures_executor::block_on;
use crate::channel::Receiver;
use crate::simulation::{Address, GlobalScheduler};
use crate::time::{MonotonicTime, TearableAtomicTime};
use crate::util::priority_queue::PriorityQueue;
use crate::util::sync_cell::SyncCell;
use super::super::sender::{
FilterMapInputSender, FilterMapReplierSender, InputSender, ReplierSender,
@ -574,16 +570,7 @@ mod tests {
let mut sum_model = SumModel::new(sum.clone());
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(mailbox.recv(&mut sum_model, &mut dummy_cx)).unwrap();
}
})
@ -645,16 +632,7 @@ mod tests {
let mut sum_model = SumModel::new(sum.clone());
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(async {
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
@ -706,16 +684,7 @@ mod tests {
let mut double_model = DoubleModel::new();
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(mailbox.recv(&mut double_model, &mut dummy_cx)).unwrap();
thread::sleep(std::time::Duration::from_millis(100));
}
@ -792,16 +761,7 @@ mod tests {
let mut double_model = DoubleModel::new();
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(async {
mailbox

View File

@ -398,17 +398,13 @@ impl<R> Iterator for ReplyIterator<R> {
#[cfg(all(test, not(nexosim_loom)))]
mod tests {
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::sync::{Arc, Mutex};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::thread;
use futures_executor::block_on;
use crate::channel::Receiver;
use crate::simulation::{Address, GlobalScheduler};
use crate::time::{MonotonicTime, TearableAtomicTime};
use crate::util::priority_queue::PriorityQueue;
use crate::util::sync_cell::SyncCell;
use super::super::sender::{
FilterMapInputSender, FilterMapReplierSender, InputSender, ReplierSender,
@ -469,16 +465,7 @@ mod tests {
let mut sum_model = SumModel::new(sum.clone());
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(mailbox.recv(&mut sum_model, &mut dummy_cx)).unwrap();
}
})
@ -540,16 +527,7 @@ mod tests {
let mut sum_model = SumModel::new(sum.clone());
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(async {
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
@ -601,16 +579,7 @@ mod tests {
let mut double_model = DoubleModel::new();
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(mailbox.recv(&mut double_model, &mut dummy_cx)).unwrap();
thread::sleep(std::time::Duration::from_millis(100));
}
@ -687,16 +656,7 @@ mod tests {
let mut double_model = DoubleModel::new();
move || {
let dummy_address = Receiver::new(1).sender();
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time =
SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
let mut dummy_cx = Context::new(
String::new(),
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter),
Address(dummy_address),
);
let mut dummy_cx = Context::new_dummy();
block_on(async {
mailbox

View File

@ -20,6 +20,9 @@ use crate::simulation::Address;
use crate::time::{AtomicTimeReader, Deadline, MonotonicTime};
use crate::util::priority_queue::PriorityQueue;
#[cfg(all(test, not(nexosim_loom)))]
use crate::{time::TearableAtomicTime, util::sync_cell::SyncCell};
const GLOBAL_SCHEDULER_ORIGIN_ID: usize = 0;
/// A global scheduler.
@ -834,3 +837,14 @@ pub(crate) async fn send_keyed_event<M, F, T, S>(
)
.await;
}
#[cfg(all(test, not(nexosim_loom)))]
impl GlobalScheduler {
/// Creates a dummy scheduler for testing purposes.
pub(crate) fn new_dummy() -> Self {
let dummy_priority_queue = Arc::new(Mutex::new(PriorityQueue::new()));
let dummy_time = SyncCell::new(TearableAtomicTime::new(MonotonicTime::EPOCH)).reader();
let dummy_halter = Arc::new(AtomicBool::new(false));
GlobalScheduler::new(dummy_priority_queue, dummy_time, dummy_halter)
}
}