Add new methods to tizen_base::SharedQueue
[platform/core/base/bundle.git] / tests / tizen-shared-queue_unittests / test_shared_queue.cc
index a20c398..d41ca40 100644 (file)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <chrono>
 #include <iostream>
 #include <thread>
 
@@ -52,6 +53,35 @@ TEST(SharedQueueTest, PushAndWaitAndPop) {
   EXPECT_TRUE(job.Done());
 }
 
+TEST(SharedQueueTest, TryAndPop) {
+  tizen_base::SharedQueue<Job> queue;
+  Job job;
+  EXPECT_FALSE(queue.TryAndPop(job));
+  queue.Push(Job());
+  EXPECT_TRUE(queue.TryAndPop(job));
+}
+
+TEST(SharedQueueTest, WaitAndPopFor) {
+  tizen_base::SharedQueue<Job> queue;
+  Job job;
+  std::chrono::steady_clock::time_point begin =
+      std::chrono::steady_clock::now();
+  EXPECT_FALSE(queue.WaitAndPopFor(job, 110));
+  std::chrono::steady_clock::time_point end =
+      std::chrono::steady_clock::now();
+  auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(
+      end - begin).count();
+  EXPECT_TRUE(elapsed_time > 100);
+
+  queue.Push(Job());
+  begin = std::chrono::steady_clock::now();
+  EXPECT_TRUE(queue.WaitAndPopFor(job, 100));
+  end = std::chrono::steady_clock::now();
+  elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(
+      end - begin).count();
+  EXPECT_TRUE(elapsed_time < 100);
+}
+
 TEST(SharedQueueTest, IsEmpty) {
   tizen_base::SharedQueue<Job> queue;
   EXPECT_TRUE(queue.IsEmpty());