| 274 | } |
| 275 | |
| 276 | void concurrencpp::tests::test_task_move_constructor() { |
| 277 | // Default constructor: |
| 278 | { |
| 279 | task base_task; |
| 280 | task task(std::move(base_task)); |
| 281 | assert_false(static_cast<bool>(base_task)); |
| 282 | assert_false(static_cast<bool>(task)); |
| 283 | } |
| 284 | |
| 285 | // Function pointer |
| 286 | { |
| 287 | int (*function_pointer)() = &g_test_function; |
| 288 | task base_task(function_pointer); |
| 289 | task task(std::move(base_task)); |
| 290 | |
| 291 | assert_false(static_cast<bool>(base_task)); |
| 292 | assert_true(static_cast<bool>(task)); |
| 293 | assert_true(task.contains<int (*)()>()); |
| 294 | assert_false(task.contains<test_functor<1>>()); |
| 295 | assert_false(task.contains<test_functor<128>>()); |
| 296 | assert_false(task.contains<coroutine_handle<void>>()); |
| 297 | } |
| 298 | |
| 299 | // Function reference |
| 300 | { |
| 301 | int (&function_reference)() = g_test_function; |
| 302 | task base_task(function_reference); |
| 303 | task task(std::move(base_task)); |
| 304 | assert_false(static_cast<bool>(base_task)); |
| 305 | assert_true(static_cast<bool>(task)); |
| 306 | assert_true(task.contains<int (&)()>()); |
| 307 | assert_false(task.contains<test_functor<1>>()); |
| 308 | assert_false(task.contains<test_functor<128>>()); |
| 309 | assert_false(task.contains<coroutine_handle<void>>()); |
| 310 | } |
| 311 | |
| 312 | // small functor |
| 313 | { |
| 314 | test_functor<8> small_functor; |
| 315 | task base_task(small_functor); |
| 316 | task task(std::move(base_task)); |
| 317 | assert_false(static_cast<bool>(base_task)); |
| 318 | assert_true(static_cast<bool>(task)); |
| 319 | assert_false(task.contains<int (*)()>()); |
| 320 | assert_true(task.contains<test_functor<8>>()); |
| 321 | assert_false(task.contains<test_functor<128>>()); |
| 322 | assert_false(task.contains<coroutine_handle<void>>()); |
| 323 | } |
| 324 | |
| 325 | // small lambda |
| 326 | { |
| 327 | std::array<char, 8> padding_s; |
| 328 | auto small_lambda = [padding_s]() mutable { |
| 329 | padding_s.fill(0); |
| 330 | }; |
| 331 | |
| 332 | task base_task(small_lambda); |
| 333 | task task(std::move(base_task)); |
nothing calls this directly
no test coverage detected