结构优化
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
#include "../Renderive/architecture/Update_Completion.h"
|
||||
#include "asio.hpp"
|
||||
#include <gtest/gtest.h>
|
||||
#include <atomic>
|
||||
#include <future>
|
||||
int main() {
|
||||
TEST(Update_Completion, CompletesStageWaitersAndCancelledWaiters) {
|
||||
asio::io_context io;
|
||||
auto state = renderive::make_update_state();
|
||||
renderive::Update_Ticket ticket(state);
|
||||
@@ -15,13 +16,11 @@ int main() {
|
||||
}));
|
||||
state->complete_until(renderive::Update_Stage::Input_Released);
|
||||
io.poll();
|
||||
if (rendered_count.load(std::memory_order_relaxed) != 0)
|
||||
return 1;
|
||||
EXPECT_EQ(rendered_count.load(std::memory_order_relaxed), 0);
|
||||
state->complete_until(renderive::Update_Stage::Rendered);
|
||||
io.restart();
|
||||
io.run();
|
||||
if (rendered_count.load(std::memory_order_relaxed) != 1)
|
||||
return 2;
|
||||
EXPECT_EQ(rendered_count.load(std::memory_order_relaxed), 1);
|
||||
ticket.async_wait(renderive::Update_Stage::Input_Released, asio::bind_executor(io.get_executor(), [&](std::error_code error, renderive::Update_Outcome outcome) {
|
||||
if (error || outcome != renderive::Update_Outcome::Completed)
|
||||
std::terminate();
|
||||
@@ -29,8 +28,7 @@ int main() {
|
||||
}));
|
||||
io.restart();
|
||||
io.run();
|
||||
if (input_count.load(std::memory_order_relaxed) != 1)
|
||||
return 3;
|
||||
EXPECT_EQ(input_count.load(std::memory_order_relaxed), 1);
|
||||
auto cancelled_state = renderive::make_update_state();
|
||||
renderive::Update_Ticket cancelled_ticket(cancelled_state);
|
||||
std::atomic_int cancel_count{};
|
||||
@@ -42,5 +40,9 @@ int main() {
|
||||
cancelled_state->complete_all(std::make_error_code(std::errc::operation_canceled), renderive::Update_Outcome::Cancelled);
|
||||
io.restart();
|
||||
io.run();
|
||||
return cancel_count.load(std::memory_order_relaxed) == 1 ? 0 : 4;
|
||||
EXPECT_EQ(cancel_count.load(std::memory_order_relaxed), 1);
|
||||
}
|
||||
int main(int argc, char** argv) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user