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 = ¬msg; + 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