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

Reply via email to