xcal
基于 C++23 的现代图形渲染引擎
载入中...
搜索中...
未找到
tests
scene
test_scene.cc
浏览该文件的文档.
1
#include <gtest/gtest.h>
2
3
#include <cmath>
4
#include <
xcal/mobject/objects/circle.hpp
>
5
#include <
xcal/mobject/objects/rectangle.hpp
>
6
#include <
xcal/property/vec.hpp
>
7
#include <
xcal/scene/scene.hpp
>
8
14
TEST
(TestScene, CreateEmptyScene) {
15
// 测试创建空场景
16
xcal::scene::Scene
scene;
17
18
// 新创建的场景应该为空
19
EXPECT_TRUE(scene.
mobjects
().empty());
20
EXPECT_EQ(scene.
mobjects
().size(), 0);
21
}
22
23
TEST
(TestScene, AddCircleWithSmartPointer) {
24
// 测试使用智能指针添加圆形对象
25
xcal::scene::Scene
scene;
26
27
// 创建圆形对象并添加到场景
28
xcal::mobject::Circle
* circlePtr = scene.
add
<
xcal::mobject::Circle
>(
29
xcal::property::Position::data_t
{1.0f, 2.0f}, 3.0f);
30
31
// 验证对象添加成功
32
EXPECT_FALSE(scene.
mobjects
().empty());
33
EXPECT_EQ(scene.
mobjects
().size(), 1);
34
EXPECT_NE(circlePtr,
nullptr
);
35
EXPECT_EQ(circlePtr->
radius
(), 3.0f);
36
EXPECT_EQ(circlePtr->pos().x(), 1.0f);
37
EXPECT_EQ(circlePtr->pos().y(), 2.0f);
38
}
39
40
TEST
(TestScene, AddCircleWithRawPointer) {
41
// 测试使用裸指针添加圆形对象
42
xcal::scene::Scene
scene;
43
44
// 创建圆形对象并添加到场景
45
auto
circle =
new
xcal::mobject::Circle
({4.0f, 5.0f}, 6.0f);
46
xcal::mobject::Circle
* circlePtr = scene.
add
(circle);
47
48
// 验证对象添加成功
49
EXPECT_FALSE(scene.
mobjects
().empty());
50
EXPECT_EQ(scene.
mobjects
().size(), 1);
51
EXPECT_EQ(circlePtr, circle);
52
EXPECT_EQ(circlePtr->radius(), 6.0f);
53
}
54
55
TEST
(TestScene, AddCircleWithConstruction) {
56
// 测试直接在场景中构造并添加圆形对象
57
xcal::scene::Scene
scene;
58
59
// 在场景中直接构造圆形对象
60
xcal::mobject::Circle
* circlePtr = scene.
add
<
xcal::mobject::Circle
>(
61
xcmath::vec2<float_t>
{7.0f, 8.0f}, 9.0f);
62
63
// 验证对象添加成功
64
EXPECT_FALSE(scene.
mobjects
().empty());
65
EXPECT_EQ(scene.
mobjects
().size(), 1);
66
EXPECT_NE(circlePtr,
nullptr
);
67
EXPECT_EQ(circlePtr->
radius
(), 9.0f);
68
EXPECT_EQ(circlePtr->pos().x(), 7.0f);
69
EXPECT_EQ(circlePtr->pos().y(), 8.0f);
70
}
71
72
TEST
(TestScene, AddMultipleObjects) {
73
// 测试添加多个不同类型的对象
74
xcal::scene::Scene
scene;
75
76
// 添加圆形对象
77
auto
circlePtr = scene.
add
<
xcal::mobject::Circle
>(
78
xcal::property::Position::data_t
{1.0f, 1.0f}, 2.0f);
79
80
// 添加矩形对象
81
auto
rectPtr = scene.
add
<
xcal::mobject::Rectangle
>(
82
xcal::property::Vec<float_t, 3>::data_t
{3.0f, 3.0f}, 4.0f, 5.0f);
83
84
// 验证两个对象都添加成功
85
EXPECT_EQ(scene.
mobjects
().size(), 2);
86
EXPECT_NE(circlePtr,
nullptr
);
87
EXPECT_NE(rectPtr,
nullptr
);
88
89
// 验证对象类型正确
90
EXPECT_EQ(circlePtr->radius(), 2.0f);
91
// 注意:这里假设 Rectangle 有 width() 和 height() 方法
92
}
93
94
TEST
(TestScene, ObjectOwnership) {
95
// 测试场景对对象的所有权管理
96
xcal::scene::Scene
scene;
97
98
// 创建对象并添加到场景
99
auto
originalCircle = std::make_unique<xcal::mobject::Circle>();
100
xcal::mobject::Circle
* circlePtr = originalCircle.get();
101
102
// 转移所有权到场景
103
scene.
add
(std::move(originalCircle));
104
105
// 原始指针应该不再拥有对象
106
// 场景应该管理对象的生命周期
107
EXPECT_FALSE(scene.
mobjects
().empty());
108
109
// 验证可以通过返回的指针访问对象
110
EXPECT_EQ(circlePtr->
radius
(), 1.0f);
// 默认半径
111
}
112
113
TEST
(TestScene, ConstAccessToObjects) {
114
// 测试常量访问对象列表
115
xcal::scene::Scene
scene;
116
117
// 添加一些对象
118
scene.
add
<
xcal::mobject::Circle
>();
119
scene.
add
<
xcal::mobject::Circle
>();
120
121
// 获取常量引用
122
const
auto
& constObjects = scene.
mobjects
();
123
124
// 验证可以常量访问
125
EXPECT_EQ(constObjects.size(), 2);
126
127
// 验证每个对象都存在
128
for
(
const
auto
& obj : constObjects) {
129
EXPECT_NE(obj.get(),
nullptr
);
130
EXPECT_TRUE(obj->visible());
// 默认应该可见
131
}
132
}
133
134
TEST
(TestScene, SceneDestruction) {
135
// 测试场景析构时正确释放对象
136
// 这个测试主要验证没有内存泄漏
137
// 实际的内存泄漏检测需要专门的工具
138
139
{
140
xcal::scene::Scene
scene;
141
142
// 添加多个对象
143
scene.
add
<
xcal::mobject::Circle
>();
144
scene.
add
<
xcal::mobject::Circle
>();
145
scene.
add
<
xcal::mobject::Circle
>();
146
147
EXPECT_EQ(scene.
mobjects
().size(), 3);
148
}
149
150
// 场景析构后,所有对象应该被正确释放
151
// 如果没有内存错误,测试通过
152
SUCCEED();
153
}
xcal::mobject::Circle
圆形图形对象类
Definition
circle.hpp:18
xcal::mobject::Circle::radius
float_t radius() const
获取半径值
Definition
circle.hpp:41
xcal::mobject::Rectangle
Definition
rectangle.hpp:12
xcal::scene::AbsScene::mobjects
std::vector< ObjectPtr > & mobjects()
获取对象列表(可修改)
Definition
abs_scene.hpp:137
xcal::scene::AbsScene::add
T * add(Args &&... args)
添加对象/相机/动画/时间线
Definition
abs_scene.hpp:56
xcal::scene::Scene
Definition
scene.hpp:8
xcmath::vec
Vector class template
Definition
vec.hpp:206
circle.hpp
rectangle.hpp
scene.hpp
TEST
TEST(TestScene, CreateEmptyScene)
场景管理测试套件
Definition
test_scene.cc:14
vec.hpp
生成于 2025年 九月 19日 星期五 21:12:12 , 为 xcal使用
1.9.8