]> git.stg.codes - stg.git/blobdiff - tests/test_async_pool.cpp
Add async pool (to replace EVENT_LOOP).
[stg.git] / tests / test_async_pool.cpp
diff --git a/tests/test_async_pool.cpp b/tests/test_async_pool.cpp
new file mode 100644 (file)
index 0000000..7e2e0cf
--- /dev/null
@@ -0,0 +1,54 @@
+#define BOOST_TEST_MODULE STGSubscriptions
+
+#include "async_pool.h"
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+namespace AsyncPoolST = STG::AsyncPoolST;
+
+namespace
+{
+
+size_t counter = 0;
+
+}
+
+BOOST_AUTO_TEST_SUITE()
+
+BOOST_AUTO_TEST_CASE(BeforeStart)
+{
+    BOOST_CHECK_EQUAL(counter, 0);
+    AsyncPoolST::enqueue([](){ ++counter; });
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    BOOST_CHECK_EQUAL(counter, 0);
+}
+
+BOOST_AUTO_TEST_CASE(AfterStart)
+{
+    BOOST_CHECK_EQUAL(counter, 0);
+    AsyncPoolST::start();
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    BOOST_CHECK_EQUAL(counter, 1);
+    AsyncPoolST::enqueue([](){ ++counter; });
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    BOOST_CHECK_EQUAL(counter, 2);
+}
+
+BOOST_AUTO_TEST_CASE(AfterStop)
+{
+    BOOST_CHECK_EQUAL(counter, 2);
+    AsyncPoolST::stop();
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    BOOST_CHECK_EQUAL(counter, 2);
+    AsyncPoolST::enqueue([](){ ++counter; });
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    BOOST_CHECK_EQUAL(counter, 2);
+}
+
+BOOST_AUTO_TEST_SUITE_END()