Index: c/src/tests/sptests/ChangeLog
===================================================================
--- c/src/tests/sptests/ChangeLog	(revision 144b94fa40f4ee892bbb9a36e8ab1517d1ba4069)
+++ c/src/tests/sptests/ChangeLog	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -1,2 +1,9 @@
+2002-09-14	Aaron J. Grier <aaron@frye.com>
+
+	* PR271 was not applicable against the current source but included
+	a nice test that Joel decided to add to the tree as sp32.
+	* sp32/Makefile.am, sp32/init.c, sp32/sp32.scn: New file.
+	* Makefile.am, configure.ac: Modified to reflect addition.
+
 2002-08-11	Ralf Corsepius <corsepiu@faw.uni-ulm.de>
 
Index: c/src/tests/sptests/Makefile.am
===================================================================
--- c/src/tests/sptests/Makefile.am	(revision 144b94fa40f4ee892bbb9a36e8ab1517d1ba4069)
+++ c/src/tests/sptests/Makefile.am	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -8,5 +8,5 @@
 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 sp27 sp28 sp29 \
-    sp30 sp31 spsize
+    sp30 sp31 sp32 spsize
 
 EXTRA_DIST = sptests.am spfatal
Index: c/src/tests/sptests/configure.ac
===================================================================
--- c/src/tests/sptests/configure.ac	(revision 144b94fa40f4ee892bbb9a36e8ab1517d1ba4069)
+++ c/src/tests/sptests/configure.ac	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -67,4 +67,5 @@
 sp30/Makefile
 sp31/Makefile
+sp32/Makefile
 spsize/Makefile
 ])
