Charm Queue and its tests: Increase coverage, and cleanup
authorPhil Miller <mille121@illinois.edu>
Tue, 29 Sep 2009 23:13:42 +0000 (23:13 +0000)
committerPhil Miller <mille121@illinois.edu>
Tue, 29 Sep 2009 23:13:42 +0000 (23:13 +0000)
Start testing CqsEnqueueGeneral, with CQS_QUEUEING_FIFO and
CQS_QUEUEING_IFIFO.

Document that callers of CqsEnumerateQueue must CmiFree the result,
and do so in the test.

src/conv-core/queueing.c
src/conv-core/queueing.h
tests/charm++/queue/pgm.C

index c4dd609bae493f3a033ef79962914fce67a4fccd..1f68b547c8d5c6cb4c9bd3c5ede176ba75a56ed0 100644 (file)
@@ -5,9 +5,9 @@
  * $Revision$
  *****************************************************************************/
 
+#include "queueing.h"
 #include <converse.h>
 #include <string.h>
-#include "queueing.h"
 
 /** @defgroup CharmScheduler 
     @brief The portion of Charm++ responsible for scheduling the execution 
index c8f745be03939cecc5b66d834499f1a5a311eb52..98faa27b944bf0e18e3b587b1d74f5ef614ab510 100644 (file)
@@ -9,7 +9,6 @@
 #define QUEUEING_H
 /*#define FASTQ*/
 
-
 /** 
     @file 
     Declarations of queuing data structure functions.
@@ -19,7 +18,6 @@
     @{
  */
 
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -173,8 +171,8 @@ void CqsEnqueueLifo(Queue, void *msg);
     Enqueue something (usually an envelope*) into the queue in a
     manner consistent with the specified strategy and priority.
 */
-void CqsEnqueueGeneral(Queue, void *msg,int strategy, 
-              int priobits, unsigned int *prioPtr);
+void CqsEnqueueGeneral(Queue, void *msg, int strategy, 
+                      int priobits, unsigned int *prioPtr);
 
 /**
     Produce an array containing all the entries in a Queue
@@ -182,7 +180,8 @@ void CqsEnqueueGeneral(Queue, void *msg,int strategy,
     elements in the Queue.
     @param [in] q a Queue
     @param [out] resp an array of pointer entries found in the Queue,
-    with as many entries as the Queue's length
+    with as many entries as the Queue's length. The caller must
+    CmiFree this.
 */
 void CqsEnumerateQueue(Queue q, void ***resp);
 
index be467801d533308fcb7460c5a506c2ffe0635f35..128a08e90e9e8fe57c735e0befc45339748e6c0c 100644 (file)
@@ -133,6 +133,44 @@ bool test_enumerate()
   CqsEnumerateQueue(q, &e);
   int n = CqsLength(q);
   bool result = findEntry(e, n, i) && findEntry(e, n, j) && findEntry(e, n, k);
+  CmiFree(e);
+  CqsDelete(q);
+  return result;
+}
+
+bool test_general_fifo()
+{
+  Queue q = CqsCreate();
+  void *i = (char *)1, *j = (char *)2, *k = (char *)3;
+  void **e;
+  CqsEnqueueGeneral(q, i, CQS_QUEUEING_FIFO, 1, 0);
+  CqsEnqueueGeneral(q, j, CQS_QUEUEING_FIFO, 2, 0);
+  CqsEnqueueGeneral(q, k, CQS_QUEUEING_FIFO, 42, 0);
+  void *r, *s, *t;
+  CqsDequeue(q, &r);
+  CqsDequeue(q, &s);
+  CqsDequeue(q, &t);
+  bool result = (r == i) && (s == j) && (t == k);
+  cerr << "r s t" << r << s << t;
+  CqsDelete(q);
+  return result;
+}
+
+bool test_general_ififo()
+{
+  Queue q = CqsCreate();
+  void *i = (char *)1, *j = (char *)2, *k = (char *)3;
+  void **e;
+  unsigned int a = -1, b = 0, c = 1;
+  CqsEnqueueGeneral(q, i, CQS_QUEUEING_IFIFO, 8*sizeof(int), &c);
+  CqsEnqueueGeneral(q, j, CQS_QUEUEING_IFIFO, 8*sizeof(int), &b);
+  CqsEnqueueGeneral(q, k, CQS_QUEUEING_IFIFO, 8*sizeof(int), &a);
+  void *r, *s, *t;
+  CqsDequeue(q, &r);
+  CqsDequeue(q, &s);
+  CqsDequeue(q, &t);
+  bool result = (r == k) && (s == j) && (t == i);
+  cerr << "r s t" << r << s << t;
   CqsDelete(q);
   return result;
 }
@@ -163,6 +201,8 @@ struct main : public CBase_main
     RUN_TEST(test_lifo);
     RUN_TEST(test_enqueue_mixed);
     RUN_TEST(test_enumerate);
+    RUN_TEST(test_general_fifo);
+    RUN_TEST(test_general_ififo);
 
     if (fail) {
       sprintf(message, "%d/%d tests failed\n", fail, tests);