中间状态暂存

This commit is contained in:
2026-08-14 17:53:13 +08:00
parent 260f649b08
commit bb64801679
75 changed files with 2984 additions and 1823 deletions
@@ -5,13 +5,12 @@
#include <thread>
#include "renderive/state/State_Strategy.hpp"
#include "State_Test_Types.hpp"
struct Triple_State_Test_Base {};
struct Triple_State_Test_State {
int value{};
};
TEST(triple_state_strategy_test, publishes_then_acquires_render_state) {
State_Render_State_Reader render;
Triple_State_Strategy<Triple_State_Test_Base, Triple_State_Test_State> strategy;
Triple_State_Storage<Triple_State_Test_State> strategy;
strategy.set<&Triple_State_Test_State::value>(7);
strategy.publish();
EXPECT_EQ(render.read(strategy).value, 0);
@@ -20,7 +19,7 @@ TEST(triple_state_strategy_test, publishes_then_acquires_render_state) {
}
TEST(triple_state_strategy_test, returns_render_state_snapshot) {
State_Render_State_Reader render;
Triple_State_Strategy<Triple_State_Test_Base, Triple_State_Test_State> strategy;
Triple_State_Storage<Triple_State_Test_State> strategy;
const auto snapshot = render.read(strategy);
strategy.set<&Triple_State_Test_State::value>(7);
strategy.publish();
@@ -28,16 +27,14 @@ TEST(triple_state_strategy_test, returns_render_state_snapshot) {
EXPECT_EQ(snapshot.value, 0);
EXPECT_EQ(render.read(strategy).value, 7);
}
struct Multi_State_A_Base {};
struct Multi_State_B_Base {};
struct Multi_State_A {
int value{};
};
struct Multi_State_B {
int value{};
};
struct Multi_State_A_Strategy : Double_State_Strategy<Multi_State_A_Base, Multi_State_A> {};
struct Multi_State_B_Strategy : Double_State_Strategy<Multi_State_B_Base, Multi_State_B> {};
struct Multi_State_A_Strategy : Double_State_Storage<Multi_State_A> {};
struct Multi_State_B_Strategy : Double_State_Storage<Multi_State_B> {};
struct Multi_State_Product : Multi_State_A_Strategy, Multi_State_B_Strategy {};
TEST(double_state_strategy_test, supports_named_base_access_in_multiple_inheritance) {
State_Render_State_Reader render;
@@ -51,7 +48,7 @@ TEST(double_state_strategy_test, supports_named_base_access_in_multiple_inherita
}
TEST(triple_state_strategy_test, concurrently_acquires_render_revision_without_data_race) {
State_Render_State_Reader render;
Triple_State_Strategy<Triple_State_Test_Base, Triple_State_Test_State> strategy;
Triple_State_Storage<Triple_State_Test_State> strategy;
std::atomic<bool> finished{};
auto acquire = [&] {
while (!finished.load(std::memory_order_acquire)) {
@@ -91,7 +88,7 @@ struct Triple_State_Throwing_Assignment_State {
};
TEST(triple_state_strategy_test, failed_publish_keeps_published_revision_and_render_state_unchanged) {
State_Render_State_Reader render;
using Strategy = Triple_State_Strategy<Triple_State_Test_Base, Triple_State_Throwing_Assignment_State>;
using Strategy = Triple_State_Storage<Triple_State_Throwing_Assignment_State>;
Triple_State_Throwing_Assignment_State::throw_on_copy_assignment = false;
Strategy strategy(Triple_State_Throwing_Assignment_State(1, 2));
strategy.set<&Triple_State_Throwing_Assignment_State::first>(10);