Tests: Add simple tests for converse message queue
[charm.git] / tests / charm++ / queue / test.C
1 #include <iostream>
2 #include <cstdlib>
3
4 using std::cerr;
5 using std::endl;
6 using std::sprintf;
7
8 #include "queueing.h"
9 #include "main.decl.h"
10
11 #define RUN_TEST(f) do { \
12   ++tests; \
13   if (f()) { \
14     ++success; \
15   } else { \
16     ++fail; \
17     cerr << "Test " #f " failed" << endl; \
18   } \
19 } while (0)
20
21 // A newly created Queue should be empty, which corresponds to a
22 // length of 0
23 bool test_empty()
24 {
25   Queue q = CqsCreate();
26   bool result = (0 == CqsLength(q)) && (1 == CqsEmpty(q));
27   CqsDelete(q);
28   return result;
29 }
30
31 // Enqueueing an element should show that there is an element
32 // present. We should get the same thing back when we dequeue
33 //
34 // Is the queue allowed to dereference the void* we give it?
35 bool test_one()
36 {
37   Queue q = CqsCreate();
38   void *p = 0;
39   CqsEnqueue(q, p);
40   bool result = (1 == CqsLength(q)) && (0 == CqsEmpty(q));
41   void *r;
42   CqsDequeue(q, &r);
43   result &= (r == p) 
44     && (0 == CqsLength(q)) 
45     && (1 == CqsEmpty(q));
46   CqsDelete(q);
47   return result;
48 }
49
50 // Put two in, see if we get the same two back. Order unspecified
51 bool test_two()
52 {
53   Queue q = CqsCreate();
54   void *i = 0, *j = (char *)1;
55   CqsEnqueue(q, i);
56   CqsEnqueue(q, j);
57   bool result = (2 == CqsLength(q));
58   void *r, *s;
59   CqsDequeue(q, &r);
60   CqsDequeue(q, &s);
61   result &= (r == i && s == j) || (r == j && s == i);
62   result &= 1 == CqsEmpty(q);
63   CqsDelete(q);
64   return result;
65 }
66 #if 0
67 bool test_foo()
68 {
69   Queue q = CqsCreate();
70   
71   bool result = ;
72   CqsDelete(q);
73   return result;
74 }
75 #endif
76
77 struct main : public CBase_main
78 {
79   main(CkArgMsg *)
80   {
81     int tests = 0, success = 0, fail = 0;
82     RUN_TEST(test_empty);
83     RUN_TEST(test_one);
84     RUN_TEST(test_two);
85     
86     if (fail) {
87       char message[100];
88       sprintf(message, "%d tests failed\n", fail);
89       CkAbort(message);
90     }
91     else
92       CkExit();
93   }
94
95 };
96
97 #include "main.def.h"