Index: c/src/tests/sptests/sp32/Makefile.am
===================================================================
--- c/src/tests/sptests/sp32/Makefile.am	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
+++ c/src/tests/sptests/sp32/Makefile.am	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -0,0 +1,34 @@
+##
+## $Id$
+##
+
+TEST = sp32
+
+MANAGERS = io rate_monotonic
+
+C_FILES = init.c
+C_O_FILES = $(C_FILES:%.c=${ARCH}/%.$(OBJEXT))
+
+DOCTYPES = scn
+DOCS = $(DOCTYPES:%=$(TEST).%)
+
+SRCS = $(C_FILES) $(H_FILES)
+OBJS = $(C_O_FILES)
+
+PRINT_SRCS = $(DOCS)
+
+PGM = ${ARCH}/$(TEST).exe
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../../automake/compile.am
+include $(top_srcdir)/../../../../automake/leaf.am
+include $(top_srcdir)/sptests.am
+
+${PGM}: $(OBJS) $(LINK_FILES)
+	$(make-exe)
+
+all-local: $(ARCH) $(TMPINSTALL_FILES)
+
+EXTRA_DIST = $(C_FILES) $(DOCS)
+
+include $(top_srcdir)/../../../../automake/local.am
Index: c/src/tests/sptests/sp32/init.c
===================================================================
--- c/src/tests/sptests/sp32/init.c	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
+++ c/src/tests/sptests/sp32/init.c	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -0,0 +1,111 @@
+/* spmonotonic -- sanity check the rate monotonic manager
+ *
+ * license and distribution terms for this file may be found in the file
+ * LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html .
+ *
+ * $Id$
+ */
+
+#include <tmacros.h>  /* includes bsp.h, stdio, etc... */
+
+/* prototype */
+rtems_task Init (rtems_task_argument ignored);
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_MAXIMUM_TASKS  			1
+#define CONFIGURE_MAXIMUM_PERIODS  		1
+
+#define CONFIGURE_INIT
+
+#include <confdefs.h>
+
+rtems_task Init(
+    rtems_task_argument ignored
+) {
+  rtems_status_code	status;
+  rtems_interval		timestamps[6],
+  			wantintervals[5] =
+  			    { 1, 50, 200, 25, 3 };
+  rtems_name		period_name =
+  			    rtems_build_name('P','E','R','a');
+  rtems_id		period_id;
+  int			loopy;
+
+  printf("\n\n*** TEST 32 ***\n");
+
+  /* create period */
+  status = rtems_rate_monotonic_create(
+      period_name,
+      &period_id
+  );
+  directive_failed(status, "rate_monotonic_create");
+
+  /* start period with initial value */
+  status = rtems_rate_monotonic_period(
+      period_id,
+      wantintervals[0]
+  );
+  directive_failed(status, "rate_monotonic_period");
+
+  /* get our first timestamp */
+  status = rtems_clock_get(
+      RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+      &timestamps[0]
+  );
+  directive_failed(status, "clock_get");
+
+  /* loop through and gather more timestamps */
+  for (loopy = 1; loopy < 5; loopy++) {
+
+  	status = rtems_rate_monotonic_period(
+  	    period_id,
+  	    wantintervals[loopy]
+  	);
+  	directive_failed(status, "rate_monotonic_period");
+
+  	status = rtems_clock_get(
+  	    RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+  	    &timestamps[loopy]
+  	);
+  	directive_failed(status, "clock_get");
+  }
+
+  /* block one last time */
+  status = rtems_rate_monotonic_period(
+      period_id,
+      1
+  );
+  directive_failed(status, "rate_monotonic_period");
+
+  /* get one last timestamp */
+  status = rtems_clock_get(
+      RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+      &timestamps[loopy]
+  );
+  directive_failed(status, "clock_get");
+
+  /* cancel the period */
+  status = rtems_rate_monotonic_cancel(period_id);
+  directive_failed(status, "rate_monotonic_cancel");
+
+  /* delete it */
+  status = rtems_rate_monotonic_delete(period_id);
+  directive_failed(status, "rate_monotonic_delete");
+
+  /* tabulate and print results */
+  for (loopy = 0; loopy < 5; loopy++) {
+  	printf(
+  	    "period %d: measured %d tick(s), wanted %d\n",
+  	    loopy, timestamps[loopy+1] - timestamps[loopy],
+  	    wantintervals[loopy]
+  	);
+  }
+
+  /* the end */
+  printf("*** END OF TEST SP32 ***\n");
+  exit(0);
+}
Index: c/src/tests/sptests/sp32/sp32.scn
===================================================================
--- c/src/tests/sptests/sp32/sp32.scn	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
+++ c/src/tests/sptests/sp32/sp32.scn	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -0,0 +1,7 @@
+*** TEST 32 ***
+period 0: measured 1 tick(s), wanted 1
+period 1: measured 50 tick(s), wanted 50
+period 2: measured 200 tick(s), wanted 200
+period 3: measured 25 tick(s), wanted 25
+period 4: measured 3 tick(s), wanted 3
+*** END OF TEST SP32 ***
Index: testsuites/sptests/ChangeLog
===================================================================
--- testsuites/sptests/ChangeLog	(revision 144b94fa40f4ee892bbb9a36e8ab1517d1ba4069)
+++ testsuites/sptests/ChangeLog	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -1,2 +1,9 @@
+2002-09-14	Aaron J. Grier <aaron@frye.com>
+
+	* PR271 was not applicable against the current source but included
+	a nice test that Joel decided to add to the tree as sp32.
+	* sp32/Makefile.am, sp32/init.c, sp32/sp32.scn: New file.
+	* Makefile.am, configure.ac: Modified to reflect addition.
+
 2002-08-11	Ralf Corsepius <corsepiu@faw.uni-ulm.de>
 
Index: testsuites/sptests/Makefile.am
===================================================================
--- testsuites/sptests/Makefile.am	(revision 144b94fa40f4ee892bbb9a36e8ab1517d1ba4069)
+++ testsuites/sptests/Makefile.am	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -8,5 +8,5 @@
 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 sp27 sp28 sp29 \
-    sp30 sp31 spsize
+    sp30 sp31 sp32 spsize
 
 EXTRA_DIST = sptests.am spfatal
Index: testsuites/sptests/configure.ac
===================================================================
--- testsuites/sptests/configure.ac	(revision 144b94fa40f4ee892bbb9a36e8ab1517d1ba4069)
+++ testsuites/sptests/configure.ac	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -67,4 +67,5 @@
 sp30/Makefile
 sp31/Makefile
+sp32/Makefile
 spsize/Makefile
 ])
