mirror of https://github.com/yandex/odyssey.git
machinarium: add additional channel tests
This commit is contained in:
parent
3d0f5210b0
commit
0dcb0649b9
|
@ -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);
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
}
|
Loading…
Reference in New Issue