核心模板架构
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <type_traits>
|
||||
#include "renderive/base/node/Node.hpp"
|
||||
struct Multiway_Node_Test_Owner {};
|
||||
struct Multiway_Node_Test_Tag {};
|
||||
using Multiway_Node_Test_Type = Multiway_Node<Multiway_Node_Test_Owner, Multiway_Node_Test_Tag>;
|
||||
static_assert(Multiway_Node_Type<Multiway_Node_Test_Type, Multiway_Node_Test_Owner, Multiway_Node_Test_Tag>);
|
||||
static_assert(!std::same_as<Multiway_Node<Multiway_Node_Test_Owner>, Multiway_Node_Test_Type>);
|
||||
TEST(multiway_node_test, reparents_child_and_preserves_order) {
|
||||
Multiway_Node_Test_Owner first_owner;
|
||||
Multiway_Node_Test_Owner second_owner;
|
||||
Multiway_Node_Test_Owner third_owner;
|
||||
Multiway_Node_Test_Type root;
|
||||
Multiway_Node_Test_Type first(&first_owner);
|
||||
Multiway_Node_Test_Type second(&second_owner);
|
||||
Multiway_Node_Test_Type third(&third_owner);
|
||||
root.append_child(first);
|
||||
root.append_child(second);
|
||||
first.append_child(third);
|
||||
EXPECT_EQ(root.children.size(), 2);
|
||||
EXPECT_EQ(first.children.front(), &third);
|
||||
EXPECT_EQ(third.parent, &first);
|
||||
second.append_child(third);
|
||||
EXPECT_TRUE(first.children.empty());
|
||||
EXPECT_EQ(third.parent, &second);
|
||||
}
|
||||
TEST(multiway_node_test, rejects_cycles) {
|
||||
Multiway_Node_Test_Type root;
|
||||
Multiway_Node_Test_Type child;
|
||||
root.append_child(child);
|
||||
EXPECT_THROW(child.append_child(root), std::invalid_argument);
|
||||
}
|
||||
Reference in New Issue
Block a user