{"sha":"fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","node_id":"MDY6Q29tbWl0MzU2ODEzNzY6ZmRiM2FiNDExNzc3YTY4MzA1YjFkZDBjNzc0MTdkMTJlZjViYTliMw==","commit":{"author":{"name":"Felix Petriconi","email":"FelixPetriconi@users.noreply.github.com","date":"2018-07-21T13:44:46Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2018-07-21T13:44:46Z"},"message":"Merge pull request #173 from stlab/develop\n\nRelease 1.3.1","tree":{"sha":"97c06c0a55cabd260d0b6d2a53cd46601807a1ca","url":"https://api.github.com/repos/stlab/stlab/git/trees/97c06c0a55cabd260d0b6d2a53cd46601807a1ca"},"url":"https://api.github.com/repos/stlab/stlab/git/commits/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJbUzjOCRBK7hj4Ov3rIwAAdHIIABAtB6OwLk1oi0F1h8w0aQnE\n6ds7iLACanZo3Fam28F+7hly9eJz0bpQcvXTsdriOhxbgvDQL9tRPyvETOmxWcXj\nySCuuH5aQczPwLsdMguLil3+y01FPGqJC/WLdcfcKvhVi1IWGgauyYjY1uSLyt2K\n3T1SVjDyZ+ZkTz76eERKSEtj3FmN23SfDIj0GyaiwmqKNG0sE39rACWKBnyE8AXS\noHCZxYZEjRmJacCljDxq8YBoUSAncxCVBVnc5QbhKQbFkYobDJ1xKC1arH0cefQW\n6ifjNB47I/ll6WAFP58Ti8naPE/XzYjlLvQo+pDO0s3FXbtYgA8lF4nt7zyD65o=\n=RJzW\n-----END PGP SIGNATURE-----\n","payload":"tree 97c06c0a55cabd260d0b6d2a53cd46601807a1ca\nparent 128cc41d441e6f4b695ab00fc2592f11aa896d58\nparent 41d7c95a17be9446b4b4b94e0a88c738a4be543e\nauthor Felix Petriconi <FelixPetriconi@users.noreply.github.com> 1532180686 +0200\ncommitter GitHub <noreply@github.com> 1532180686 +0200\n\nMerge pull request #173 from stlab/develop\n\nRelease 1.3.1","verified_at":"2024-11-07T19:04:41Z"}},"url":"https://api.github.com/repos/stlab/stlab/commits/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","html_url":"https://github.com/stlab/stlab/commit/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","comments_url":"https://api.github.com/repos/stlab/stlab/commits/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/comments","author":{"login":"FelixPetriconi","id":612377,"node_id":"MDQ6VXNlcjYxMjM3Nw==","avatar_url":"https://avatars.githubusercontent.com/u/612377?v=4","gravatar_id":"","url":"https://api.github.com/users/FelixPetriconi","html_url":"https://github.com/FelixPetriconi","followers_url":"https://api.github.com/users/FelixPetriconi/followers","following_url":"https://api.github.com/users/FelixPetriconi/following{/other_user}","gists_url":"https://api.github.com/users/FelixPetriconi/gists{/gist_id}","starred_url":"https://api.github.com/users/FelixPetriconi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FelixPetriconi/subscriptions","organizations_url":"https://api.github.com/users/FelixPetriconi/orgs","repos_url":"https://api.github.com/users/FelixPetriconi/repos","events_url":"https://api.github.com/users/FelixPetriconi/events{/privacy}","received_events_url":"https://api.github.com/users/FelixPetriconi/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"128cc41d441e6f4b695ab00fc2592f11aa896d58","url":"https://api.github.com/repos/stlab/stlab/commits/128cc41d441e6f4b695ab00fc2592f11aa896d58","html_url":"https://github.com/stlab/stlab/commit/128cc41d441e6f4b695ab00fc2592f11aa896d58"},{"sha":"41d7c95a17be9446b4b4b94e0a88c738a4be543e","url":"https://api.github.com/repos/stlab/stlab/commits/41d7c95a17be9446b4b4b94e0a88c738a4be543e","html_url":"https://github.com/stlab/stlab/commit/41d7c95a17be9446b4b4b94e0a88c738a4be543e"}],"stats":{"total":580,"additions":311,"deletions":269},"files":[{"sha":"ec7812dd33287cf7616f533119a667dd2d0c0fe1","filename":"CHANGES.md","status":"modified","additions":8,"deletions":0,"changes":8,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/CHANGES.md","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/CHANGES.md","contents_url":"https://api.github.com/repos/stlab/stlab/contents/CHANGES.md?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -1,3 +1,11 @@\n+## v1.3.1 - 2018 - July - 21\n+\n+- Fixed Issues \n+   - [#169](https://github.com/stlab/libraries/issues/169) : when_all() appears to ignore the passed-in executor\n+   - [#168](https://github.com/stlab/libraries/issues/168) : Main Executor requires \"widgets\" to be dragged into Qt build\n+   - [#167](https://github.com/stlab/libraries/issues/167) : Main Executor has potential segfault\n+   - [#166](https://github.com/stlab/libraries/issues/166) : Multiple task_system and system_timer are being created\n+\n ## v1.3.0 - 2018 - July - 15\n \n - Fixed Issues "},{"sha":"b1af87bbca031505da5d6e80bda1561283e7395c","filename":"stlab/concurrency/default_executor.hpp","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Fdefault_executor.hpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Fdefault_executor.hpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/stlab%2Fconcurrency%2Fdefault_executor.hpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -10,6 +10,7 @@\n #define STLAB_CONCURRENCY_DEFAULT_EXECUTOR_HPP\n \n #include <stlab/concurrency/config.hpp>\n+#include <stlab/concurrency/task.hpp>\n \n #include <chrono>\n #include <functional>\n@@ -287,10 +288,9 @@ class task_system {\n struct default_executor_type {\n     using result_type = void;\n \n-    template <typename F>\n-    void operator()(F&& f) const {\n+    void operator()(task<void()> f) const {\n         static task_system only_task_system;\n-        only_task_system(std::forward<F>(f));\n+        only_task_system(std::move(f));\n     }\n };\n "},{"sha":"427c4ecf015717acba25ee51df590ee2235e9a6e","filename":"stlab/concurrency/future.hpp","status":"modified","additions":28,"deletions":19,"changes":47,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Ffuture.hpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Ffuture.hpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/stlab%2Fconcurrency%2Ffuture.hpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -1160,13 +1160,15 @@ auto when_all(E executor, F f, future<Ts>... args) {\n     using result_t = decltype(detail::apply_tuple(std::declval<F>(), std::declval<vt_t>()));\n \n     auto shared = std::make_shared<detail::when_all_shared<F, opt_t>>();\n-    auto p = package<result_t()>(std::move(executor), [_f = std::move(f), _p = shared] {\n+    auto p = package<result_t()>(executor, [_f = std::move(f), _p = shared] {\n         return detail::apply_when_all_args(_f, _p);\n     });\n     shared->_f = std::move(p.first);\n \n     detail::attach_when_args(shared, std::move(args)...);\n \n+    executor(std::move(p.first));\n+\n     return std::move(p.second);\n }\n \n@@ -1179,13 +1181,15 @@ struct make_when_any {\n         using result_t = typename std::result_of<F(T, size_t)>::type;\n \n         auto shared = std::make_shared<detail::when_any_shared<sizeof...(Ts) + 1, T>>();\n-        auto p = package<result_t()>(std::move(executor), [_f = std::move(f), _p = shared] {\n+        auto p = package<result_t()>(executor, [_f = std::move(f), _p = shared] {\n             return detail::apply_when_any_arg(_f, _p);\n         });\n         shared->_f = std::move(p.first);\n \n         detail::attach_when_args(shared, std::move(arg), std::move(args)...);\n \n+        executor(std::move(p.first));\n+\n         return std::move(p.second);\n     }\n };\n@@ -1199,13 +1203,15 @@ struct make_when_any<void> {\n         using result_t = typename std::result_of<F(size_t)>::type;\n \n         auto shared = std::make_shared<detail::when_any_shared<sizeof...(Ts), void>>();\n-        auto p = package<result_t()>(std::move(executor), [_f = std::forward<F>(f), _p = shared] {\n+        auto p = package<result_t()>(executor, [_f = std::forward<F>(f), _p = shared] {\n             return detail::apply_when_any_arg(_f, _p);\n         });\n         shared->_f = std::move(p.first);\n \n         detail::attach_when_args(shared, std::move(args)...);\n \n+        executor(std::move(p.first));\n+\n         return std::move(p.second);\n     }\n };\n@@ -1412,12 +1418,12 @@ struct create_range_of_futures;\n template <typename R, typename T, typename C>\n struct create_range_of_futures<R, T, C, enable_if_copyable<T>> {\n \n-    template <typename S, typename F, typename I>\n-    static auto do_it(S&& s, F&& f, I first, I last) {\n+    template <typename E, typename F, typename I>\n+    static auto do_it(E executor, F&& f, I first, I last) {\n         assert(first != last);\n \n         auto context = std::make_shared<C>(std::forward<F>(f), std::distance(first, last));\n-        auto p = package<R()>(std::forward<S>(s), [_c = context] { return _c->execute(); });\n+        auto p = package<R()>(executor, [_c = context] { return _c->execute(); });\n \n         context->_f = std::move(p.first);\n \n@@ -1426,31 +1432,34 @@ struct create_range_of_futures<R, T, C, enable_if_copyable<T>> {\n             attach_tasks(index++, context, *first);\n         }\n \n+        executor(std::move(p.first));\n+\n         return std::move(p.second);\n     }\n };\n \n template <typename R, typename T, typename C>\n struct create_range_of_futures<R, T, C, enable_if_not_copyable<T>> {\n \n-  template <typename S, typename F, typename I>\n-  static auto do_it(S&& s, F&& f, I first, I last) {\n-    assert(first != last);\n+    template <typename E, typename F, typename I>\n+    static auto do_it(E executor, F&& f, I first, I last) {\n+        assert(first != last);\n \n-    auto context = std::make_shared<C>(std::forward<F>(f), std::distance(first, last));\n-    auto p = package<R()>(std::forward<S>(s), [_c = context] { return _c->execute(); });\n+        auto context = std::make_shared<C>(std::forward<F>(f), std::distance(first, last));\n+        auto p = package<R()>(executor, [_c = context] { return _c->execute(); });\n \n-    context->_f = std::move(p.first);\n+        context->_f = std::move(p.first);\n \n-    size_t index(0);\n-    for (; first != last; ++first) {\n-      attach_tasks(index++, context, std::forward<decltype(*first)>(*first));\n-    }\n+        size_t index(0);\n+        for (; first != last; ++first) {\n+            attach_tasks(index++, context, std::forward<decltype(*first)>(*first));\n+        }\n \n-    return std::move(p.second);\n-  }\n-};\n+        executor(std::move(p.first));\n \n+        return std::move(p.second);\n+    }\n+};\n \n /**************************************************************************************************/\n "},{"sha":"eaeb6c392e53e55acbeba5ed004677bdf0040df3","filename":"stlab/concurrency/main_executor.hpp","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Fmain_executor.hpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Fmain_executor.hpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/stlab%2Fconcurrency%2Fmain_executor.hpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -34,7 +34,7 @@\n #endif\n \n #if STLAB_MAIN_EXECUTOR == STLAB_MAIN_EXECUTOR_QT\n-#include <QApplication>\n+#include <QCoreApplication>\n #include <QEvent>\n #include <stlab/concurrency/task.hpp>\n #include <memory>\n@@ -82,7 +82,7 @@ class main_executor_type {\n \n     public:\n         executor_event() : QEvent(QEvent::User), _receiver(new event_receiver()) {\n-            _receiver->moveToThread(QApplication::instance()->thread());\n+            _receiver->moveToThread(QCoreApplication::instance()->thread());\n         }\n \n         template <typename F>\n@@ -111,7 +111,8 @@ class main_executor_type {\n     void operator()(F f) const {\n         auto event = std::make_unique<executor_event>();\n         event->set_task(std::move(f));\n-        QApplication::postEvent(event->receiver(), event.release());\n+        auto receiver = event->receiver();\n+        QCoreApplication::postEvent(receiver, event.release());\n     }\n };\n "},{"sha":"8eda8f5376e21793d2e701313501c947b32da44a","filename":"stlab/concurrency/system_timer.hpp","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Fsystem_timer.hpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fconcurrency%2Fsystem_timer.hpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/stlab%2Fconcurrency%2Fsystem_timer.hpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -12,6 +12,7 @@\n /**************************************************************************************************/\n \n #include <stlab/concurrency/config.hpp>\n+#include <stlab/concurrency/task.hpp>\n \n #include <chrono>\n #include <functional>\n@@ -231,10 +232,9 @@ class system_timer {\n struct system_timer_type {\n     using result_type = void;\n \n-    template <typename F>\n-    void operator()(std::chrono::steady_clock::time_point when, F&& f) const {\n+    void operator()(std::chrono::steady_clock::time_point when, task<void()> f) const {\n         static system_timer only_system_timer;\n-        only_system_timer(when, std::forward<F>(f));\n+        only_system_timer(when, std::move(f));\n     }\n };\n "},{"sha":"1709f51a2df03166450999a59046b61c0f74f315","filename":"stlab/version.hpp","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fversion.hpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/stlab%2Fversion.hpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/stlab%2Fversion.hpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -19,13 +19,13 @@\n //  STLAB_VERSION / 100 % 1000 is the minor version\n //  STLAB_VERSION / 100000 is the major version\n \n-#define STLAB_VERSION 100300\n+#define STLAB_VERSION 100301\n \n //\n //  STLAB_LIB_VERSION must be defined to be the same as STLAB_VERSION\n //  but as a *string* in the form \"x_y[_z]\" where x is the major version\n //  number, y is the minor version number, and z is the patch level if not 0.\n \n-#define STLAB_LIB_VERSION \"1_3_0\"\n+#define STLAB_LIB_VERSION \"1_3_1\"\n \n #endif"},{"sha":"0001b22572951f43aee276243019c0d0bfc0272b","filename":"test/future_when_all_arguments_tests.cpp","status":"modified","additions":34,"deletions":32,"changes":66,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_all_arguments_tests.cpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_all_arguments_tests.cpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/test%2Ffuture_when_all_arguments_tests.cpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -24,34 +24,35 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_int_with_one_element) {\n     BOOST_TEST_MESSAGE(\"running future when_all int with one element\");\n \n     auto f1 = async(custom_scheduler<0>(), [] { return 42; });\n-    sut = when_all(custom_scheduler<0>(), [](auto x) { return x + x; }, f1);\n+    sut = when_all(custom_scheduler<1>(), [](auto x) { return x + x; }, f1);\n \n     check_valid_future(sut);\n     wait_until_future_completed(sut);\n \n     BOOST_REQUIRE_EQUAL(42 + 42, *sut.get_try());\n     BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_args_int_with_many_elements) {\n     BOOST_TEST_MESSAGE(\"running future when_all args int with many elements\");\n \n     auto f1 = async(custom_scheduler<0>(), [] { return 1; });\n-    auto f2 = async(custom_scheduler<1>(), [] { return 2; });\n+    auto f2 = async(custom_scheduler<0>(), [] { return 2; });\n     auto f3 = async(custom_scheduler<0>(), [] { return 3; });\n-    auto f4 = async(custom_scheduler<1>(), [] { return 5; });\n+    auto f4 = async(custom_scheduler<0>(), [] { return 5; });\n \n     sut = when_all(\n-        custom_scheduler<0>(),\n+        custom_scheduler<1>(),\n         [](int x1, int x2, int x3, int x4) { return 7 * x1 + 11 * x2 + 13 * x3 + 17 * x4; }, f1, f2,\n         f3, f4);\n \n     check_valid_future(sut);\n     wait_until_future_completed(sut);\n \n     BOOST_REQUIRE_EQUAL(1 * 7 + 2 * 11 + 3 * 13 + 5 * 17, *sut.get_try());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n@@ -60,11 +61,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_with_different_types) {\n     BOOST_TEST_MESSAGE(\"running future when_all args with different types\");\n \n     auto f1 = async(custom_scheduler<0>(), [] { return 1; });\n-    auto f2 = async(custom_scheduler<1>(), [] { return 3.1415; });\n+    auto f2 = async(custom_scheduler<0>(), [] { return 3.1415; });\n     auto f3 = async(custom_scheduler<0>(), [] { return std::string(\"Don't panic!\"); });\n-    auto f4 = async(custom_scheduler<1>(), [] { return std::vector<size_t>(2, 3); });\n+    auto f4 = async(custom_scheduler<0>(), [] { return std::vector<size_t>(2, 3); });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [](int x1, double x2, const std::string& x3, const std::vector<size_t>& x4) {\n                        std::stringstream st;\n                        st << x1 << \" \" << x2 << \" \" << x3 << \" \" << x4[0] << \" \" << x4[1];\n@@ -76,8 +77,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_with_different_types) {\n     wait_until_future_completed(sut);\n \n     BOOST_REQUIRE_EQUAL(std::string(\"1 3.1415 Don't panic! 3 3\"), *sut.get_try());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n@@ -90,52 +91,53 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_int_failure_with_one_element) {\n     BOOST_TEST_MESSAGE(\"running future when_all int with range of one element\");\n \n     auto f1 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n-    sut = when_all(custom_scheduler<0>(), [](auto x) { return x + x; }, f1);\n+    sut = when_all(custom_scheduler<1>(), [](auto x) { return x + x; }, f1);\n \n     wait_until_future_fails<test_exception>(sut);\n \n     check_failure<test_exception>(sut, \"failure\");\n     BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_args_int_with_many_elements_one_failing) {\n     BOOST_TEST_MESSAGE(\"running future when_all args int with many elements one failing\");\n \n     auto f1 = async(custom_scheduler<0>(), [] { return 1; });\n-    auto f2 = async(custom_scheduler<1>(), []() -> int { throw test_exception(\"failure\"); });\n+    auto f2 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n     auto f3 = async(custom_scheduler<0>(), [] { return 3; });\n-    auto f4 = async(custom_scheduler<1>(), [] { return 5; });\n+    auto f4 = async(custom_scheduler<0>(), [] { return 5; });\n \n     sut = when_all(\n-        custom_scheduler<0>(),\n+        custom_scheduler<1>(),\n         [](int x1, int x2, int x3, int x4) { return 7 * x1 + 11 * x2 + 13 * x3 + 17 * x4; }, f1, f2,\n         f3, f4);\n \n     wait_until_future_fails<test_exception>(sut);\n \n     check_failure<test_exception>(sut, \"failure\");\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_args_int_with_many_elements_all_failing) {\n     BOOST_TEST_MESSAGE(\"running future when_all args int with many elements all failing\");\n \n     auto f1 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n-    auto f2 = async(custom_scheduler<1>(), []() -> int { throw test_exception(\"failure\"); });\n+    auto f2 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n     auto f3 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n-    auto f4 = async(custom_scheduler<1>(), []() -> int { throw test_exception(\"failure\"); });\n+    auto f4 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n \n     sut = when_all(\n-        custom_scheduler<0>(),\n+        custom_scheduler<1>(),\n         [](int x1, int x2, int x3, int x4) { return 7 * x1 + 11 * x2 + 13 * x3 + 17 * x4; }, f1, f2,\n         f3, f4);\n \n     wait_until_future_fails<test_exception>(sut);\n \n     check_failure<test_exception>(sut, \"failure\");\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_SUITE_END()\n@@ -145,12 +147,12 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_with_different_types_one_failing) {\n     BOOST_TEST_MESSAGE(\"running future when_all args with different types one failing\");\n \n     auto f1 = async(custom_scheduler<0>(), [] { return 1; });\n-    auto f2 = async(custom_scheduler<1>(), [] { return 3.1415; });\n+    auto f2 = async(custom_scheduler<0>(), [] { return 3.1415; });\n     auto f3 =\n         async(custom_scheduler<0>(), []() -> std::string { throw test_exception(\"failure\"); });\n-    auto f4 = async(custom_scheduler<1>(), [] { return std::vector<size_t>(2, 3); });\n+    auto f4 = async(custom_scheduler<0>(), [] { return std::vector<size_t>(2, 3); });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [](int x1, double x2, const std::string& x3, const std::vector<size_t>& x4) {\n                        std::stringstream st;\n                        st << x1 << \" \" << x2 << \" \" << x3 << \" \" << x4[0] << \" \" << x4[1];\n@@ -161,21 +163,21 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_with_different_types_one_failing) {\n     wait_until_future_fails<test_exception>(sut);\n \n     check_failure<test_exception>(sut, \"failure\");\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_args_with_different_types_all_failing) {\n     BOOST_TEST_MESSAGE(\"running future when_all args with different types all failing\");\n \n     auto f1 = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n-    auto f2 = async(custom_scheduler<1>(), []() -> double { throw test_exception(\"failure\"); });\n+    auto f2 = async(custom_scheduler<0>(), []() -> double { throw test_exception(\"failure\"); });\n     auto f3 =\n         async(custom_scheduler<0>(), []() -> std::string { throw test_exception(\"failure\"); });\n-    auto f4 = async(custom_scheduler<1>(),\n+    auto f4 = async(custom_scheduler<0>(),\n                     []() -> std::vector<size_t> { throw test_exception(\"failure\"); });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [](int x1, double x2, const std::string& x3, const std::vector<size_t>& x4) {\n                        std::stringstream st;\n                        st << x1 << \" \" << x2 << \" \" << x3 << \" \" << x4[0] << \" \" << x4[1];\n@@ -186,8 +188,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_args_with_different_types_all_failing) {\n     wait_until_future_fails<test_exception>(sut);\n \n     check_failure<test_exception>(sut, \"failure\");\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_SUITE_END()"},{"sha":"ee768927c344d5767a1e2ab72eb52312d79ac1d0","filename":"test/future_when_all_range_tests.cpp","status":"modified","additions":65,"deletions":50,"changes":115,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_all_range_tests.cpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_all_range_tests.cpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/test%2Ffuture_when_all_range_tests.cpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -56,7 +56,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_one_element) {\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return 42; }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p, &_r = r](std::vector<int> v) {\n                        _p = v.size();\n                        _r = v[0];\n@@ -68,7 +68,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_one_element) {\n \n     BOOST_REQUIRE_EQUAL(size_t(1), p);\n     BOOST_REQUIRE_EQUAL(size_t(42), r);\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements) {\n@@ -77,11 +78,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements) {\n     size_t r = 0;\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return 1; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return 2; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return 2; }));\n     futures.push_back(async(custom_scheduler<0>(), [] { return 3; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return 5; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return 5; }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p, &_r = r](std::vector<int> v) {\n                        _p = v.size();\n                        for (auto i : v) {\n@@ -95,8 +96,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements) {\n \n     BOOST_REQUIRE_EQUAL(size_t(4), p);\n     BOOST_REQUIRE_EQUAL(size_t(1 + 2 + 3 + 5), r);\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n /*\n@@ -113,11 +114,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_diamond_formation_elements)\n     auto start = async(custom_scheduler<0>(), [] { return 4711; });\n     std::vector<stlab::future<void>> futures(4);\n     futures[0] = start.then(custom_scheduler<0>(), [& _p = v[0]](auto x) { _p = x + 1; });\n-    futures[1] = start.then(custom_scheduler<1>(), [& _p = v[1]](auto x) { _p = x + 2; });\n+    futures[1] = start.then(custom_scheduler<0>(), [& _p = v[1]](auto x) { _p = x + 2; });\n     futures[2] = start.then(custom_scheduler<0>(), [& _p = v[2]](auto x) { _p = x + 3; });\n-    futures[3] = start.then(custom_scheduler<1>(), [& _p = v[3]](auto x) { _p = x + 5; });\n+    futures[3] = start.then(custom_scheduler<0>(), [& _p = v[3]](auto x) { _p = x + 5; });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _r = r, &v]() {\n                        for (auto i : v) {\n                            _r += i;\n@@ -129,11 +130,12 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_diamond_formation_elements)\n     wait_until_future_completed(sut);\n \n     BOOST_REQUIRE_EQUAL(4711 + 1 + 4711 + 2 + 4711 + 3 + 4711 + 5, r);\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(5, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n+\n BOOST_FIXTURE_TEST_SUITE(future_when_all_range_int, test_fixture<int>)\n BOOST_AUTO_TEST_CASE(future_when_all_int_empty_range) {\n     BOOST_TEST_MESSAGE(\"running future when_all int with empty range\");\n@@ -156,7 +158,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_range_with_one_element) {\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return 42; }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p](std::vector<int> v) {\n                        _p = v.size();\n                        return v[0];\n@@ -169,18 +171,19 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_range_with_one_element) {\n     BOOST_REQUIRE_EQUAL(size_t(1), p);\n     BOOST_REQUIRE_EQUAL(42, *sut.get_try());\n     BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_int_range_with_many_elements) {\n     BOOST_TEST_MESSAGE(\"running future when_all int with range with many elements\");\n     size_t p = 0;\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return 1; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return 2; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return 2; }));\n     futures.push_back(async(custom_scheduler<0>(), [] { return 3; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return 5; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return 5; }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p](std::vector<int> v) {\n                        _p = v.size();\n                        auto r = 0;\n@@ -196,8 +199,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_range_with_many_elements) {\n \n     BOOST_REQUIRE_EQUAL(size_t(4), p);\n     BOOST_REQUIRE_EQUAL(1 + 2 + 3 + 5, *sut.get_try());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n /*\n@@ -213,11 +216,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_range_with_diamond_formation_elements)\n     auto start = async(custom_scheduler<0>(), [] { return 4711; });\n     std::vector<stlab::future<int>> futures(4);\n     futures[0] = start.then(custom_scheduler<0>(), [](auto x) { return x + 1; });\n-    futures[1] = start.then(custom_scheduler<1>(), [](auto x) { return x + 2; });\n+    futures[1] = start.then(custom_scheduler<0>(), [](auto x) { return x + 2; });\n     futures[2] = start.then(custom_scheduler<0>(), [](auto x) { return x + 3; });\n-    futures[3] = start.then(custom_scheduler<1>(), [](auto x) { return x + 5; });\n+    futures[3] = start.then(custom_scheduler<0>(), [](auto x) { return x + 5; });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p](std::vector<int> v) {\n                        _p = v.size();\n                        auto r = 0;\n@@ -233,8 +236,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_range_with_diamond_formation_elements)\n \n     BOOST_REQUIRE_EQUAL(size_t(4), p);\n     BOOST_REQUIRE_EQUAL(4711 + 1 + 4711 + 2 + 4711 + 3 + 4711 + 5, *sut.get_try());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_SUITE_END()\n@@ -248,11 +251,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_move_range_with_many_elements) {\n     size_t p = 0;\n     std::vector<stlab::future<stlab::move_only>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return stlab::move_only{1}; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return stlab::move_only{2}; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return stlab::move_only{2}; }));\n     futures.push_back(async(custom_scheduler<0>(), [] { return stlab::move_only{3}; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return stlab::move_only{5}; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return stlab::move_only{5}; }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p](std::vector<stlab::move_only> v) {\n                        _p = v.size();\n                        auto r = 0;\n@@ -268,8 +271,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_move_range_with_many_elements) {\n \n     BOOST_REQUIRE_EQUAL(size_t(4), p);\n     BOOST_REQUIRE_EQUAL(1 + 2 + 3 + 5, (*sut.get_try()).member() );\n-    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_REQUIRE_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n@@ -286,7 +289,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_one_element) {\n     futures.push_back(\n         async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p, &_r = r](const std::vector<int>& v) {\n                        _p = v.size();\n                        _r = v[0];\n@@ -299,6 +302,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_one_element) {\n     BOOST_REQUIRE_EQUAL(size_t(0), p);\n     BOOST_REQUIRE_EQUAL(size_t(0), r);\n     BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements_one_failing) {\n@@ -309,11 +313,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements_one_failing)\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(\n         async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return 2; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return 2; }));\n     futures.push_back(async(custom_scheduler<0>(), [] { return 3; }));\n-    futures.push_back(async(custom_scheduler<1>(), [] { return 5; }));\n+    futures.push_back(async(custom_scheduler<0>(), [] { return 5; }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p, &_r = r](const std::vector<int>& v) {\n                        _p = v.size();\n                        for (auto i : v) {\n@@ -327,7 +331,10 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements_one_failing)\n     check_failure<test_exception>(sut, \"failure\");\n     BOOST_REQUIRE_EQUAL(size_t(0), p);\n     BOOST_REQUIRE_EQUAL(size_t(0), r);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n+\n BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements_all_failing) {\n     BOOST_TEST_MESSAGE(\n         \"running future when_all void with range with many elements and all failing\");\n@@ -337,13 +344,13 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements_all_failing)\n     futures.push_back(\n         async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); }));\n     futures.push_back(\n-        async(custom_scheduler<1>(), []() -> int { throw test_exception(\"failure\"); }));\n+        async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); }));\n     futures.push_back(\n         async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); }));\n     futures.push_back(\n-        async(custom_scheduler<1>(), []() -> int { throw test_exception(\"failure\"); }));\n+        async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); }));\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _p = p, &_r = r](const std::vector<int>& v) {\n                        _p = v.size();\n                        for (auto i : v) {\n@@ -357,6 +364,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_many_elements_all_failing)\n     check_failure<test_exception>(sut, \"failure\");\n     BOOST_REQUIRE_EQUAL(size_t(0), p);\n     BOOST_REQUIRE_EQUAL(size_t(0), r);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n /*\n@@ -373,12 +382,12 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_diamond_formation_elements_\n     int r = 0;\n     auto start = async(custom_scheduler<0>(), []() -> int { throw test_exception(\"failure\"); });\n     std::vector<stlab::future<void>> futures(4);\n-    futures[0] = start.then(custom_scheduler<1>(), [& _p = v[0]](auto x) { _p = x + 1; });\n-    futures[1] = start.then(custom_scheduler<1>(), [& _p = v[1]](auto x) { _p = x + 2; });\n-    futures[2] = start.then(custom_scheduler<1>(), [& _p = v[2]](auto x) { _p = x + 3; });\n-    futures[3] = start.then(custom_scheduler<1>(), [& _p = v[3]](auto x) { _p = x + 5; });\n+    futures[0] = start.then(custom_scheduler<0>(), [& _p = v[0]](auto x) { _p = x + 1; });\n+    futures[1] = start.then(custom_scheduler<0>(), [& _p = v[1]](auto x) { _p = x + 2; });\n+    futures[2] = start.then(custom_scheduler<0>(), [& _p = v[2]](auto x) { _p = x + 3; });\n+    futures[3] = start.then(custom_scheduler<0>(), [& _p = v[3]](auto x) { _p = x + 5; });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _r = r, &v]() {\n                        for (auto i : v) {\n                            _r += i;\n@@ -393,6 +402,8 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_diamond_formation_elements_\n     for (auto d : v) {\n         BOOST_REQUIRE_EQUAL(0, d);\n     }\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(\n@@ -403,12 +414,12 @@ BOOST_AUTO_TEST_CASE(\n     int r = 0;\n     auto start = async(custom_scheduler<0>(), []() -> int { return 42; });\n     std::vector<stlab::future<void>> futures(4);\n-    futures[0] = start.then(custom_scheduler<1>(), [& _p = v[0]](auto x) { _p = x + 1; });\n-    futures[1] = start.then(custom_scheduler<1>(), [](auto) { throw test_exception(\"failure\"); });\n-    futures[2] = start.then(custom_scheduler<1>(), [& _p = v[2]](auto x) { _p = x + 3; });\n-    futures[3] = start.then(custom_scheduler<1>(), [& _p = v[3]](auto x) { _p = x + 5; });\n+    futures[0] = start.then(custom_scheduler<0>(), [& _p = v[0]](auto x) { _p = x + 1; });\n+    futures[1] = start.then(custom_scheduler<0>(), [](auto) { throw test_exception(\"failure\"); });\n+    futures[2] = start.then(custom_scheduler<0>(), [& _p = v[2]](auto x) { _p = x + 3; });\n+    futures[3] = start.then(custom_scheduler<0>(), [& _p = v[3]](auto x) { _p = x + 5; });\n \n-    sut = when_all(custom_scheduler<0>(),\n+    sut = when_all(custom_scheduler<1>(),\n                    [& _r = r, &v]() {\n                        for (auto i : v) {\n                            _r += i;\n@@ -420,6 +431,8 @@ BOOST_AUTO_TEST_CASE(\n \n     check_failure<test_exception>(sut, \"failure\");\n     BOOST_REQUIRE_EQUAL(0, r);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_diamond_formation_elements_join_failing) {\n@@ -429,18 +442,20 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_range_with_diamond_formation_elements_\n     int r = 0;\n     auto start = async(custom_scheduler<0>(), []() -> int { return 42; });\n     std::vector<stlab::future<void>> futures(4);\n-    futures[0] = start.then(custom_scheduler<1>(), [& _p = v[0]](auto x) { _p = x + 1; });\n-    futures[1] = start.then(custom_scheduler<1>(), [& _p = v[1]](auto x) { _p = x + 2; });\n-    futures[2] = start.then(custom_scheduler<1>(), [& _p = v[2]](auto x) { _p = x + 3; });\n-    futures[3] = start.then(custom_scheduler<1>(), [& _p = v[3]](auto x) { _p = x + 5; });\n+    futures[0] = start.then(custom_scheduler<0>(), [& _p = v[0]](auto x) { _p = x + 1; });\n+    futures[1] = start.then(custom_scheduler<0>(), [& _p = v[1]](auto x) { _p = x + 2; });\n+    futures[2] = start.then(custom_scheduler<0>(), [& _p = v[2]](auto x) { _p = x + 3; });\n+    futures[3] = start.then(custom_scheduler<0>(), [& _p = v[3]](auto x) { _p = x + 5; });\n \n-    sut = when_all(custom_scheduler<0>(), []() { throw test_exception(\"failure\"); },\n+    sut = when_all(custom_scheduler<1>(), []() { throw test_exception(\"failure\"); },\n                    std::make_pair(futures.begin(), futures.end()));\n \n     wait_until_future_fails<test_exception>(sut);\n \n     check_failure<test_exception>(sut, \"failure\");\n     BOOST_REQUIRE_EQUAL(0, r);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_SUITE_END()"},{"sha":"b0811392815524d40f937edde560c6209296f7e3","filename":"test/future_when_any_arguments_tests.cpp","status":"modified","additions":71,"deletions":69,"changes":140,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_any_arguments_tests.cpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_any_arguments_tests.cpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/test%2Ffuture_when_any_arguments_tests.cpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -28,7 +28,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_one_argument) {\n     size_t result = 0;\n     auto a1 = async(custom_scheduler<0>(), [] { return 42; });\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index, &_r = result](int x, size_t index) {\n                        _i = index;\n                        _r = x;\n@@ -38,9 +38,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_one_argument) {\n     check_valid_future(sut);\n     wait_until_future_completed(sut);\n \n-    BOOST_WARN_EQUAL(size_t(0), index);\n-    BOOST_WARN_EQUAL(size_t(42), result);\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(0), index);\n+    BOOST_REQUIRE_EQUAL(size_t(42), result);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_arguments_first_succeeds) {\n@@ -58,16 +59,16 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_arguments_first_su\n                                                    return 1;\n                                                },\n                                                _task_counter));\n-    auto a2 = async(custom_scheduler<1>(),\n+    auto a2 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 2; }, _task_counter, block_context));\n     auto a3 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 3; }, _task_counter, block_context));\n-    auto a4 = async(custom_scheduler<1>(),\n+    auto a4 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 5; }, _task_counter, block_context));\n     {\n         lock_t block(*block_context._mutex);\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _r = result, &_used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -84,11 +85,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_arguments_first_su\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(0), used_future_index);\n-    BOOST_WARN_EQUAL(size_t(1), result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(0), used_future_index);\n+    BOOST_REQUIRE_EQUAL(size_t(1), result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_middle_succeeds) {\n@@ -102,21 +103,21 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_middl\n \n     auto a1 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 1; }, _task_counter, block_context));\n-    auto a2 = async(custom_scheduler<1>(),\n+    auto a2 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 2; }, _task_counter, block_context));\n     auto a3 = async(custom_scheduler<0>(), make_non_blocking_functor(\n                                                [& _context = block_context] {\n                                                    _context._may_proceed = true;\n                                                    return 3;\n                                                },\n                                                _task_counter));\n-    auto a4 = async(custom_scheduler<1>(),\n+    auto a4 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 5; }, _task_counter, block_context));\n \n     {\n         lock_t lock(*block_context._mutex);\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _r = result, &_used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -133,11 +134,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_middl\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(2), used_future_index);\n-    BOOST_WARN_EQUAL(size_t(3), result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(2), used_future_index);\n+    BOOST_REQUIRE_EQUAL(size_t(3), result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_last_succeeds) {\n@@ -151,11 +152,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_last_\n \n     auto a1 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 1; }, _task_counter, block_context));\n-    auto a2 = async(custom_scheduler<1>(),\n+    auto a2 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 2; }, _task_counter, block_context));\n     auto a3 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 3; }, _task_counter, block_context));\n-    auto a4 = async(custom_scheduler<1>(), make_non_blocking_functor(\n+    auto a4 = async(custom_scheduler<0>(), make_non_blocking_functor(\n                                                [& _context = block_context] {\n                                                    _context._may_proceed = true;\n                                                    return 5;\n@@ -164,7 +165,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_last_\n     {\n         lock_t lock(*block_context._mutex);\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _r = result, &_used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -181,11 +182,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_argument_with_many_arguments_last_\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(3), used_future_index);\n-    BOOST_WARN_EQUAL(size_t(5), result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(3), used_future_index);\n+    BOOST_REQUIRE_EQUAL(size_t(5), result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(\n@@ -197,13 +198,13 @@ BOOST_AUTO_TEST_CASE(\n     size_t index = 4711;\n     int result = 0;\n \n-    auto a1 = async(custom_scheduler<1>(), make_failing_functor([] { return 1; }, _task_counter));\n+    auto a1 = async(custom_scheduler<0>(), make_failing_functor([] { return 1; }, _task_counter));\n     auto a2 = async(custom_scheduler<0>(), make_failing_functor([] { return 1; }, _task_counter));\n     auto a3 =\n-        async(custom_scheduler<1>(), make_non_blocking_functor([] { return 3; }, _task_counter));\n+        async(custom_scheduler<0>(), make_non_blocking_functor([] { return 3; }, _task_counter));\n     auto a4 = async(custom_scheduler<0>(), make_failing_functor([] { return 1; }, _task_counter));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index, &_result = result,\n                     &_counter = any_task_execution_counter](int x, size_t index) {\n                        ++_counter;\n@@ -216,11 +217,11 @@ BOOST_AUTO_TEST_CASE(\n     wait_until_future_completed(sut);\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(2), index);\n-    BOOST_WARN_EQUAL(3, result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(2), index);\n+    BOOST_REQUIRE_EQUAL(3, result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_arguments_with_many_arguments_all_fail) {\n@@ -229,12 +230,12 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_arguments_with_many_arguments_all_\n     size_t index = 4711;\n     int r = 0;\n \n-    auto a1 = async(custom_scheduler<1>(), make_failing_functor([] { return 0; }, _task_counter));\n+    auto a1 = async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter));\n     auto a2 = async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter));\n-    auto a3 = async(custom_scheduler<1>(), make_failing_functor([] { return 0; }, _task_counter));\n+    auto a3 = async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter));\n     auto a4 = async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index, &_r = r](int x, size_t index) {\n                        _i = index;\n                        _r = x;\n@@ -244,11 +245,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_arguments_with_many_arguments_all_\n     wait_until_all_tasks_completed();\n     wait_until_future_fails<test_exception>(sut);\n \n-    BOOST_WARN_EQUAL(size_t(4711), index);\n-    BOOST_WARN_EQUAL(0, r);\n+    BOOST_REQUIRE_EQUAL(size_t(4711), index);\n+    BOOST_REQUIRE_EQUAL(0, r);\n     BOOST_WARN_GE(size_t(4), failures.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n@@ -259,7 +260,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_argument_with_one_argument) {\n \n     auto a1 = async(custom_scheduler<0>(), [] { return 4711; });\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index](int x, size_t index) {\n                        _i = index;\n                        return x;\n@@ -269,9 +270,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_argument_with_one_argument) {\n \n     wait_until_future_completed(sut);\n \n-    BOOST_WARN_EQUAL(size_t(0), index);\n-    BOOST_WARN_EQUAL(4711, *sut.get_try());\n-    BOOST_WARN_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(0), index);\n+    BOOST_REQUIRE_EQUAL(4711, *sut.get_try());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_int_arguments_with_many_arguments_last_succeeds) {\n@@ -285,11 +287,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_arguments_with_many_arguments_last_\n \n     auto a1 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 42; }, _task_counter, block_context));\n-    auto a2 = async(custom_scheduler<1>(),\n+    auto a2 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 815; }, _task_counter, block_context));\n     auto a3 = async(custom_scheduler<0>(),\n                     make_blocking_functor([] { return 4711; }, _task_counter, block_context));\n-    auto a4 = async(custom_scheduler<1>(), make_non_blocking_functor(\n+    auto a4 = async(custom_scheduler<0>(), make_non_blocking_functor(\n                                                [& _context = block_context] {\n                                                    _context._may_proceed = true;\n                                                    return 5;\n@@ -298,7 +300,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_arguments_with_many_arguments_last_\n \n     {\n         lock_t lock(*block_context._mutex);\n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -313,11 +315,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_arguments_with_many_arguments_last_\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(3), used_future_index);\n-    BOOST_WARN_EQUAL(5, *sut.get_try());\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(1, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(3, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(3), used_future_index);\n+    BOOST_REQUIRE_EQUAL(5, *sut.get_try());\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(\n@@ -333,22 +335,22 @@ BOOST_AUTO_TEST_CASE(\n                                                    return 0;\n                                                },\n                                                _task_counter));\n-    auto a2 = async(custom_scheduler<1>(), make_failing_functor(\n+    auto a2 = async(custom_scheduler<0>(), make_failing_functor(\n                                                [& _f = failures]() -> int {\n                                                    ++_f;\n                                                    return 0;\n                                                },\n                                                _task_counter));\n     auto a3 = async(custom_scheduler<0>(),\n                     make_non_blocking_functor([]() -> int { return 3; }, _task_counter));\n-    auto a4 = async(custom_scheduler<1>(), make_failing_functor(\n+    auto a4 = async(custom_scheduler<0>(), make_failing_functor(\n                                                [& _f = failures]() -> int {\n                                                    ++_f;\n                                                    return 0;\n                                                },\n                                                _task_counter));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _index = index](int x, size_t index) {\n                        _index = index;\n                        return x;\n@@ -359,11 +361,11 @@ BOOST_AUTO_TEST_CASE(\n     wait_until_future_completed(sut);\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(2), index);\n-    BOOST_WARN_EQUAL(3, *sut.get_try());\n+    BOOST_REQUIRE_EQUAL(size_t(2), index);\n+    BOOST_REQUIRE_EQUAL(3, *sut.get_try());\n     BOOST_WARN_GE(3, failures.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n /*\n@@ -386,7 +388,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_arguments_with_diamond_formation_argume\n         auto a1 =\n             start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return x + 1; },\n                                                                     _task_counter, block_context));\n-        auto a2 = start.then(custom_scheduler<1>(), make_non_blocking_functor(\n+        auto a2 = start.then(custom_scheduler<0>(), make_non_blocking_functor(\n                                                         [& _context = block_context](auto x) {\n                                                             _context._may_proceed = true;\n                                                             return x + 2;\n@@ -396,10 +398,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_arguments_with_diamond_formation_argume\n             start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return x + 3; },\n                                                                     _task_counter, block_context));\n         auto a4 =\n-            start.then(custom_scheduler<1>(), make_blocking_functor([](int x) { return x + 5; },\n+            start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return x + 5; },\n                                                                     _task_counter, block_context));\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _i = index](int x, size_t index) {\n                            _i = index;\n                            return x;\n@@ -414,10 +416,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_arguments_with_diamond_formation_argume\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(1), index);\n-    BOOST_WARN_EQUAL(4711 + 2, *sut.get_try());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(1), index);\n+    BOOST_REQUIRE_EQUAL(4711 + 2, *sut.get_try());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_SUITE_END()"},{"sha":"c6fbabdd05c1f9938804a1a3b0a7ed04670a1dc6","filename":"test/future_when_any_range_tests.cpp","status":"modified","additions":93,"deletions":88,"changes":181,"blob_url":"https://github.com/stlab/stlab/blob/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_any_range_tests.cpp","raw_url":"https://github.com/stlab/stlab/raw/fdb3ab411777a68305b1dd0c77417d12ef5ba9b3/test%2Ffuture_when_any_range_tests.cpp","contents_url":"https://api.github.com/repos/stlab/stlab/contents/test%2Ffuture_when_any_range_tests.cpp?ref=fdb3ab411777a68305b1dd0c77417d12ef5ba9b3","patch":"@@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_void_void_empty_range) {\n     wait_until_future_fails<stlab::future_error>(sut);\n \n     BOOST_REQUIRE(!check);\n-    BOOST_WARN_EQUAL(0, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(0, custom_scheduler<0>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_empty_range) {\n@@ -48,7 +48,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_empty_range) {\n     wait_until_future_fails<stlab::future_error>(sut);\n \n     BOOST_REQUIRE(!check);\n-    BOOST_WARN_EQUAL(0, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(0, custom_scheduler<0>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_void_void_range_with_one_element) {\n@@ -57,7 +57,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_void_void_range_with_one_element) {\n     int interim_result = 0;\n     int result = 0;\n     std::vector<stlab::future<void>> futures;\n-    futures.push_back(async(custom_scheduler<1>(),\n+    futures.push_back(async(custom_scheduler<0>(),\n                             [& _interim_result = interim_result] { _interim_result = 42; }));\n \n     sut = when_any(custom_scheduler<1>(),\n@@ -68,8 +68,9 @@ BOOST_AUTO_TEST_CASE(future_when_any_void_void_range_with_one_element) {\n \n     wait_until_future_completed(sut);\n \n-    BOOST_WARN_EQUAL(42, result);\n-    BOOST_WARN_EQUAL(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(42, result);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_one_element) {\n@@ -79,7 +80,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_one_element) {\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return 42; }));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index, &_r = result](int x, size_t index) {\n                        _i = index;\n                        _r = x;\n@@ -89,9 +90,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_one_element) {\n     check_valid_future(sut);\n     wait_until_future_completed(sut);\n \n-    BOOST_WARN_EQUAL(size_t(0), index);\n-    BOOST_WARN_EQUAL(size_t(42), result);\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(0), index);\n+    BOOST_REQUIRE_EQUAL(size_t(42), result);\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_first_succeeds) {\n@@ -110,16 +112,16 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_first_suc\n                                                            return 1;\n                                                        },\n                                                        _task_counter)));\n-    futures.push_back(async(custom_scheduler<1>(),\n+    futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 2; }, _task_counter, block_context)));\n     futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 3; }, _task_counter, block_context)));\n-    futures.push_back(async(custom_scheduler<1>(),\n+    futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 5; }, _task_counter, block_context)));\n     {\n         lock_t block(*block_context._mutex);\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _r = result, &_used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -135,11 +137,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_first_suc\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(0), used_future_index);\n-    BOOST_WARN_EQUAL(size_t(1), result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(0), used_future_index);\n+    BOOST_REQUIRE_EQUAL(size_t(1), result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_middle_succeeds) {\n@@ -154,21 +156,21 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_middle_su\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 1; }, _task_counter, block_context)));\n-    futures.push_back(async(custom_scheduler<1>(),\n+    futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 2; }, _task_counter, block_context)));\n     futures.push_back(async(custom_scheduler<0>(), make_non_blocking_functor(\n                                                        [& _context = block_context] {\n                                                            _context._may_proceed = true;\n                                                            return 3;\n                                                        },\n                                                        _task_counter)));\n-    futures.push_back(async(custom_scheduler<1>(),\n+    futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 5; }, _task_counter, block_context)));\n \n     {\n         lock_t lock(*block_context._mutex);\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _r = result, &_used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -185,11 +187,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_middle_su\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(2), used_future_index);\n-    BOOST_WARN_EQUAL(size_t(3), result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(2), used_future_index);\n+    BOOST_REQUIRE_EQUAL(size_t(3), result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_last_succeeds) {\n@@ -204,11 +206,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_last_succ\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 1; }, _task_counter, block_context)));\n-    futures.push_back(async(custom_scheduler<1>(),\n+    futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 2; }, _task_counter, block_context)));\n     futures.push_back(async(custom_scheduler<0>(),\n                             make_blocking_functor([] { return 3; }, _task_counter, block_context)));\n-    futures.push_back(async(custom_scheduler<1>(), make_non_blocking_functor(\n+    futures.push_back(async(custom_scheduler<0>(), make_non_blocking_functor(\n                                                        [& _context = block_context] {\n                                                            _context._may_proceed = true;\n                                                            return 5;\n@@ -217,7 +219,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_last_succ\n     {\n         lock_t lock(*block_context._mutex);\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _r = result, &_used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -234,11 +236,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_last_succ\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(3), used_future_index);\n-    BOOST_WARN_EQUAL(size_t(5), result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(3), used_future_index);\n+    BOOST_REQUIRE_EQUAL(size_t(5), result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(\n@@ -252,15 +254,15 @@ BOOST_AUTO_TEST_CASE(\n \n     std::vector<stlab::future<int>> futures;\n     futures.push_back(\n-        async(custom_scheduler<1>(), make_failing_functor([] { return 1; }, _task_counter)));\n+        async(custom_scheduler<0>(), make_failing_functor([] { return 1; }, _task_counter)));\n     futures.push_back(\n         async(custom_scheduler<0>(), make_failing_functor([] { return 1; }, _task_counter)));\n     futures.push_back(\n-        async(custom_scheduler<1>(), make_non_blocking_functor([] { return 3; }, _task_counter)));\n+        async(custom_scheduler<0>(), make_non_blocking_functor([] { return 3; }, _task_counter)));\n     futures.push_back(\n         async(custom_scheduler<0>(), make_failing_functor([] { return 1; }, _task_counter)));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index, &_result = result,\n                     &_counter = any_task_execution_counter](int x, size_t index) {\n                        ++_counter;\n@@ -273,11 +275,11 @@ BOOST_AUTO_TEST_CASE(\n     wait_until_future_completed(sut);\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(2), index);\n-    BOOST_WARN_EQUAL(3, result);\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(2), index);\n+    BOOST_REQUIRE_EQUAL(3, result);\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_all_fails) {\n@@ -288,15 +290,15 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_all_fails\n \n     std::vector<stlab::future<int>> futures;\n     futures.push_back(\n-        async(custom_scheduler<1>(), make_failing_functor([] { return 0; }, _task_counter)));\n+        async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter)));\n     futures.push_back(\n         async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter)));\n     futures.push_back(\n-        async(custom_scheduler<1>(), make_failing_functor([] { return 0; }, _task_counter)));\n+        async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter)));\n     futures.push_back(\n         async(custom_scheduler<0>(), make_failing_functor([] { return 0; }, _task_counter)));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index, &_r = r](int x, size_t index) {\n                        _i = index;\n                        _r = x;\n@@ -306,11 +308,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_void_range_with_many_elements_all_fails\n     wait_until_all_tasks_completed();\n     wait_until_future_fails<test_exception>(sut);\n \n-    BOOST_WARN_EQUAL(size_t(4711), index);\n-    BOOST_WARN_EQUAL(0, r);\n+    BOOST_REQUIRE_EQUAL(size_t(4711), index);\n+    BOOST_REQUIRE_EQUAL(0, r);\n     BOOST_WARN_GE(size_t(4), failures.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n /*\n@@ -337,23 +339,23 @@ BOOST_AUTO_TEST_CASE(future_when_any_void_range_with_diamond_formation_elements)\n             make_blocking_functor([& _result = intrim_results](auto x) { _result[0] = x + 1; },\n                                   _task_counter, block_context)));\n         futures.push_back(start.then(\n-            custom_scheduler<1>(),\n+            custom_scheduler<0>(),\n             make_blocking_functor([& _result = intrim_results](auto x) { _result[1] = x + 2; },\n                                   _task_counter, block_context)));\n         futures.push_back(start.then(\n             custom_scheduler<0>(),\n             make_blocking_functor([& _result = intrim_results](auto x) { _result[2] = x + 3; },\n                                   _task_counter, block_context)));\n         futures.push_back(\n-            start.then(custom_scheduler<1>(),\n+            start.then(custom_scheduler<0>(),\n                        make_non_blocking_functor(\n                            [& _context = block_context, &_result = intrim_results](auto x) {\n                                _result[3] = x;\n                                _context._may_proceed = true;\n                            },\n                            _task_counter)));\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _result = result, &_counter = any_task_execution_counter,\n                         &_interim_results = intrim_results](size_t index) {\n                            _result = _interim_results[index];\n@@ -368,10 +370,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_void_range_with_diamond_formation_elements)\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(4711, result.load());\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(1, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(1, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(4711, result.load());\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n@@ -391,6 +393,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_empty_range) {\n     wait_until_future_fails<stlab::future_error>(sut);\n \n     BOOST_REQUIRE(!check);\n+    BOOST_REQUIRE_EQUAL(0, custom_scheduler<0>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_one_element) {\n@@ -400,7 +403,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_one_element) {\n     std::vector<stlab::future<int>> futures;\n     futures.push_back(async(custom_scheduler<0>(), [] { return 4711; }));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _i = index](int x, size_t index) {\n                        _i = index;\n                        return x;\n@@ -410,9 +413,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_one_element) {\n \n     wait_until_future_completed(sut);\n \n-    BOOST_WARN_EQUAL(size_t(0), index);\n-    BOOST_WARN_EQUAL(4711, *sut.get_try());\n-    BOOST_WARN_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(0), index);\n+    BOOST_REQUIRE_EQUAL(4711, *sut.get_try());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n+\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements) {\n@@ -429,12 +434,12 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements) {\n         async(custom_scheduler<0>(),\n               make_blocking_functor([] { return 42; }, _task_counter, block_context)));\n     futures.push_back(\n-        async(custom_scheduler<1>(),\n+        async(custom_scheduler<0>(),\n               make_blocking_functor([] { return 815; }, _task_counter, block_context)));\n     futures.push_back(\n         async(custom_scheduler<0>(),\n               make_blocking_functor([] { return 4711; }, _task_counter, block_context)));\n-    futures.push_back(async(custom_scheduler<1>(), make_non_blocking_functor(\n+    futures.push_back(async(custom_scheduler<0>(), make_non_blocking_functor(\n                                                        [& _context = block_context] {\n                                                            _context._may_proceed = true;\n                                                            return 5;\n@@ -443,7 +448,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements) {\n \n     {\n         lock_t lock(*block_context._mutex);\n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _used_future_index = used_future_index,\n                         &_counter = any_task_execution_counter](int x, size_t index) {\n                            _used_future_index = index;\n@@ -458,11 +463,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements) {\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(3), used_future_index);\n-    BOOST_WARN_EQUAL(5, *sut.get_try());\n-    BOOST_WARN_EQUAL(1, any_task_execution_counter.load());\n-    BOOST_WARN_LE(1, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(3, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(3), used_future_index);\n+    BOOST_REQUIRE_EQUAL(5, *sut.get_try());\n+    BOOST_REQUIRE_EQUAL(1, any_task_execution_counter.load());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements_all_but_all_one_failing) {\n@@ -477,22 +482,22 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements_all_but_al\n                                                            return 0;\n                                                        },\n                                                        _task_counter)));\n-    futures.push_back(async(custom_scheduler<1>(), make_failing_functor(\n+    futures.push_back(async(custom_scheduler<0>(), make_failing_functor(\n                                                        [& _f = failures]() -> int {\n                                                            ++_f;\n                                                            return 0;\n                                                        },\n                                                        _task_counter)));\n     futures.push_back(async(custom_scheduler<0>(),\n                             make_non_blocking_functor([]() -> int { return 3; }, _task_counter)));\n-    futures.push_back(async(custom_scheduler<1>(), make_failing_functor(\n+    futures.push_back(async(custom_scheduler<0>(), make_failing_functor(\n                                                        [& _f = failures]() -> int {\n                                                            ++_f;\n                                                            return 0;\n                                                        },\n                                                        _task_counter)));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n                    [& _index = index](int x, size_t index) {\n                        _index = index;\n                        return x;\n@@ -503,11 +508,11 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_int_range_with_many_elements_all_but_al\n     wait_until_future_completed(sut);\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(2), index);\n-    BOOST_WARN_EQUAL(3, *sut.get_try());\n+    BOOST_REQUIRE_EQUAL(size_t(2), index);\n+    BOOST_REQUIRE_EQUAL(3, *sut.get_try());\n     BOOST_WARN_GE(3, failures.load());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_LE(4, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n /*\n@@ -531,7 +536,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_range_with_diamond_formation_elements)\n             start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return x + 1; },\n                                                                     _task_counter, block_context)));\n         futures.push_back(\n-            start.then(custom_scheduler<1>(), make_non_blocking_functor(\n+            start.then(custom_scheduler<0>(), make_non_blocking_functor(\n                                                   [& _context = block_context](auto x) {\n                                                       _context._may_proceed = true;\n                                                       return x + 2;\n@@ -541,10 +546,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_range_with_diamond_formation_elements)\n             start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return x + 3; },\n                                                                     _task_counter, block_context)));\n         futures.push_back(\n-            start.then(custom_scheduler<1>(), make_blocking_functor([](int x) { return x + 5; },\n+            start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return x + 5; },\n                                                                     _task_counter, block_context)));\n \n-        sut = when_any(custom_scheduler<0>(),\n+        sut = when_any(custom_scheduler<1>(),\n                        [& _i = index](int x, size_t index) {\n                            _i = index;\n                            return x;\n@@ -559,10 +564,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_int_range_with_diamond_formation_elements)\n     block_context._thread_block.notify_all();\n     wait_until_all_tasks_completed();\n \n-    BOOST_WARN_EQUAL(size_t(1), index);\n-    BOOST_WARN_EQUAL(4711 + 2, *sut.get_try());\n-    BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-    BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+    BOOST_REQUIRE_EQUAL(size_t(1), index);\n+    BOOST_REQUIRE_EQUAL(4711 + 2, *sut.get_try());\n+    BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n+    BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n BOOST_AUTO_TEST_SUITE_END()\n \n@@ -584,7 +589,7 @@ BOOST_AUTO_TEST_CASE(future_when_any_move_only_range_with_diamond_formation_elem\n       start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return stlab::move_only{ x + 1 }; },\n         _task_counter, block_context)));\n     futures.push_back(\n-      start.then(custom_scheduler<1>(), make_non_blocking_functor(\n+      start.then(custom_scheduler<0>(), make_non_blocking_functor(\n         [&_context = block_context](auto x) {\n       _context._may_proceed = true;\n       return stlab::move_only{ x + 2 };\n@@ -594,10 +599,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_move_only_range_with_diamond_formation_elem\n       start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return stlab::move_only{ x + 3 }; },\n         _task_counter, block_context)));\n     futures.push_back(\n-      start.then(custom_scheduler<1>(), make_blocking_functor([](int x) { return stlab::move_only{ x + 5 }; },\n+      start.then(custom_scheduler<0>(), make_blocking_functor([](int x) { return stlab::move_only{ x + 5 }; },\n         _task_counter, block_context)));\n \n-    sut = when_any(custom_scheduler<0>(),\n+    sut = when_any(custom_scheduler<1>(),\n       [&_i = index](stlab::move_only x, size_t index) {\n       _i = index;\n       return std::move(x);\n@@ -612,10 +617,10 @@ BOOST_AUTO_TEST_CASE(future_when_any_move_only_range_with_diamond_formation_elem\n   block_context._thread_block.notify_all();\n   wait_until_all_tasks_completed();\n \n-  BOOST_WARN_EQUAL(size_t(1), index);\n-  BOOST_WARN_EQUAL(4711 + 2, (*sut.get_try()).member());\n-  BOOST_WARN_LE(2, custom_scheduler<0>::usage_counter());\n-  BOOST_WARN_LE(2, custom_scheduler<1>::usage_counter());\n+  BOOST_REQUIRE_EQUAL(size_t(1), index);\n+  BOOST_REQUIRE_EQUAL(4711 + 2, (*sut.get_try()).member());\n+  BOOST_REQUIRE_LE(2, custom_scheduler<0>::usage_counter());\n+  BOOST_REQUIRE_LE(1, custom_scheduler<1>::usage_counter());\n }\n \n BOOST_AUTO_TEST_SUITE_END()\n\\ No newline at end of file"}]}