62 lines
2.2 KiB
C++
62 lines
2.2 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_EQ(resolver.add_parent(Preparation::acquire_source,
|
|
Preparation::upload_visual).error,
|
|
renderive::scene::dependency::Mutation_Error::cycle);
|
|
|
|
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
|