Files
Renderive/Kernel/tests/renderive/scene/Dependency_Resolver_Test.cpp
T
2026-08-15 00:23:52 +08:00

63 lines
2.1 KiB
C++

#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