8 uint64_t loops = 100000;
13 void test_all_funcs(){
14 xpool_index idx1, idx2, ret;
17 idx1 = xpool_add(&xp, (xpool_data) 5);
18 if (idx1 == NoSerial) {
19 printf("couldn't add idx1\n");
22 printf("added 5 in idx %llu\n", idx1);
23 idx2 = xpool_add(&xp, (xpool_data) 6);
24 if (idx2 == NoSerial) {
25 printf("couldn't add idx2\n");
28 printf("added 6 in idx %llu\n", idx2);
30 ret = xpool_peek(&xp, &data);
31 if (ret == NoSerial) {
32 printf("couldn't peek\n");
35 printf("peeked xpool (idx %llu) and took data %u\n", ret, data);
36 ret = xpool_peek_idx(&xp, idx2, &data);
38 printf("couldn't peek\n");
41 printf("peeked xpool in idx %llu and took data %u\n", idx2, data);
42 ret = xpool_peek_and_fwd(&xp, &data);
43 if (ret == NoSerial) {
44 printf("couldn't peek\n");
47 printf("peeked and fwd xpool (idx %llu) and took data %u\n", ret, data);
48 ret = xpool_peek_and_fwd(&xp, &data);
49 if (ret == NoSerial) {
50 printf("couldn't peek\n");
53 printf("peeked and fwd xpool (idx %llu) and took data %u\n", ret, data);
55 ret = xpool_remove(&xp, idx1, &data);
57 printf("couldn't remove idx1\n");
60 if (data != (xpool_data) 5) {
61 printf("idx1 returned wrong value (%u)\n", data);
64 printf("removed idx1 with data %u\n", data);
65 ret = xpool_remove(&xp, idx2, &data);
67 printf("couldn't remove idx2\n");
70 if (data != (xpool_data) 6) {
71 printf("idx2 returned wrong value (%u)\n", data);
74 printf("removed idx2 with data %u\n", data);
76 printf("test succesfull\n");
79 void *xpool_func(void *arg)
85 struct timeval start, end;
87 gettimeofday(&start, NULL);
88 for (i = 0; i < loops; i++) {
89 idx = xpool_add(&xp, (xpool_data) id);
90 if (idx == NoSerial) {
91 printf("couldn't add idx\n");
95 ret = xpool_peek_idx(&xp, idx, &data);
97 printf("couldn't peek\n");
100 if (data != (xpool_data) id){
101 printf("peekidx returned wrong value %u instead of %u\n",
102 data, (xpool_data) id);
105 ret = xpool_peek_and_fwd(&xp, &data);
106 if (ret == NoSerial) {
107 printf("couldn't peek and fwd\n");
111 ret = xpool_remove(&xp, idx, &data);
113 // printf("couldn't remove idx: %llu\n", idx);
116 // if (data != (xpool_data) id){
117 // printf("remove returned wrong value %u instead of %u\n",
118 // data, (xpool_data) id);
122 gettimeofday(&end, NULL);
123 timersub(&end, &start, &end);
124 printf("%d: test succesfull (%llu loops in %u.%us)\n", id, loops, end.tv_sec, end.tv_usec);
129 void *xq_func(void *arg)
134 struct timeval start, end;
136 gettimeofday(&start, NULL);
137 for (i = 0; i < loops; i++) {
139 idx = xq_append_tail(&xq, (xqindex) id);
140 if (idx == NoSerial) {
141 printf("couldn't add idx\n");
145 ret = xpool_peek_idx(&xp, idx, &data);
147 printf("couldn't peek\n");
150 if (data != (xpool_data) id){
151 printf("peekidx returned wrong value %u instead of %u\n",
152 data, (xpool_data) id);
155 ret = xpool_peek_and_fwd(&xp, &data);
156 if (ret == NoSerial) {
157 printf("couldn't peek and fwd\n");
161 ret = xq_pop_head(&xq);
163 // printf("couldn't remove idx: %llu\n", idx);
166 //if (ret != (xqindex) id){
167 // printf("remove returned wrong value %u instead of %u\n",
168 // ret, (xqindex) id);
172 gettimeofday(&end, NULL);
173 timersub(&end, &start, &end);
174 printf("%d: test succesfull (%llu loops in %u.%us)\n", id, loops, end.tv_sec, end.tv_usec);
180 int main(int argc, const char *argv[])
183 size = atoi(argv[1]);
184 loops = atoi(argv[2]);
186 struct xpool_node* mem = malloc(sizeof(struct xpool_node) * size);
187 xqindex* xqmem = malloc(sizeof(xqindex) * size);
188 pthread_t *thread, tid;
192 thread = malloc(sizeof(pthread_t)*size);
194 printf("Testing xpool\n");
195 xpool_init(&xp, size, mem);
196 for (i = 0; i < size; i++) {
197 pthread_create(thread+i, NULL, xpool_func, (void *) i);
200 for (i = 0; i < size; i++) {
201 pthread_join(thread[i], &ret);
204 printf("Testing xq\n");
205 xq_init_empty(&xq, size, xqmem);
206 for (i = 0; i < size; i++) {
207 pthread_create(thread+i, NULL, xq_func, (void *) i);
210 for (i = 0; i < size; i++) {
211 pthread_join(thread[i], &ret);