forked from ROMEO/nexosim
Provide dummy context for testing.
This commit is contained in:
parent
27ec1396df
commit
4111d49295
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user