machinarium: add additional channel tests

This commit is contained in:
Dmitry Simonenko 2017-05-22 15:30:13 +03:00
parent 3d0f5210b0
commit 0dcb0649b9
4 changed files with 209 additions and 0 deletions

View File

@ -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);

View File

@ -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 \

102
tests/test_channel_rw3.c Normal file
View File

@ -0,0 +1,102 @@
/*
* machinarium.
*
* Cooperative multitasking engine.
*/
#include <machinarium.h>
#include <machinarium_test.h>
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();
}

101
tests/test_channel_rw4.c Normal file
View File

@ -0,0 +1,101 @@
/*
* machinarium.
*
* Cooperative multitasking engine.
*/
#include <machinarium.h>
#include <machinarium_test.h>
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();
}