Index: testsuites/sptests/sp32/Makefile.am
===================================================================
--- testsuites/sptests/sp32/Makefile.am	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
+++ testsuites/sptests/sp32/Makefile.am	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -0,0 +1,34 @@
+##
+## $Id$
+##
+
+TEST = sp32
+
+MANAGERS = io rate_monotonic
+
+C_FILES = init.c
+C_O_FILES = $(C_FILES:%.c=${ARCH}/%.$(OBJEXT))
+
+DOCTYPES = scn
+DOCS = $(DOCTYPES:%=$(TEST).%)
+
+SRCS = $(C_FILES) $(H_FILES)
+OBJS = $(C_O_FILES)
+
+PRINT_SRCS = $(DOCS)
+
+PGM = ${ARCH}/$(TEST).exe
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../../automake/compile.am
+include $(top_srcdir)/../../../../automake/leaf.am
+include $(top_srcdir)/sptests.am
+
+${PGM}: $(OBJS) $(LINK_FILES)
+	$(make-exe)
+
+all-local: $(ARCH) $(TMPINSTALL_FILES)
+
+EXTRA_DIST = $(C_FILES) $(DOCS)
+
+include $(top_srcdir)/../../../../automake/local.am
Index: testsuites/sptests/sp32/init.c
===================================================================
--- testsuites/sptests/sp32/init.c	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
+++ testsuites/sptests/sp32/init.c	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -0,0 +1,111 @@
+/* spmonotonic -- sanity check the rate monotonic manager
+ *
+ * license and distribution terms for this file may be found in the file
+ * LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html .
+ *
+ * $Id$
+ */
+
+#include <tmacros.h>  /* includes bsp.h, stdio, etc... */
+
+/* prototype */
+rtems_task Init (rtems_task_argument ignored);
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_MAXIMUM_TASKS  			1
+#define CONFIGURE_MAXIMUM_PERIODS  		1
+
+#define CONFIGURE_INIT
+
+#include <confdefs.h>
+
+rtems_task Init(
+    rtems_task_argument ignored
+) {
+  rtems_status_code	status;
+  rtems_interval		timestamps[6],
+  			wantintervals[5] =
+  			    { 1, 50, 200, 25, 3 };
+  rtems_name		period_name =
+  			    rtems_build_name('P','E','R','a');
+  rtems_id		period_id;
+  int			loopy;
+
+  printf("\n\n*** TEST 32 ***\n");
+
+  /* create period */
+  status = rtems_rate_monotonic_create(
+      period_name,
+      &period_id
+  );
+  directive_failed(status, "rate_monotonic_create");
+
+  /* start period with initial value */
+  status = rtems_rate_monotonic_period(
+      period_id,
+      wantintervals[0]
+  );
+  directive_failed(status, "rate_monotonic_period");
+
+  /* get our first timestamp */
+  status = rtems_clock_get(
+      RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+      &timestamps[0]
+  );
+  directive_failed(status, "clock_get");
+
+  /* loop through and gather more timestamps */
+  for (loopy = 1; loopy < 5; loopy++) {
+
+  	status = rtems_rate_monotonic_period(
+  	    period_id,
+  	    wantintervals[loopy]
+  	);
+  	directive_failed(status, "rate_monotonic_period");
+
+  	status = rtems_clock_get(
+  	    RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+  	    &timestamps[loopy]
+  	);
+  	directive_failed(status, "clock_get");
+  }
+
+  /* block one last time */
+  status = rtems_rate_monotonic_period(
+      period_id,
+      1
+  );
+  directive_failed(status, "rate_monotonic_period");
+
+  /* get one last timestamp */
+  status = rtems_clock_get(
+      RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+      &timestamps[loopy]
+  );
+  directive_failed(status, "clock_get");
+
+  /* cancel the period */
+  status = rtems_rate_monotonic_cancel(period_id);
+  directive_failed(status, "rate_monotonic_cancel");
+
+  /* delete it */
+  status = rtems_rate_monotonic_delete(period_id);
+  directive_failed(status, "rate_monotonic_delete");
+
+  /* tabulate and print results */
+  for (loopy = 0; loopy < 5; loopy++) {
+  	printf(
+  	    "period %d: measured %d tick(s), wanted %d\n",
+  	    loopy, timestamps[loopy+1] - timestamps[loopy],
+  	    wantintervals[loopy]
+  	);
+  }
+
+  /* the end */
+  printf("*** END OF TEST SP32 ***\n");
+  exit(0);
+}
Index: testsuites/sptests/sp32/sp32.scn
===================================================================
--- testsuites/sptests/sp32/sp32.scn	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
+++ testsuites/sptests/sp32/sp32.scn	(revision 0af7c204341e66d6004aa14ba9a84fef87675664)
@@ -0,0 +1,7 @@
+*** TEST 32 ***
+period 0: measured 1 tick(s), wanted 1
+period 1: measured 50 tick(s), wanted 50
+period 2: measured 200 tick(s), wanted 200
+period 3: measured 25 tick(s), wanted 25
+period 4: measured 3 tick(s), wanted 3
+*** END OF TEST SP32 ***
