#include #include #include using namespace XCEngine::Resources; using namespace XCEngine::Containers; namespace { TEST(ResourceDependencyGraph, DefaultConstructor) { ResourceDependencyGraph graph; } TEST(ResourceDependencyGraph, AddNode) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Texture); EXPECT_TRUE(graph.HasNode(ResourceGUID(1))); } TEST(ResourceDependencyGraph, AddMultipleNodes) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Texture); graph.AddNode(ResourceGUID(2), ResourceType::Mesh); graph.AddNode(ResourceGUID(3), ResourceType::Material); EXPECT_TRUE(graph.HasNode(ResourceGUID(1))); EXPECT_TRUE(graph.HasNode(ResourceGUID(2))); EXPECT_TRUE(graph.HasNode(ResourceGUID(3))); } TEST(ResourceDependencyGraph, RemoveNode) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Texture); EXPECT_TRUE(graph.HasNode(ResourceGUID(1))); graph.RemoveNode(ResourceGUID(1)); EXPECT_FALSE(graph.HasNode(ResourceGUID(1))); } TEST(ResourceDependencyGraph, AddDependency) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Material); graph.AddNode(ResourceGUID(2), ResourceType::Texture); graph.AddDependency(ResourceGUID(1), ResourceGUID(2)); auto deps = graph.GetDependencies(ResourceGUID(1)); EXPECT_EQ(deps.Size(), 1u); EXPECT_EQ(deps[0], ResourceGUID(2)); } TEST(ResourceDependencyGraph, GetDependents) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Material); graph.AddNode(ResourceGUID(2), ResourceType::Texture); graph.AddDependency(ResourceGUID(1), ResourceGUID(2)); auto dependents = graph.GetDependents(ResourceGUID(2)); EXPECT_EQ(dependents.Size(), 1u); EXPECT_EQ(dependents[0], ResourceGUID(1)); } TEST(ResourceDependencyGraph, GetAllDependencies) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Material); graph.AddNode(ResourceGUID(2), ResourceType::Texture); graph.AddNode(ResourceGUID(3), ResourceType::Shader); graph.AddDependency(ResourceGUID(1), ResourceGUID(2)); graph.AddDependency(ResourceGUID(1), ResourceGUID(3)); auto allDeps = graph.GetAllDependencies(ResourceGUID(1)); EXPECT_EQ(allDeps.Size(), 2u); } TEST(ResourceDependencyGraph, RefCount) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Texture); EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 0u); graph.IncrementRefCount(ResourceGUID(1)); EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 1u); graph.IncrementRefCount(ResourceGUID(1)); EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 2u); graph.DecrementRefCount(ResourceGUID(1)); EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 1u); } TEST(ResourceDependencyGraph, Unload) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Texture); EXPECT_TRUE(graph.Unload(ResourceGUID(1))); graph.IncrementRefCount(ResourceGUID(1)); EXPECT_FALSE(graph.Unload(ResourceGUID(1))); } TEST(ResourceDependencyGraph, Clear) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Texture); graph.AddNode(ResourceGUID(2), ResourceType::Mesh); EXPECT_TRUE(graph.HasNode(ResourceGUID(1))); EXPECT_TRUE(graph.HasNode(ResourceGUID(2))); graph.Clear(); EXPECT_FALSE(graph.HasNode(ResourceGUID(1))); EXPECT_FALSE(graph.HasNode(ResourceGUID(2))); } TEST(ResourceDependencyGraph, RemoveDependency) { ResourceDependencyGraph graph; graph.AddNode(ResourceGUID(1), ResourceType::Material); graph.AddNode(ResourceGUID(2), ResourceType::Texture); graph.AddDependency(ResourceGUID(1), ResourceGUID(2)); auto deps = graph.GetDependencies(ResourceGUID(1)); EXPECT_EQ(deps.Size(), 1u); graph.RemoveDependency(ResourceGUID(1), ResourceGUID(2)); deps = graph.GetDependencies(ResourceGUID(1)); EXPECT_EQ(deps.Size(), 0u); } } // namespace