Tests: Add simple tests for converse message queue
authorPhil Miller <mille121@illinois.edu>
Tue, 22 Sep 2009 16:18:02 +0000 (16:18 +0000)
committerPhil Miller <mille121@illinois.edu>
Tue, 22 Sep 2009 16:18:02 +0000 (16:18 +0000)
tests/charm++/queue/Makefile [new file with mode: 0644]
tests/charm++/queue/test.C [new file with mode: 0644]
tests/charm++/queue/test.ci [new file with mode: 0644]

diff --git a/tests/charm++/queue/Makefile b/tests/charm++/queue/Makefile
new file mode 100644 (file)
index 0000000..326419f
--- /dev/null
@@ -0,0 +1,9 @@
+CHARMC := ../../../bin/charmc
+CXX := $(CHARMC)
+
+all: test
+
+test.C: test.decl.h
+
+test.decl.h: test.ci
+       $(CHARMC) $<
\ No newline at end of file
diff --git a/tests/charm++/queue/test.C b/tests/charm++/queue/test.C
new file mode 100644 (file)
index 0000000..f955cd8
--- /dev/null
@@ -0,0 +1,97 @@
+#include <iostream>
+#include <cstdlib>
+
+using std::cerr;
+using std::endl;
+using std::sprintf;
+
+#include "queueing.h"
+#include "main.decl.h"
+
+#define RUN_TEST(f) do { \
+  ++tests; \
+  if (f()) { \
+    ++success; \
+  } else { \
+    ++fail; \
+    cerr << "Test " #f " failed" << endl; \
+  } \
+} while (0)
+
+// A newly created Queue should be empty, which corresponds to a
+// length of 0
+bool test_empty()
+{
+  Queue q = CqsCreate();
+  bool result = (0 == CqsLength(q)) && (1 == CqsEmpty(q));
+  CqsDelete(q);
+  return result;
+}
+
+// Enqueueing an element should show that there is an element
+// present. We should get the same thing back when we dequeue
+//
+// Is the queue allowed to dereference the void* we give it?
+bool test_one()
+{
+  Queue q = CqsCreate();
+  void *p = 0;
+  CqsEnqueue(q, p);
+  bool result = (1 == CqsLength(q)) && (0 == CqsEmpty(q));
+  void *r;
+  CqsDequeue(q, &r);
+  result &= (r == p) 
+    && (0 == CqsLength(q)) 
+    && (1 == CqsEmpty(q));
+  CqsDelete(q);
+  return result;
+}
+
+// Put two in, see if we get the same two back. Order unspecified
+bool test_two()
+{
+  Queue q = CqsCreate();
+  void *i = 0, *j = (char *)1;
+  CqsEnqueue(q, i);
+  CqsEnqueue(q, j);
+  bool result = (2 == CqsLength(q));
+  void *r, *s;
+  CqsDequeue(q, &r);
+  CqsDequeue(q, &s);
+  result &= (r == i && s == j) || (r == j && s == i);
+  result &= 1 == CqsEmpty(q);
+  CqsDelete(q);
+  return result;
+}
+#if 0
+bool test_foo()
+{
+  Queue q = CqsCreate();
+  
+  bool result = ;
+  CqsDelete(q);
+  return result;
+}
+#endif
+
+struct main : public CBase_main
+{
+  main(CkArgMsg *)
+  {
+    int tests = 0, success = 0, fail = 0;
+    RUN_TEST(test_empty);
+    RUN_TEST(test_one);
+    RUN_TEST(test_two);
+    
+    if (fail) {
+      char message[100];
+      sprintf(message, "%d tests failed\n", fail);
+      CkAbort(message);
+    }
+    else
+      CkExit();
+  }
+
+};
+
+#include "main.def.h"
diff --git a/tests/charm++/queue/test.ci b/tests/charm++/queue/test.ci
new file mode 100644 (file)
index 0000000..094ef85
--- /dev/null
@@ -0,0 +1,7 @@
+mainmodule main
+{
+       mainchare main
+       {
+               entry main(CkArgMsg *);
+       }
+}
\ No newline at end of file