From bf3d2c1e3f98f2adf2257b95299882ba9a748c88 Mon Sep 17 00:00:00 2001 From: owent Date: Fri, 26 Jan 2018 17:28:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=80=E7=82=B9=E7=82=B9=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95=EF=BC=8C=E7=9C=8B=E7=9C=8B=E8=83=BD?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E6=8A=8A=E8=A6=86=E7=9B=96=E7=8E=87=E6=8B=89?= =?UTF-8?q?=E5=88=B080%=E4=BB=A5=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libcopp/utils/config/compiler_features.h | 2 +- test/case/coroutine_context_base_test.cpp | 50 +++++++++++++++++-- test/case/coroutine_task_test.cpp | 4 ++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/include/libcopp/utils/config/compiler_features.h b/include/libcopp/utils/config/compiler_features.h index 8500264..9a26b76 100644 --- a/include/libcopp/utils/config/compiler_features.h +++ b/include/libcopp/utils/config/compiler_features.h @@ -124,7 +124,7 @@ # undef UTIL_CONFIG_COMPILER_IS_ADSP # define UTIL_CONFIG_COMPILER_IS_ADSP 1 -#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) # undef UTIL_CONFIG_COMPILER_IS_IAR # define UTIL_CONFIG_COMPILER_IS_IAR 1 diff --git a/test/case/coroutine_context_base_test.cpp b/test/case/coroutine_context_base_test.cpp index c547fa9..f790efc 100644 --- a/test/case/coroutine_context_base_test.cpp +++ b/test/case/coroutine_context_base_test.cpp @@ -6,15 +6,14 @@ #include -typedef copp::coroutine_context_container - test_context_base_coroutine_context_test_type; +typedef copp::coroutine_context_container test_context_base_coroutine_context_test_type; static int g_test_coroutine_base_status = 0; class test_context_base_foo_runner { public: int call_times; - int operator()(void*) { + int operator()(void *) { ++call_times; ++g_test_coroutine_base_status; copp::this_coroutine::get()->yield(); @@ -32,12 +31,54 @@ CASE_TEST(coroutine, context_base) { test_context_base_foo_runner runner; { - copp::allocator::stack_allocator_memory alloc(stack_buff, 128 * 1024); + copp::stack_context test_move_alloc; + + copp::allocator::stack_allocator_memory alloc_created(stack_buff, 128 * 1024); + copp::allocator::stack_allocator_memory alloc(alloc_created); + + alloc_created.allocate(test_move_alloc, 64 * 1024); + CASE_EXPECT_EQ(NULL, test_move_alloc.sp); + test_context_base_coroutine_context_test_type::ptr_t co = test_context_base_coroutine_context_test_type::create(&runner, alloc); runner.call_times = 0; CASE_EXPECT_TRUE(!!co); + CASE_EXPECT_EQ(::copp::COPP_EC_NOT_RUNNING, co->yield()); + + co->start(); + + ++g_test_coroutine_base_status; + CASE_EXPECT_EQ(g_test_coroutine_base_status, 3); + co->resume(); + + ++g_test_coroutine_base_status; + CASE_EXPECT_EQ(g_test_coroutine_base_status, 5); + + CASE_EXPECT_EQ(::copp::COPP_EC_NOT_READY, co->resume()); + CASE_EXPECT_EQ(::copp::COPP_EC_ALREADY_EXIST, co->yield()); + } + + { + g_test_coroutine_base_status = 1; + copp::stack_context test_move_alloc; + + copp::allocator::stack_allocator_memory alloc_created; + alloc_created.attach(stack_buff, 128 * 1024); + copp::allocator::stack_allocator_memory alloc; + alloc = alloc_created; + + alloc_created.allocate(test_move_alloc, 64 * 1024); + CASE_EXPECT_EQ(NULL, test_move_alloc.sp); + + + test_context_base_coroutine_context_test_type::ptr_t co = test_context_base_coroutine_context_test_type::create(&runner, alloc); + runner.call_times = 0; + + CASE_EXPECT_TRUE(!!co); + + CASE_EXPECT_EQ(::copp::COPP_EC_NOT_RUNNING, co->yield()); + co->start(); ++g_test_coroutine_base_status; @@ -48,6 +89,7 @@ CASE_TEST(coroutine, context_base) { CASE_EXPECT_EQ(g_test_coroutine_base_status, 5); CASE_EXPECT_EQ(::copp::COPP_EC_NOT_READY, co->resume()); + CASE_EXPECT_EQ(::copp::COPP_EC_ALREADY_EXIST, co->yield()); } delete[] stack_buff; diff --git a/test/case/coroutine_task_test.cpp b/test/case/coroutine_task_test.cpp index 29f2554..284b2b5 100644 --- a/test/case/coroutine_task_test.cpp +++ b/test/case/coroutine_task_test.cpp @@ -63,6 +63,8 @@ CASE_TEST(coroutine_task, custom_action) { CASE_EXPECT_EQ(g_test_coroutine_task_status, 1); CASE_EXPECT_FALSE(co_task->is_completed()); + CASE_EXPECT_FALSE(co_task->is_canceled()); + CASE_EXPECT_FALSE(co_task->is_faulted()); CASE_EXPECT_EQ(0, co_another_task->start(&g_test_coroutine_task_status)); CASE_EXPECT_EQ(g_test_coroutine_task_status, 2); @@ -78,6 +80,8 @@ CASE_TEST(coroutine_task, custom_action) { CASE_EXPECT_TRUE(co_task->is_completed()); CASE_EXPECT_TRUE(co_another_task->is_completed()); + CASE_EXPECT_FALSE(co_task->is_canceled()); + CASE_EXPECT_FALSE(co_task->is_faulted()); CASE_EXPECT_GT(0, co_another_task->resume(co_another_task.get())); CASE_EXPECT_EQ(g_test_coroutine_task_status, 4);