summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/src/tests/unit/coroutine.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2016-10-07 14:13:19 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2016-10-07 14:13:19 +0200
commitff01b716711b97c2fcaa709ea97f7650f106aa10 (patch)
tree50dd4d687f38f50c4e136af030c02c267c769f3a /3rdparty/asio/src/tests/unit/coroutine.cpp
parent2a138159c30457aecd9e9679be5159704db0f954 (diff)
Added ASIO networking library (nw)
Diffstat (limited to '3rdparty/asio/src/tests/unit/coroutine.cpp')
-rw-r--r--3rdparty/asio/src/tests/unit/coroutine.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/3rdparty/asio/src/tests/unit/coroutine.cpp b/3rdparty/asio/src/tests/unit/coroutine.cpp
new file mode 100644
index 00000000000..162cacdbb6d
--- /dev/null
+++ b/3rdparty/asio/src/tests/unit/coroutine.cpp
@@ -0,0 +1,112 @@
+//
+// coroutine.cpp
+// ~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Disable autolinking for unit tests.
+#if !defined(BOOST_ALL_NO_LIB)
+#define BOOST_ALL_NO_LIB 1
+#endif // !defined(BOOST_ALL_NO_LIB)
+
+// Test that header file is self-contained.
+#include "asio/coroutine.hpp"
+
+#include "unit_test.hpp"
+
+// Must come after all other headers.
+#include "asio/yield.hpp"
+
+//------------------------------------------------------------------------------
+
+// Coroutine completes via yield break.
+
+void yield_break_coro(asio::coroutine& coro)
+{
+ reenter (coro)
+ {
+ yield return;
+ yield break;
+ }
+}
+
+void yield_break_test()
+{
+ asio::coroutine coro;
+ ASIO_CHECK(!coro.is_complete());
+ yield_break_coro(coro);
+ ASIO_CHECK(!coro.is_complete());
+ yield_break_coro(coro);
+ ASIO_CHECK(coro.is_complete());
+}
+
+//------------------------------------------------------------------------------
+
+// Coroutine completes via return.
+
+void return_coro(asio::coroutine& coro)
+{
+ reenter (coro)
+ {
+ return;
+ }
+}
+
+void return_test()
+{
+ asio::coroutine coro;
+ return_coro(coro);
+ ASIO_CHECK(coro.is_complete());
+}
+
+//------------------------------------------------------------------------------
+
+// Coroutine completes via exception.
+
+void exception_coro(asio::coroutine& coro)
+{
+ reenter (coro)
+ {
+ throw 1;
+ }
+}
+
+void exception_test()
+{
+ asio::coroutine coro;
+ try { exception_coro(coro); } catch (int) {}
+ ASIO_CHECK(coro.is_complete());
+}
+
+//------------------------------------------------------------------------------
+
+// Coroutine completes by falling off the end.
+
+void fall_off_end_coro(asio::coroutine& coro)
+{
+ reenter (coro)
+ {
+ }
+}
+
+void fall_off_end_test()
+{
+ asio::coroutine coro;
+ fall_off_end_coro(coro);
+ ASIO_CHECK(coro.is_complete());
+}
+
+//------------------------------------------------------------------------------
+
+ASIO_TEST_SUITE
+(
+ "coroutine",
+ ASIO_TEST_CASE(yield_break_test)
+ ASIO_TEST_CASE(return_test)
+ ASIO_TEST_CASE(exception_test)
+ ASIO_TEST_CASE(fall_off_end_test)
+)