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};
|
use super::{Model, ProtoModel};
|
||||||
|
|
||||||
|
#[cfg(all(test, not(nexosim_loom)))]
|
||||||
|
use crate::channel::Receiver;
|
||||||
|
|
||||||
/// A local context for models.
|
/// A local context for models.
|
||||||
///
|
///
|
||||||
/// A `Context` is a handle to the global context associated to a model
|
/// 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)))]
|
#[cfg(all(test, not(nexosim_loom)))]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::Arc;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use futures_executor::block_on;
|
use futures_executor::block_on;
|
||||||
|
|
||||||
use crate::channel::Receiver;
|
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::{
|
use super::super::sender::{
|
||||||
FilterMapInputSender, FilterMapReplierSender, InputSender, ReplierSender,
|
FilterMapInputSender, FilterMapReplierSender, InputSender, ReplierSender,
|
||||||
@ -574,16 +570,7 @@ mod tests {
|
|||||||
let mut sum_model = SumModel::new(sum.clone());
|
let mut sum_model = SumModel::new(sum.clone());
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
block_on(mailbox.recv(&mut sum_model, &mut dummy_cx)).unwrap();
|
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());
|
let mut sum_model = SumModel::new(sum.clone());
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
block_on(async {
|
block_on(async {
|
||||||
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
|
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
|
||||||
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();
|
let mut double_model = DoubleModel::new();
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
block_on(mailbox.recv(&mut double_model, &mut dummy_cx)).unwrap();
|
block_on(mailbox.recv(&mut double_model, &mut dummy_cx)).unwrap();
|
||||||
thread::sleep(std::time::Duration::from_millis(100));
|
thread::sleep(std::time::Duration::from_millis(100));
|
||||||
}
|
}
|
||||||
@ -792,16 +761,7 @@ mod tests {
|
|||||||
let mut double_model = DoubleModel::new();
|
let mut double_model = DoubleModel::new();
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
|
|
||||||
block_on(async {
|
block_on(async {
|
||||||
mailbox
|
mailbox
|
||||||
|
@ -398,17 +398,13 @@ impl<R> Iterator for ReplyIterator<R> {
|
|||||||
|
|
||||||
#[cfg(all(test, not(nexosim_loom)))]
|
#[cfg(all(test, not(nexosim_loom)))]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::Arc;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use futures_executor::block_on;
|
use futures_executor::block_on;
|
||||||
|
|
||||||
use crate::channel::Receiver;
|
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::{
|
use super::super::sender::{
|
||||||
FilterMapInputSender, FilterMapReplierSender, InputSender, ReplierSender,
|
FilterMapInputSender, FilterMapReplierSender, InputSender, ReplierSender,
|
||||||
@ -469,16 +465,7 @@ mod tests {
|
|||||||
let mut sum_model = SumModel::new(sum.clone());
|
let mut sum_model = SumModel::new(sum.clone());
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
block_on(mailbox.recv(&mut sum_model, &mut dummy_cx)).unwrap();
|
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());
|
let mut sum_model = SumModel::new(sum.clone());
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
block_on(async {
|
block_on(async {
|
||||||
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
|
mailbox.recv(&mut sum_model, &mut dummy_cx).await.unwrap();
|
||||||
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();
|
let mut double_model = DoubleModel::new();
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
block_on(mailbox.recv(&mut double_model, &mut dummy_cx)).unwrap();
|
block_on(mailbox.recv(&mut double_model, &mut dummy_cx)).unwrap();
|
||||||
thread::sleep(std::time::Duration::from_millis(100));
|
thread::sleep(std::time::Duration::from_millis(100));
|
||||||
}
|
}
|
||||||
@ -687,16 +656,7 @@ mod tests {
|
|||||||
let mut double_model = DoubleModel::new();
|
let mut double_model = DoubleModel::new();
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let dummy_address = Receiver::new(1).sender();
|
let mut dummy_cx = Context::new_dummy();
|
||||||
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),
|
|
||||||
);
|
|
||||||
|
|
||||||
block_on(async {
|
block_on(async {
|
||||||
mailbox
|
mailbox
|
||||||
|
@ -20,6 +20,9 @@ use crate::simulation::Address;
|
|||||||
use crate::time::{AtomicTimeReader, Deadline, MonotonicTime};
|
use crate::time::{AtomicTimeReader, Deadline, MonotonicTime};
|
||||||
use crate::util::priority_queue::PriorityQueue;
|
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;
|
const GLOBAL_SCHEDULER_ORIGIN_ID: usize = 0;
|
||||||
|
|
||||||
/// A global scheduler.
|
/// A global scheduler.
|
||||||
@ -834,3 +837,14 @@ pub(crate) async fn send_keyed_event<M, F, T, S>(
|
|||||||
)
|
)
|
||||||
.await;
|
.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