From 0dcb0649b94860565adc8d71884f4eb8ef7bc857 Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Mon, 22 May 2017 15:30:13 +0300 Subject: [PATCH] machinarium: add additional channel tests --- tests/machinarium_test.c | 4 ++ tests/makefile | 2 + tests/test_channel_rw3.c | 102 +++++++++++++++++++++++++++++++++++++++ tests/test_channel_rw4.c | 101 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 209 insertions(+) create mode 100644 tests/test_channel_rw3.c create mode 100644 tests/test_channel_rw4.c diff --git a/tests/machinarium_test.c b/tests/machinarium_test.c index c2678955..b5b4b12c 100644 --- a/tests/machinarium_test.c +++ b/tests/machinarium_test.c @@ -25,6 +25,8 @@ extern void test_channel_create(void); extern void test_channel_rw0(void); extern void test_channel_rw1(void); extern void test_channel_rw2(void); +extern void test_channel_rw3(void); +extern void test_channel_rw4(void); extern void test_channel_timeout(void); extern void test_channel_cancel(void); @@ -61,6 +63,8 @@ main(int argc, char *argv[]) machinarium_test(test_channel_rw0); machinarium_test(test_channel_rw1); machinarium_test(test_channel_rw2); + machinarium_test(test_channel_rw3); + machinarium_test(test_channel_rw4); machinarium_test(test_channel_timeout); machinarium_test(test_channel_cancel); machinarium_test(test_io_new); diff --git a/tests/makefile b/tests/makefile index 905223c8..06b638f3 100644 --- a/tests/makefile +++ b/tests/makefile @@ -19,6 +19,8 @@ OBJECTS = machinarium_test.o \ test_channel_rw0.o \ test_channel_rw1.o \ test_channel_rw2.o \ + test_channel_rw3.o \ + test_channel_rw4.o \ test_channel_timeout.o \ test_channel_cancel.o \ test_io_new.o \ diff --git a/tests/test_channel_rw3.c b/tests/test_channel_rw3.c new file mode 100644 index 00000000..0d38c007 --- /dev/null +++ b/tests/test_channel_rw3.c @@ -0,0 +1,102 @@ + +/* + * machinarium. + * + * Cooperative multitasking engine. +*/ + +#include +#include + +static machine_channel_t channel; + +static void +test_fiber_a(void *arg) +{ + machine_msg_t msg; + msg = machine_channel_read(channel, UINT_MAX); + test(msg != NULL); + test(machine_msg_get_type(msg) == 1); + machine_msg_free(msg); +} + +static void +test_fiber_b(void *arg) +{ + machine_msg_t msg; + msg = machine_channel_read(channel, UINT_MAX); + test(msg != NULL); + test(machine_msg_get_type(msg) == 2); + machine_msg_free(msg); +} + +static void +test_fiber_c(void *arg) +{ + machine_msg_t msg; + msg = machine_channel_read(channel, UINT_MAX); + test(msg != NULL); + test(machine_msg_get_type(msg) == 3); + machine_msg_free(msg); +} + +static void +test_fiber(void *arg) +{ + channel = machine_channel_create(); + test(channel != NULL); + + int a; + a = machine_fiber_create(test_fiber_a, NULL); + test(a != -1); + machine_sleep(0); + + int b; + b = machine_fiber_create(test_fiber_b, NULL); + test(b != -1); + machine_sleep(0); + + int c; + c = machine_fiber_create(test_fiber_c, NULL); + test(c != -1); + machine_sleep(0); + + machine_msg_t msg; + msg = machine_msg_create(1); + test(msg != NULL); + machine_channel_write(channel, msg); + + msg = machine_msg_create(2); + test(msg != NULL); + machine_channel_write(channel, msg); + + msg = machine_msg_create(3); + test(msg != NULL); + machine_channel_write(channel, msg); + + machine_sleep(0); + machine_sleep(0); + machine_sleep(0); + + machine_join(a); + machine_join(b); + machine_join(c); + + machine_channel_free(channel); +} + +void +test_channel_rw3(void) +{ + machinarium_init(); + + int id; + id = machine_create("test", test_fiber, NULL); + test(id != -1); + + int rc; + rc = machine_wait(id); + test(rc != -1); + + machinarium_free(); +} diff --git a/tests/test_channel_rw4.c b/tests/test_channel_rw4.c new file mode 100644 index 00000000..e9454007 --- /dev/null +++ b/tests/test_channel_rw4.c @@ -0,0 +1,101 @@ + +/* + * machinarium. + * + * Cooperative multitasking engine. +*/ + +#include +#include + +static machine_channel_t channel; + +static void +test_fiber_a(void *arg) +{ + machine_msg_t msg; + msg = machine_channel_read(channel, UINT_MAX); + test(msg != NULL); + test(machine_msg_get_type(msg) == 1); + machine_msg_free(msg); +} + +static void +test_fiber_b(void *arg) +{ + machine_msg_t msg; + msg = machine_channel_read(channel, UINT_MAX); + test(msg != NULL); + test(machine_msg_get_type(msg) == 2); + machine_msg_free(msg); +} + +static void +test_fiber_c(void *arg) +{ + machine_msg_t msg; + msg = machine_channel_read(channel, UINT_MAX); + test(msg != NULL); + test(machine_msg_get_type(msg) == 3); + machine_msg_free(msg); +} + +static void +test_fiber(void *arg) +{ + channel = machine_channel_create(); + test(channel != NULL); + + int a; + a = machine_fiber_create(test_fiber_a, NULL); + test(a != -1); + machine_sleep(0); + + int b; + b = machine_fiber_create(test_fiber_b, NULL); + test(b != -1); + machine_sleep(0); + + int c; + c = machine_fiber_create(test_fiber_c, NULL); + test(c != -1); + machine_sleep(0); + + machine_msg_t msg; + msg = machine_msg_create(1); + test(msg != NULL); + machine_channel_write(channel, msg); + machine_sleep(0); + + msg = machine_msg_create(2); + test(msg != NULL); + machine_channel_write(channel, msg); + machine_sleep(0); + + msg = machine_msg_create(3); + test(msg != NULL); + machine_channel_write(channel, msg); + machine_sleep(0); + + machine_join(a); + machine_join(b); + machine_join(c); + + machine_channel_free(channel); +} + +void +test_channel_rw4(void) +{ + machinarium_init(); + + int id; + id = machine_create("test", test_fiber, NULL); + test(id != -1); + + int rc; + rc = machine_wait(id); + test(rc != -1); + + machinarium_free(); +}