Module: xenomai-forge
Branch: master
Commit: 5c3db0eef5e4850d969b00da02b2a87d79690362
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=5c3db0eef5e4850d969b00da02b2a87d79690362

Author: Philippe Gerum <r...@xenomai.org>
Date:   Mon Nov  7 18:47:32 2011 +0100

alchemy/testsuite: extend tests to message passing services

---

 lib/alchemy/testsuite/Makefile |    1 +
 lib/alchemy/testsuite/task-6.c |   80 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/lib/alchemy/testsuite/Makefile b/lib/alchemy/testsuite/Makefile
index fda4ff0..3048581 100644
--- a/lib/alchemy/testsuite/Makefile
+++ b/lib/alchemy/testsuite/Makefile
@@ -17,6 +17,7 @@ TESTS :=      \
        task-3  \
        task-4  \
        task-5  \
+       task-6  \
        mq-1    \
        mq-2    \
        mq-3
diff --git a/lib/alchemy/testsuite/task-6.c b/lib/alchemy/testsuite/task-6.c
new file mode 100644
index 0000000..47f5d22
--- /dev/null
+++ b/lib/alchemy/testsuite/task-6.c
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <copperplate/init.h>
+#include <copperplate/traceobj.h>
+#include <alchemy/task.h>
+
+static struct traceobj trobj;
+
+static RT_TASK t_bgnd, t_fgnd;
+
+static void background_task(void *arg)
+{
+       int msg, ret, flowid, n;
+       RT_TASK_MCB mcb;
+
+       traceobj_enter(&trobj);
+
+       for (n = 0; n < 10; n++) {
+               mcb.data = &msg;
+               mcb.size = sizeof(msg);
+               flowid = rt_task_receive(&mcb, TM_INFINITE);
+               traceobj_assert(&trobj, flowid > 0);
+               traceobj_assert(&trobj, mcb.opcode == 0x77);
+               traceobj_assert(&trobj, mcb.size == sizeof(msg));
+               traceobj_assert(&trobj, msg == n);
+               msg = ~msg;
+               ret = rt_task_reply(flowid, &mcb);
+               traceobj_assert(&trobj, ret == 0);
+       }
+
+       traceobj_exit(&trobj);
+}
+
+static void foreground_task(void *arg)
+{
+       RT_TASK_MCB mcb, mcb_r;
+       int ret, msg, notmsg;
+
+       traceobj_enter(&trobj);
+
+       for (msg = 0; msg < 10; msg++) {
+               rt_task_sleep(1000000);
+               mcb.opcode = 0x77;
+               mcb.data = &msg;
+               mcb.size = sizeof(msg);
+               mcb_r.data = &notmsg;
+               mcb_r.size = sizeof(notmsg);
+               notmsg = msg;
+               ret = rt_task_send(&t_bgnd, &mcb, &mcb_r, TM_INFINITE);
+               traceobj_assert(&trobj, ret == sizeof(msg));
+               traceobj_assert(&trobj, notmsg == ~msg);
+       }
+
+       traceobj_exit(&trobj);
+}
+
+int main(int argc, char *argv[])
+{
+       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);
+
+       traceobj_join(&trobj);
+
+       exit(0);
+}


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to