lichao
2021-05-06 7ecd6323ffedbfef92c87c02b2a8680dd53b772c
utest/api_test.cpp
@@ -102,91 +102,6 @@
using namespace std::chrono;
// using namespace std::chrono_literals;
BOOST_AUTO_TEST_CASE(MutexTest)
{
   // typedef robust::CasMutex<true> RobustMutex;
   typedef MutexWithPidCheck RobustMutex;
   for (int i = 0; i < 20; ++i) {
      int size = i;
      int left = size & 7;
      int rsize = size + ((8 - left) & 7);
      printf("size: %3d, rsize: %3d\n", size, rsize);
   }
   SharedMemory &shm = TestShm();
   // shm.Remove();
   // return;
   GlobalInit(shm);
   const std::string mtx_name("test_mutex");
   const std::string int_name("test_int");
   auto mtx = shm.FindOrCreate<RobustMutex>(mtx_name);
   auto pi = shm.FindOrCreate<int>(int_name, 100);
   std::mutex m;
   typedef std::chrono::steady_clock Clock;
   auto Now = []() { return Clock::now().time_since_epoch(); };
   if (pi) {
      auto old = *pi;
      printf("int : %d, add1: %d\n", old, ++*pi);
   }
   {
      boost::timer::auto_cpu_timer timer;
      const int ntimes = 1000 * 1000;
      printf("test lock/unlock %d times: ", ntimes);
      RobustMutex mutex;
      auto Lock = [&]() {
         for (int i = 0; i < ntimes; ++i) {
            mutex.lock();
            mutex.unlock();
         }
      };
      std::thread t1(Lock), t2(Lock);
      t1.join();
      t2.join();
   }
   auto MSFromNow = [](const int ms) {
      using namespace boost::posix_time;
      ptime cur = boost::posix_time::microsec_clock::universal_time();
      return cur + millisec(ms);
   };
   auto TryLock = [&]() {
      if (mtx->try_lock()) {
         printf("try_lock ok\n");
         return true;
      } else {
         printf("try_lock failed\n");
         return false;
      }
   };
   auto Unlock = [&]() {
      mtx->unlock();
      printf("unlocked\n");
   };
   if (mtx) {
      printf("mtx exists\n");
      if (TryLock()) {
         auto op = [&]() {
            if (TryLock()) {
               Unlock();
            }
         };
         op();
         std::thread t(op);
         t.join();
         // Unlock();
      } else {
         // mtx->unlock();
      }
   } else {
      printf("mtx not exists\n");
   }
}
BOOST_AUTO_TEST_CASE(ApiTest)
{
   auto max_time = std::chrono::steady_clock::time_point::max();
@@ -203,6 +118,8 @@
   printf("maxsec: %ld\n", CountSeconds(max_time));
   // BHCleanup();
   // return;
   bool reg = false;
   for (int i = 0; i < 3 && !reg; ++i) {
      ProcInfo proc;
@@ -234,7 +151,7 @@
      bool r = BHRegisterTopics(s.data(), s.size(), &reply, &reply_len, 1000);
      BHFree(reply, reply_len);
      // printf("register topic : %s\n", r ? "ok" : "failed");
      Sleep(1s);
      // Sleep(1s);
   }
   { // Subscribe
@@ -367,7 +284,7 @@
   threads.Launch(hb, &run);
   threads.Launch(showStatus, &run);
   int ncli = 10;
   const uint64_t nreq = 1000 * 100;
   const int64_t nreq = 1000 * 100;
   for (int i = 0; i < ncli; ++i) {
      threads.Launch(asyncRequest, nreq);
   }