secene 接入 多继承链
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user