secene 接入 多继承链

This commit is contained in:
2026-08-15 00:23:52 +08:00
parent 12e46b4c21
commit 2c7c8abd4f
15 changed files with 1011 additions and 355 deletions
@@ -0,0 +1,62 @@
#include <gtest/gtest.h>
#include <memory_resource>
#include <stdexcept>
#include "renderive/scene/dependency/Dependency_Resolver.hpp"
namespace {
enum class Preparation {
acquire_source,
transform_vertices,
upload_visual
};
using Resolver =
renderive::scene::dependency::Dependency_Resolver<Preparation>;
TEST(dependency_resolver_test,
resolves_declared_dependencies_in_deterministic_order) {
std::pmr::unsynchronized_pool_resource memory;
Resolver resolver(memory);
resolver.attach(Preparation::upload_visual);
resolver.attach(Preparation::acquire_source);
resolver.attach(Preparation::transform_vertices);
resolver.add_parent(Preparation::transform_vertices,
Preparation::acquire_source);
resolver.add_parent(Preparation::upload_visual,
Preparation::transform_vertices);
const auto resolution = resolver.resolve();
EXPECT_EQ(resolution.order,
(std::vector{Preparation::acquire_source,
Preparation::transform_vertices,
Preparation::upload_visual}));
}
TEST(dependency_resolver_test,
rejected_cycle_preserves_the_previous_authoritative_relationships) {
std::pmr::unsynchronized_pool_resource memory;
Resolver resolver(memory);
resolver.attach(Preparation::acquire_source);
resolver.attach(Preparation::transform_vertices);
resolver.attach(Preparation::upload_visual);
resolver.add_parent(Preparation::transform_vertices,
Preparation::acquire_source);
resolver.add_parent(Preparation::upload_visual,
Preparation::transform_vertices);
EXPECT_THROW(
resolver.add_parent(Preparation::acquire_source,
Preparation::upload_visual),
std::logic_error);
EXPECT_TRUE(resolver.parents(Preparation::acquire_source).empty());
EXPECT_EQ(resolver.resolve().order,
(std::vector{Preparation::acquire_source,
Preparation::transform_vertices,
Preparation::upload_visual}));
}
} // namespace