use std::sync::Arc; use super::*; use crate::{PortId, ProtocolDescription}; use crate::common::Id; use crate::protocol::eval::*; fn runtime_for(num_threads: u32, pdl: &str) -> Runtime { let protocol = ProtocolDescription::parse(pdl.as_bytes()).expect("parse pdl"); let runtime = Runtime::new(num_threads, protocol); return runtime; } #[test] fn test_put_and_get() { let rt = runtime_for(4, " primitive putter(out sender, u32 loops) { u32 index = 0; while (index < loops) { synchronous { print(\"putting!\"); put(sender, true); } index += 1; } } primitive getter(in receiver, u32 loops) { u32 index = 0; while (index < loops) { synchronous { print(\"getting!\"); auto result = get(receiver); assert(result); } index += 1; } } "); let mut api = rt.create_interface(); let channel = api.create_channel(); let num_loops = 100; 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"); println!("Am I running?"); }