中间状态暂存
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user