summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-11-10 20:36:25 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-11-10 20:36:25 +0000
commit74db82a343c7d2451b6887536608232dee172253 (patch)
tree9e390044d1fff009655864464227fdf9cc7e854b /testsuites
parentPatch from Eric Norum <eric@cls.usask.ca> which includes: (diff)
downloadrtems-74db82a343c7d2451b6887536608232dee172253.tar.bz2
rtems_semaphore_flush test from Eric Norum <eric@cls.usask.ca>.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/sptests/Makefile.am2
-rw-r--r--testsuites/sptests/sp27/init.c103
-rw-r--r--testsuites/sptests/sp27/sp27.doc0
-rw-r--r--testsuites/sptests/sp27/sp27.scn0
4 files changed, 104 insertions, 1 deletions
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am
index aaf59aba19..42ff48706d 100644
--- a/testsuites/sptests/Makefile.am
+++ b/testsuites/sptests/Makefile.am
@@ -15,7 +15,7 @@ all-local: $(PREINSTALLDIRS)
## sp10 and spfatal are not included for now
SUBDIRS = . sp01 sp02 sp03 sp04 sp05 sp06 sp07 sp08 sp09 sp11 sp12 sp13 sp14 \
- sp15 sp16 sp17 sp19 sp20 sp21 sp22 sp23 sp24 sp25 sp26 spsize
+ sp15 sp16 sp17 sp19 sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 spsize
include $(top_srcdir)/../../../../automake/subdirs.am
include $(top_srcdir)/../../../../automake/local.am
diff --git a/testsuites/sptests/sp27/init.c b/testsuites/sptests/sp27/init.c
new file mode 100644
index 0000000000..4ae5befb78
--- /dev/null
+++ b/testsuites/sptests/sp27/init.c
@@ -0,0 +1,103 @@
+/*
+ * Test for rtems_semaphore_flush
+ *
+ * $Id$
+ */
+
+#include <bsp.h>
+
+rtems_task Init (rtems_task_argument argument);
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MICROSECONDS_PER_TICK 52429
+
+#define CONFIGURE_INIT
+
+#include <confdefs.h>
+
+#include <rtems/error.h>
+#include <stdio.h>
+
+#define NTASK 4
+
+rtems_id semaphore;
+volatile int flags[NTASK];
+
+rtems_task
+subtask (rtems_task_argument arg)
+{
+ rtems_status_code sc;
+
+ for (;;) {
+ flags[arg]++;
+ sc = rtems_semaphore_obtain (semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ if (sc == RTEMS_SUCCESSFUL)
+ puts ("Obtained semaphore -- and should not have done so!");
+ else if (sc != RTEMS_UNSATISFIED)
+ printf ("Can't get semaphore: %s\n", rtems_status_text (sc));
+ }
+}
+
+void
+starttask (int arg)
+{
+ rtems_id tid;
+ rtems_status_code sc;
+ rtems_task_priority priority;
+
+ rtems_task_set_priority (RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority);
+ sc = rtems_task_create (rtems_build_name ('S', 'R', 'V', arg + 'A'),
+ priority,
+ 10000,
+ RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
+ RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
+ &tid);
+ if (sc != RTEMS_SUCCESSFUL) {
+ printf ("Can't create task: %s\n", rtems_status_text (sc));
+ rtems_task_suspend (RTEMS_SELF);
+ }
+ sc = rtems_task_start (tid, subtask, arg);
+ if (sc != RTEMS_SUCCESSFUL) {
+ printf ("Can't start task: %s\n", rtems_status_text (sc));
+ rtems_task_suspend (RTEMS_SELF);
+ }
+}
+
+rtems_task
+Init (rtems_task_argument ignored)
+{
+ int pass, i;
+ rtems_status_code sc;
+
+ puts("**** Semaphore flush test ****");
+ sc = rtems_semaphore_create (
+ rtems_build_name ('S', 'E', 'M', 'F'),
+ 0,
+ RTEMS_LOCAL|RTEMS_BINARY_SEMAPHORE|RTEMS_NO_INHERIT_PRIORITY|RTEMS_NO_PRIORITY_CEILING|RTEMS_FIFO,
+ 0,
+ &semaphore);
+ if (sc != RTEMS_SUCCESSFUL) {
+ printf ("Can't flush semaphore: %s\n", rtems_status_text (sc));
+ exit (1);
+ }
+ for (i = 0 ; i < NTASK ; i++)
+ starttask (i);
+ for (pass = 1 ; pass < 10 ; pass++) {
+ rtems_task_wake_after (1);
+ for (i = 0 ; i < NTASK ; i++) {
+ if (flags[i] != pass)
+ printf ("flags[%d] = %d -- expected %d\n", i, flags[i], pass);
+ }
+ sc = rtems_semaphore_flush (semaphore);
+ if (sc != RTEMS_SUCCESSFUL) {
+ printf ("Can't flush semaphore: %s\n", rtems_status_text (sc));
+ exit (1);
+ }
+ }
+ puts ("**** Semaphore flush test succeeded ****");
+ exit (1);
+}
diff --git a/testsuites/sptests/sp27/sp27.doc b/testsuites/sptests/sp27/sp27.doc
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuites/sptests/sp27/sp27.doc
diff --git a/testsuites/sptests/sp27/sp27.scn b/testsuites/sptests/sp27/sp27.scn
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuites/sptests/sp27/sp27.scn