use super::*; #[test] fn test_unconnected_component_error() { compile_and_create_component(" comp interact_with_noone() { u8[] array = { 5 }; auto value = array[1]; }", "interact_with_noone", no_args()); } #[test] fn test_connected_uncommunicating_component_error() { compile_and_create_component(" comp crashing_and_burning(out unused) { u8[] array = { 1337 }; auto value = array[1337]; } comp sitting_idly_waiting(in never_providing) { sync auto a = get(never_providing); } comp constructor() { // Test one way // channel a -> b; // new sitting_idly_waiting(b); // new crashing_and_burning(a); // And the other way around channel c -> d; new crashing_and_burning(c); new sitting_idly_waiting(d); }", "constructor", no_args()) } #[test] fn test_connected_communicating_component_error() { compile_and_create_component(" comp send_and_fail(out tx) { u8[] array = {}; sync { put(tx, 0); array[0] = 5; } } comp receive_once(in rx) { sync auto a = get(rx); } comp constructor() { channel a -> b; new send_and_fail(a); new receive_once(b); channel c -> d; new receive_once(d); new send_and_fail(c); } ", "constructor", no_args()) } #[test] fn test_failing_after_successful_sync() { compile_and_create_component(" comp put_and_fail(out tx) { sync put(tx, 1); u8 a = {}[0]; } comp get_and_fail(in rx) { sync auto a = get(rx); u8 a = {}[0]; } comp put_and_exit(out tx) { sync put(tx, 2); } comp get_and_exit(in rx) { sync auto a = get(rx); } comp constructor() { { channel a -> b; new put_and_fail(a); new get_and_exit(b); } { channel a -> b; new get_and_exit(b); new put_and_fail(a); } { channel a -> b; new put_and_exit(a); new get_and_fail(b); } { channel a -> b; new get_and_fail(b); new put_and_exit(a); } } ", "constructor", no_args()); }