Files
clice/tests/unit/Async/Lock.cpp
ykiko 836d9dc988 Add basic test client (#156)
Co-authored-by: star9029 <hengxings783@gmail.com>
2025-07-21 17:55:10 +08:00

48 lines
1023 B
C++

#include "Test/Test.h"
#include "Async/Async.h"
namespace clice::testing {
namespace {
TEST(Async, Lock) {
async::Lock lock;
int x = 0;
auto task1 = [&]() -> async::Task<> {
auto guard = co_await lock.try_lock();
co_await async::sleep(5);
EXPECT_EQ(x, 0);
co_await async::sleep(10);
EXPECT_EQ(x, 0);
co_await async::sleep(5);
x = 1;
};
auto task2 = [&]() -> async::Task<> {
auto guard = co_await lock.try_lock();
co_await async::sleep(5);
EXPECT_EQ(x, 1);
co_await async::sleep(5);
EXPECT_EQ(x, 1);
co_await async::sleep(10);
x = 2;
};
auto task3 = [&]() -> async::Task<> {
auto guard = co_await lock.try_lock();
co_await async::sleep(10);
EXPECT_EQ(x, 2);
co_await async::sleep(5);
EXPECT_EQ(x, 2);
co_await async::sleep(5);
};
async::run(task1(), task2(), task3());
}
} // namespace
} // namespace clice::testing