wangzhengquan
2020-07-20 f85c9b875b060681b51f57b15074ba1c7c9f5636
test/test_queue.c
@@ -1,47 +1,128 @@
#include "test.h"
using namespace std;
int main () {
void testStruct() {
   unsigned int i = 0;
   struct Item
   {
      int pic;
      int info;
   };
   int key = 2;
   struct Item item;
   size_t qsize = 10;
     SArrayLockFreeQueue<struct Item> *queue = QFactory::createArrayLockFreeQueue<struct Item> (1, qsize);
   size_t qsize = 16;
     //LockFreeQueue<struct Item> *queue = QueueFactory::createQueue<struct Item> (key, qsize);
   SHMQueue<struct Item> *queue = new SHMQueue<struct Item>(key, 16);
   // LockFreeQueue<struct Item> queue(16);
   for(i = 0; i < qsize; i++) {
      queue->add({i, i});
      if(queue->push({i, i})) {
          cout << i << " push:" << i << endl;
      }
   }
   for(i = 0; i < qsize; i++) {
   // for(i = 0; i < qsize; i++) {
      
      //queue->dequeue(item);
   //    //queue.dequeue(item);
      
      item = (*queue)[i];
      cout << "i=" << i << " item " << item.pic << "," << item.info << endl;
   }
   //    item = (*queue)[i];
   //    cout << "i=" << i << " item " << item.pic << "," << item.info << endl;
   // }
    
   struct timespec timeout = {5, 0};
   struct timespec timeout = {1, 0};
   i = 0;
   while((queue->remove_timeout(item, &timeout)) ) {
       cout << i << " 出队:" << item.pic << ", " << item.info << endl;
   while((queue->pop_timeout(item, &timeout)) ) {
       cout << i << " pop:" << item.pic << ", " << item.info << endl;
      // cout <<  item.pic << endl;
       i++;
   }
   destroy();
   delete queue;
}
void testString() {
   unsigned int i = 0;
   std::ostringstream outstr;
   int key = 2;
   shmstring item;
   size_t qsize = 16;
     //LockFreeQueue<struct Item> *queue = QueueFactory::createQueue<struct Item> (key, qsize);
   SHMQueue<shmstring> *queue = new SHMQueue<shmstring>(key, 16);
   // LockFreeQueue<struct Item> queue(16);
   for(i = 0; i < qsize; i++) {
      outstr.seekp(0);
      outstr << "hello " << i ;
      if(queue->push(outstr.str().c_str())) {
          cout << i << " push:" << outstr.str() << endl;
      }
   }
   // for(i = 0; i < qsize; i++) {
   //    //queue.dequeue(item);
   //    item = (*queue)[i];
   //    cout << "i=" << i << ":" << item << endl;
   // }
   struct timespec timeout = {1, 0};
   i = 0;
   while((queue->pop_timeout(item, &timeout)) ) {
       cout << i << " pop:" << item << endl;
      // cout <<  item.pic << endl;
       i++;
   }
   delete queue;
}
// void testArr(unsigned size) {
//    unsigned int i = 0;
//    int key = 2;
//    char item[size];
//    size_t qsize = 16;
//      //LockFreeQueue<struct Item> *queue = QueueFactory::createQueue<struct Item> (key, qsize);
//    SHMQueue<char[size]> *queue = new SHMQueue<char[size]>(key, 16);
//    // LockFreeQueue<struct Item> queue(16);
//    for(i = 0; i < qsize; i++) {
//       sprintf(item, "%d hello", i);
//       if(queue->push(item)) {
//           cout << i << " push:" << item << endl;
//       }
//    }
//    struct timespec timeout = {1, 0};
//    i = 0;
//    while((queue->pop_timeout(item, &timeout)) ) {
//        cout << i << " pop:" << item << endl;
//       // cout <<  item.pic << endl;
//        i++;
//    }
//    delete queue;
// }
int main () {
   mm_init(512);
   // testArr(12);
   testStruct();
   mm_destroy();
   return 0;
}