diff --git a/src/runtime/tests.rs b/src/runtime/tests.rs index c6075cd5eede3701425e3f722a6a229fbef1eada..913f12767c698475a148dc96f2629bdb0df361ea 100644 --- a/src/runtime/tests.rs +++ b/src/runtime/tests.rs @@ -1251,3 +1251,88 @@ fn xrouter_comp() { } println!("COMP {:?}", now.elapsed()); } + +#[test] +fn count_stream() { + let test_log_path = Path::new("./logs/count_stream"); + let pdl = b" + primitive count_stream(out o) { + msg m = create(1); + m[0] = 0; + while(true) synchronous { + put(o, m); + m[0] += 1; + } + } + "; + let pd = reowolf::ProtocolDescription::parse(pdl).unwrap(); + let mut c = file_logged_configured_connector(0, test_log_path, Arc::new(pd)); + + // setup a session between (a) native, and (b) sequencer3, connected by 3 ports. + let [p0, g0] = c.new_port_pair(); + c.add_component(b"count_stream", &[p0]).unwrap(); + c.connect(None).unwrap(); + + for expecting in 0u8..16 { + c.get(g0).unwrap(); + c.sync(None).unwrap(); + assert_eq!(&[expecting], c.gotten(g0).unwrap().as_slice()); + } +} + +#[test] +fn for_msg_byte() { + let test_log_path = Path::new("./logs/for_msg_byte"); + let pdl = b" + primitive for_msg_byte(out o) { + byte i = 0; + while(i<8) { + msg m = create(1); + m[0] = i; + synchronous() put(o, m); + i++; + } + } + "; + let pd = reowolf::ProtocolDescription::parse(pdl).unwrap(); + let mut c = file_logged_configured_connector(0, test_log_path, Arc::new(pd)); + + // setup a session between (a) native, and (b) sequencer3, connected by 3 ports. + let [p0, g0] = c.new_port_pair(); + c.add_component(b"for_msg_byte", &[p0]).unwrap(); + c.connect(None).unwrap(); + + for expecting in 0u8..8 { + c.get(g0).unwrap(); + c.sync(None).unwrap(); + assert_eq!(&[expecting], c.gotten(g0).unwrap().as_slice()); + } + c.sync(None).unwrap(); +} + +#[test] +fn message_concat() { + // Note: PDL quirks: + // 1. declarations as first lines of a scope + // 2. var names cannot be prefixed by types. Eg `msg_concat` prohibited. + let test_log_path = Path::new("./logs/message_concat"); + let pdl = b" + primitive message_concat(out o) { + msg a = create(1); + msg b = create(1); + a[0] = 0; + b[0] = 1; + synchronous() put(o, a+b); + } + "; + let pd = reowolf::ProtocolDescription::parse(pdl).unwrap(); + let mut c = file_logged_configured_connector(0, test_log_path, Arc::new(pd)); + + // setup a session between (a) native, and (b) sequencer3, connected by 3 ports. + let [p0, g0] = c.new_port_pair(); + c.add_component(b"message_concat", &[p0]).unwrap(); + c.connect(None).unwrap(); + c.get(g0).unwrap(); + c.sync(None).unwrap(); + assert_eq!(&[0, 1], c.gotten(g0).unwrap().as_slice()); +}