From 89584adbcc1037f4c1d38ca294a9930ab4537aee Mon Sep 17 00:00:00 2001 From: Khalil Estell Date: Tue, 20 Jan 2026 17:55:46 -0800 Subject: [PATCH] :white_check: Add more tests to basic context --- tests/basic_context.test.cpp | 65 ++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tests/basic_context.test.cpp b/tests/basic_context.test.cpp index a9919b9..f70c6c7 100644 --- a/tests/basic_context.test.cpp +++ b/tests/basic_context.test.cpp @@ -1,6 +1,7 @@ #include #include +#include import async_context; import test_utils; @@ -32,6 +33,26 @@ boost::ut::suite<"basic_context"> basic_context = []() { expect(that % stack_size == ctx->capacity()); }; + "sync_wait --> future"_test = []() { + // Setup + async::basic_context<1024> ctx; + + auto future = [](async::context&) -> async::future { + co_return 5; + }(ctx); + + ctx->sync_wait([](async::sleep_duration p_sleep_duration) { + std::this_thread::sleep_for(p_sleep_duration); + }); + + // Verify + expect(that % 0 == ctx->memory_used()); + expect(that % future.done()); + expect(that % future.has_value()); + expect(that % 5 == future.value()); + expect(that % stack_size == ctx->capacity()); + }; + "co_await coroutine"_test = []() { // Setup async::basic_context ctx; @@ -124,4 +145,48 @@ boost::ut::suite<"basic_context"> basic_context = []() { expect(that % stack_size == ctx->capacity()); }; + + "co_await Xms + sync_wait"_test = []() { + // Setup + async::basic_context ctx; + + static constexpr int return_value1 = 1413; + static constexpr int return_value2 = 4324; + static constexpr int expected_total = return_value1 + return_value2; + + using namespace std::literals; + unsigned step = 0; + auto co2 = [](async::context&) -> async::future { + co_await 100ms; + co_return return_value1; + }; + + auto co = [&step, &co2](async::context& p_ctx) -> async::future { + step = 1; // skipped as the co2 will immediately start + co_await 44ms; + auto val = co_await co2(p_ctx); + co_await 50ms; + step = 2; + co_return val + return_value2; + }; + std::vector sleep_cycles; + + // Exercise + auto future = co(ctx); + + ctx->sync_wait([&](async::sleep_duration p_sleep_time) { + sleep_cycles.push_back(p_sleep_time); + }); + + // Verify + expect(that % 0 == ctx->memory_used()); + expect(that % future.done()); + expect(that % future.has_value()); + expect(that % 2 == step); + expect(that % expected_total == future.value()); + expect(that % sleep_cycles == + std::vector{ 44ms, 100ms, 50ms }); + + expect(that % stack_size == ctx->capacity()); + }; };