Module: xenomai-forge Branch: master Commit: 95370a5593b05b2dde8e8fb2f6f4ec11cb275894 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=95370a5593b05b2dde8e8fb2f6f4ec11cb275894
Author: Philippe Gerum <r...@xenomai.org> Date: Wed Nov 16 18:02:36 2011 +0100 alchemy/testsuite: extend test coverage --- include/alchemy/Makefile.am | 2 + include/alchemy/Makefile.in | 2 + lib/alchemy/testsuite/Makefile | 4 +- lib/alchemy/testsuite/event-1.c | 89 ++++++++++++++++++++++++++++++++++++ lib/alchemy/testsuite/heap-1.c | 96 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 192 insertions(+), 1 deletions(-) diff --git a/include/alchemy/Makefile.am b/include/alchemy/Makefile.am index 1216fc4..d590620 100644 --- a/include/alchemy/Makefile.am +++ b/include/alchemy/Makefile.am @@ -4,6 +4,8 @@ includesub_HEADERS = \ alarm.h \ buffer.h \ cond.h \ + event.h \ + heap.h \ mutex.h \ pipe.h \ queue.h \ diff --git a/include/alchemy/Makefile.in b/include/alchemy/Makefile.in index 553c483..a005d7d 100644 --- a/include/alchemy/Makefile.in +++ b/include/alchemy/Makefile.in @@ -243,6 +243,8 @@ includesub_HEADERS = \ alarm.h \ buffer.h \ cond.h \ + event.h \ + heap.h \ mutex.h \ pipe.h \ queue.h \ diff --git a/lib/alchemy/testsuite/Makefile b/lib/alchemy/testsuite/Makefile index 03c0823..51b2205 100644 --- a/lib/alchemy/testsuite/Makefile +++ b/lib/alchemy/testsuite/Makefile @@ -25,7 +25,9 @@ TESTS := \ alarm-1 \ sem-1 \ sem-2 \ - mutex-1 + mutex-1 \ + event-1 \ + heap-1 CFLAGS := $(shell DESTDIR=$(DESTDIR) $(XENO_CONFIG) --skin=alchemy --cflags) -g LDFLAGS := $(shell DESTDIR=$(DESTDIR) $(XENO_CONFIG) --skin=alchemy --ldflags) diff --git a/lib/alchemy/testsuite/event-1.c b/lib/alchemy/testsuite/event-1.c new file mode 100644 index 0000000..9f6be4d --- /dev/null +++ b/lib/alchemy/testsuite/event-1.c @@ -0,0 +1,89 @@ +#include <stdio.h> +#include <stdlib.h> +#include <copperplate/init.h> +#include <copperplate/traceobj.h> +#include <alchemy/task.h> +#include <alchemy/event.h> + +static struct traceobj trobj; + +static RT_TASK t_bgnd, t_fgnd; + +static RT_EVENT event; + +static void background_task(void *arg) +{ + unsigned long flags; + int ret, n; + + traceobj_enter(&trobj); + + for (n = 0; n < 10; n++) { + flags = 0; + ret = rt_event_wait(&event, 0x55555, &flags, EV_ANY, TM_INFINITE); + traceobj_assert(&trobj, ret == 0); + traceobj_assert(&trobj, flags == 1 << n * 2); + ret = rt_event_clear(&event, flags, NULL); + traceobj_assert(&trobj, ret == 0); + ret = rt_event_signal(&event, 2 << n * 2); + traceobj_assert(&trobj, ret == 0); + } + + ret = rt_event_wait(&event, 0x55555, &flags, EV_ANY, TM_INFINITE); + traceobj_assert(&trobj, ret == -EIDRM); + + traceobj_exit(&trobj); +} + +static void foreground_task(void *arg) +{ + unsigned long flags; + int ret, n; + + traceobj_enter(&trobj); + + for (n = 0; n < 10; n++) { + flags = 0; + ret = rt_event_signal(&event, 1 << n * 2); + traceobj_assert(&trobj, ret == 0); + ret = rt_event_wait(&event, 2 << n * 2, &flags, EV_ALL, TM_NONBLOCK); + traceobj_assert(&trobj, ret == -EWOULDBLOCK); + ret = rt_event_wait(&event, 2 << n * 2, &flags, EV_ALL, TM_INFINITE); + traceobj_assert(&trobj, ret == 0); + traceobj_assert(&trobj, flags == 2 << n * 2); + } + + rt_task_sleep(1000000); + ret = rt_event_delete(&event); + traceobj_assert(&trobj, ret == 0); + + traceobj_exit(&trobj); +} + +int main(int argc, char *argv[]) +{ + int ret; + + copperplate_init(argc, argv); + + traceobj_init(&trobj, argv[0], 0); + + ret = rt_event_create(&event, "EVENT", 0, EV_FIFO); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_create(&t_bgnd, "BGND", 0, 20, 0); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_start(&t_bgnd, background_task, NULL); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_create(&t_fgnd, "FGND", 0, 21, 0); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_start(&t_fgnd, foreground_task, NULL); + traceobj_assert(&trobj, ret == 0); + + traceobj_join(&trobj); + + exit(0); +} diff --git a/lib/alchemy/testsuite/heap-1.c b/lib/alchemy/testsuite/heap-1.c new file mode 100644 index 0000000..7a2bd48 --- /dev/null +++ b/lib/alchemy/testsuite/heap-1.c @@ -0,0 +1,96 @@ +#include <stdio.h> +#include <stdlib.h> +#include <copperplate/init.h> +#include <copperplate/traceobj.h> +#include <alchemy/task.h> +#include <alchemy/heap.h> + +static struct traceobj trobj; + +static RT_TASK t_bgnd, t_fgnd; + +static void background_task(void *arg) +{ + void *p1, *p2; + RT_HEAP heap; + int ret; + + ret = rt_heap_bind(&heap, "HEAP", TM_INFINITE); + traceobj_assert(&trobj, ret == 0); + + traceobj_enter(&trobj); + + ret = rt_heap_alloc(&heap, 8192, TM_NONBLOCK, &p1); + traceobj_assert(&trobj, ret == -EWOULDBLOCK); + ret = rt_heap_alloc(&heap, 8192, TM_INFINITE, &p1); + traceobj_assert(&trobj, ret == 0); + ret = rt_heap_alloc(&heap, 8192, TM_NONBLOCK, &p2); + traceobj_assert(&trobj, ret == 0); + ret = rt_heap_alloc(&heap, 8192, TM_INFINITE, &p1); + traceobj_assert(&trobj, ret == -EIDRM); + + traceobj_exit(&trobj); +} + +static void foreground_task(void *arg) +{ + void *p1, *p2; + RT_HEAP heap; + int ret; + + ret = rt_heap_bind(&heap, "HEAP", TM_INFINITE); + traceobj_assert(&trobj, ret == 0); + + traceobj_enter(&trobj); + + ret = rt_heap_alloc(&heap, 8192, TM_NONBLOCK, &p1); + traceobj_assert(&trobj, ret == 0); + ret = rt_heap_alloc(&heap, 8192, TM_NONBLOCK, &p2); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_set_priority(NULL, 19); + traceobj_assert(&trobj, ret == 0); + ret = rt_task_set_priority(NULL, 21); + traceobj_assert(&trobj, ret == 0); + + ret = rt_heap_free(&heap, p1); + traceobj_assert(&trobj, ret == 0); + ret = rt_heap_free(&heap, p2); + traceobj_assert(&trobj, ret == 0); + + rt_task_sleep(1000000); + + ret = rt_heap_delete(&heap); + traceobj_assert(&trobj, ret == 0); + + traceobj_exit(&trobj); +} + +int main(int argc, char *argv[]) +{ + RT_HEAP heap; + int ret; + + copperplate_init(argc, argv); + + traceobj_init(&trobj, argv[0], 0); + + ret = rt_task_create(&t_bgnd, "BGND", 0, 20, 0); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_start(&t_bgnd, background_task, NULL); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_create(&t_fgnd, "FGND", 0, 21, 0); + traceobj_assert(&trobj, ret == 0); + + ret = rt_task_start(&t_fgnd, foreground_task, NULL); + traceobj_assert(&trobj, ret == 0); + + ret = rt_heap_create(&heap, "HEAP", 16384, H_PRIO); + traceobj_assert(&trobj, ret == 0); + + traceobj_join(&trobj); + + exit(0); +} _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git