77 std::atomic_uint32_t task_counter{0};
78 uint32_t fail_counter{0};
79 uint32_t expected_task_counter{0};
80 uint32_t expected_fail_tasks{0};
82 std::queue<std::future<void>> futures;
83 for (uint32_t i = 0; i < num_tasks; ++i) {
84 const bool will_throw = fuzzed_data_provider.
ConsumeBool();
85 const bool wait_immediately = fuzzed_data_provider.
ConsumeBool();
87 std::future<void> fut;
89 expected_fail_tasks++;
92 expected_task_counter++;
97 if (wait_immediately) {
103 futures.emplace(std::move(fut));
108 while (!futures.empty()) {
109 auto fut = std::move(futures.front());
115 assert(task_counter.load() == expected_task_counter);
116 assert(fail_counter == expected_fail_tasks);