Files
@ 7ce4d293022a
Branch filter:
Location: CSY/reowolf/src/runtime2/tests/mod.rs - annotation
7ce4d293022a
2.6 KiB
application/rls-services+xml
remove some debug logging, did basic perf tests
7d01f1245b7c 7d01f1245b7c 7d01f1245b7c 665aa326769e 665aa326769e 7ce4d293022a 7ce4d293022a 7ce4d293022a c502fc0c252a c502fc0c252a 7d01f1245b7c c502fc0c252a 665aa326769e 7d01f1245b7c 7d01f1245b7c 665aa326769e c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7ce4d293022a 7d01f1245b7c 7d01f1245b7c c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a 7d01f1245b7c 665aa326769e 7d01f1245b7c c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a 665aa326769e 7d01f1245b7c c502fc0c252a 665aa326769e 7ce4d293022a c502fc0c252a c502fc0c252a 665aa326769e c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a 665aa326769e c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a c502fc0c252a ff6ade8b8097 | use super::*;
use crate::{PortId, ProtocolDescription};
use crate::common::Id;
use crate::protocol::eval::*;
const NUM_THREADS: u32 = 1; // number of threads in runtime
const NUM_INSTANCES: u32 = 4; // number of test instances constructed
const NUM_LOOPS: u32 = 4; // number of loops within a single test (not used by all tests)
fn create_runtime(pdl: &str) -> Runtime {
let protocol = ProtocolDescription::parse(pdl.as_bytes()).expect("parse pdl");
let runtime = Runtime::new(NUM_THREADS, protocol);
return runtime;
}
fn run_test_in_runtime<F: Fn(&mut ApplicationInterface)>(pdl: &str, constructor: F) {
let protocol = ProtocolDescription::parse(pdl.as_bytes())
.expect("parse PDL");
let runtime = Runtime::new(NUM_THREADS, protocol);
let mut api = runtime.create_interface();
for _ in 0..NUM_INSTANCES {
constructor(&mut api);
}
// Wait until done :)
}
struct TestTimer {
name: &'static str,
started: std::time::Instant
}
impl TestTimer {
fn new(name: &'static str) -> Self {
Self{ name, started: std::time::Instant::now() }
}
}
impl Drop for TestTimer {
fn drop(&mut self) {
let delta = std::time::Instant::now() - self.started;
let nanos = (delta.as_secs_f64() * 1_000_000.0) as u64;
let millis = nanos / 1000;
let nanos = nanos % 1000;
println!("[{}] Took {:>4}.{:03} ms", self.name, millis, nanos);
}
}
#[test]
fn test_put_and_get() {
const CODE: &'static str = "
primitive putter(out<bool> sender, u32 loops) {
u32 index = 0;
while (index < loops) {
synchronous {
put(sender, true);
}
index += 1;
}
}
primitive getter(in<bool> receiver, u32 loops) {
u32 index = 0;
while (index < loops) {
synchronous {
auto result = get(receiver);
assert(result);
}
index += 1;
}
}
";
let thing = TestTimer::new("hello");
run_test_in_runtime(CODE, |api| {
let channel = api.create_channel();
api.create_connector("", "putter", ValueGroup::new_stack(vec![
Value::Output(PortId(Id{ connector_id: 0, u32_suffix: channel.putter_id.index })),
Value::UInt32(NUM_LOOPS)
])).expect("create putter");
api.create_connector("", "getter", ValueGroup::new_stack(vec![
Value::Input(PortId(Id{ connector_id: 0, u32_suffix: channel.getter_id.index })),
Value::UInt32(NUM_LOOPS)
])).expect("create getter");
});
}
|