Files
@ 3af8b6eaec1b
Branch filter:
Location: CSY/reowolf/src/test/mod.rs - annotation
3af8b6eaec1b
2.0 KiB
application/rls-services+xml
Implement change to protocol description trait interface
a226385adc2d a226385adc2d a226385adc2d 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 06f259bf8031 a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d 06f259bf8031 a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d a226385adc2d 06f259bf8031 06f259bf8031 | use crate::common::ControllerId;
use crate::runtime::Connector;
use crate::runtime::Unconfigured;
use core::fmt::Debug;
mod connector;
mod setup;
struct Panicked(Box<dyn std::any::Any>);
impl Debug for Panicked {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
if let Some(str_slice) = self.0.downcast_ref::<&'static str>() {
f.pad(str_slice)
} else if let Some(string) = self.0.downcast_ref::<String>() {
f.pad(string)
} else {
f.pad("Box<Any>")
}
}
}
fn handle(result: Result<(), Box<(dyn std::any::Any + Send + 'static)>>) {
if let Err(x) = result {
panic!("Worker panicked: {:?}", Panicked(x))
}
}
fn do_all(i: &[&(dyn Fn(&mut Connector) + Sync)]) {
let cid_iter = 0..(i.len() as ControllerId);
let mut connectors = cid_iter
.clone()
.map(|controller_id| Connector::Unconfigured(Unconfigured { controller_id }))
.collect::<Vec<_>>();
let mut results = vec![];
crossbeam_utils::thread::scope(|s| {
let handles: Vec<_> = i
.iter()
.zip(connectors.iter_mut())
.map(|(func, connector)| s.spawn(move |_| func(connector)))
.collect();
for h in handles {
results.push(h.join());
}
})
.unwrap();
let mut failures = false;
for ((controller_id, connector), res) in
cid_iter.zip(connectors.iter_mut()).zip(results.into_iter())
{
println!("====================\n CID {:?} ...", controller_id);
match connector.get_mut_logger() {
Some(logger) => println!("{}", logger),
None => println!("<No Log>"),
}
match res {
Ok(()) => println!("CID {:?} OK!", controller_id),
Err(e) => {
failures = true;
println!("CI {:?} PANIC! {:?}", controller_id, Panicked(e));
}
};
}
if failures {
panic!("FAILURES!");
}
}
|