GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
math_vector2_test.h
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
8#ifndef DESIGNLAB_MATH_VECTOR2_TEST_H_
9#define DESIGNLAB_MATH_VECTOR2_TEST_H_
10
11#include <utility>
12
13#include <doctest.h>
14
15#include "math_vector2.h"
16
17
18TEST_SUITE("Vector2::Constructor")
19{
21
22 TEST_CASE("デフォルトコンストラクタを呼んだ時,0ベクトルになるべき")
23 {
24 const auto v = Vector2();
25 const float expected = 0.0f;
26 CHECK(v.x == expected);
27 CHECK(v.y == expected);
28 }
29
30 TEST_CASE("引数に値を渡した時,その値で初期化されるべき")
31 {
32 const auto v = Vector2(1, 2);
33 const float expected_x = 1.0f;
34 const float expected_y = 2.0f;
35 CHECK(v.x == expected_x);
36 CHECK(v.y == expected_y);
37 }
38
39 TEST_CASE("コピーコンストラクタを呼んだ時,コピー元と同じ値になるべき")
40 {
41 const auto v1 = Vector2(1, 2);
42 const auto v2 = Vector2(v1);
43 CHECK(v1 == v2);
44 }
45
46 TEST_CASE("ムーブコンストラクタを呼んだ時,コピー元と同じ値になるべき")
47 {
48 Vector2 v1 = Vector2(1, 2);
49 const Vector2 v2 = Vector2(std::move(v1));
50 CHECK(v1 == v2);
51 }
52}
53
54TEST_SUITE("Vector2::Cross")
55{
57
58 TEST_CASE("他のベクトルを渡した時,自身×他のベクトルの外積が返るべき")
59 {
60 SUBCASE("(1,0)と(0,1)を引数に渡したとき,1が返るべき")
61 {
62 const auto v1 = Vector2(1, 0);
63 const auto v2 = Vector2(0, 1);
64 const auto actual = v1.Cross(v2);
65 const auto expected = 1.0f;
66 CHECK(actual == expected);
67 }
68
69 SUBCASE("(0,1)と(1,0)を引数に渡したとき,-1が返るべき")
70 {
71 const auto v1 = Vector2(0, 1);
72 const auto v2 = Vector2(1, 0);
73 const auto actual = v1.Cross(v2);
74 const auto expected = -1.0f;
75 CHECK(actual == expected);
76 }
77
78 SUBCASE("(1,1)と(1,1)を引数に渡したとき,0が返るべき")
79 {
80 const auto v1 = Vector2(1, 1);
81 const auto v2 = Vector2(1, 1);
82 const auto actual = v1.Cross(v2);
83 const auto expected = 0.0f;
84 CHECK(actual == expected);
85 }
86 }
87}
88
89TEST_SUITE("Vector2::Dot")
90{
92
93 TEST_CASE("他のベクトルを渡した時,自身×他のベクトルの内積が返るべき")
94 {
95 SUBCASE("(1,0)と(0,1)を引数に渡したとき,0が返るべき")
96 {
97 const auto v1 = Vector2(1, 0);
98 const auto v2 = Vector2(0, 1);
99 const auto actual = v1.Dot(v2);
100 const auto expected = 0.0f;
101 CHECK(actual == expected);
102 }
103
104 SUBCASE("(0,1)と(1,0)を引数に渡したとき,0が返るべき")
105 {
106 const auto v1 = Vector2(0, 1);
107 const auto v2 = Vector2(1, 0);
108 const auto actual = v1.Dot(v2);
109 const auto expected = 0.0f;
110 CHECK(actual == expected);
111 }
112
113 SUBCASE("(1,1)と(1,1)を引数に渡したとき,2が返るべき")
114 {
115 const auto v1 = Vector2(1, 1);
116 const auto v2 = Vector2(1, 1);
117 const auto actual = v1.Dot(v2);
118 const auto expected = 2.0f;
119 CHECK(actual == expected);
120 }
121 }
122}
123
124TEST_SUITE("Vector2::GetDistanceFrom")
125{
126 using designlab::Vector2;
127
128 TEST_CASE("他のベクトルを渡した時,そのベクトルとの距離が返るべき")
129 {
130 SUBCASE("(1,0)と(0,1)を引数に渡したとき,1.41421356237fが返るべき")
131 {
132 const auto v1 = Vector2(1, 0);
133 const auto v2 = Vector2(0, 1);
134 const auto actual = v1.GetDistanceFrom(v2);
135 const auto expected = 1.41421356237f;
136 CHECK(actual == expected);
137 }
138
139 SUBCASE("(0,1)と(1,0)を引数に渡したとき,1.41421356237fが返るべき")
140 {
141 const auto v1 = Vector2(0, 1);
142 const auto v2 = Vector2(1, 0);
143 const auto actual = v1.GetDistanceFrom(v2);
144 const auto expected = 1.41421356237f;
145 CHECK(actual == expected);
146 }
147
148 SUBCASE("(1,1)と(1,1)を引数に渡したとき,0が返るべき")
149 {
150 const auto v1 = Vector2(1, 1);
151 const auto v2 = Vector2(1, 1);
152 const auto actual = v1.GetDistanceFrom(v2);
153 const auto expected = 0.0f;
154 CHECK(actual == expected);
155 }
156 }
157}
158
159TEST_SUITE("Vector2::GetLength")
160{
161 using designlab::Vector2;
162
163 TEST_CASE("実行時,長さが返るべき")
164 {
165 SUBCASE("(3,5)で実行時,5.83095189485fが返るべき")
166 {
167 const auto v = Vector2(3, 5);
168 const auto actual = v.GetLength();
169 const auto expected = 5.83095189485f;
170 CHECK(actual == expected);
171 }
172
173 SUBCASE("(0,0)で実行時,0が返るべき")
174 {
175 const auto v = Vector2(0, 0);
176 const auto actual = v.GetLength();
177 const auto expected = 0.0f;
178 CHECK(actual == expected);
179 }
180
181 SUBCASE("(-3,-5)で実行時,5.83095189485fが返るべき")
182 {
183 const auto v = Vector2(-3, -5);
184 const auto actual = v.GetLength();
185 const auto expected = 5.83095189485f;
186 CHECK(actual == expected);
187 }
188 }
189}
190
191TEST_SUITE("Vector2::GetNormalized")
192{
193 using designlab::Vector2;
194
195 TEST_CASE("実行時,正規化されたベクトルを返すべき")
196 {
197 SUBCASE("(3,5)で実行時,(0.514495,0.857493)が返るべき")
198 {
199 const auto v = Vector2(3, 5);
200 const auto actual = v.GetNormalized();
201 const auto expected = Vector2(0.514495f, 0.857493f);
202
203 CHECK(actual == expected);
204 CHECK(actual.GetLength() == doctest::Approx(1.0f));
205 }
206
207 SUBCASE("(0,0)で実行時,(0,0)が返るべき")
208 {
209 const auto v = Vector2(0, 0);
210 const auto actual = v.GetNormalized();
211 const auto expected = Vector2(0, 0);
212
213 CHECK(actual == expected);
214 CHECK(actual.GetLength() == doctest::Approx(0.0f));
215 }
216
217 SUBCASE("(-3,-5)で実行時,(-0.514495,-0.857493)が返るべき")
218 {
219 const auto v = Vector2(-3, -5);
220 const auto actual = v.GetNormalized();
221 const auto expected = Vector2(-0.514495f, -0.857493f);
222
223 CHECK(actual == expected);
224 CHECK(actual.GetLength() == doctest::Approx(1.0f));
225 }
226 }
227}
228
229TEST_SUITE("Vector2::GetSquaredLength")
230{
231 using designlab::Vector2;
232
233 TEST_CASE("実行時,長さの2乗が返るべき")
234 {
235 SUBCASE("(3,5)で実行時,34が返るべき")
236 {
237 const auto v = Vector2(3, 5);
238 const auto actual = v.GetSquaredLength();
239 const auto expected = 34.0f;
240 CHECK(actual == expected);
241 }
242
243 SUBCASE("(0,0)で実行時,0が返るべき")
244 {
245 const auto v = Vector2(0, 0);
246 const auto actual = v.GetSquaredLength();
247 const auto expected = 0.0f;
248 CHECK(actual == expected);
249 }
250
251 SUBCASE("(-3,-5)で実行時,34が返るべき")
252 {
253 const auto v = Vector2(-3, -5);
254 const auto actual = v.GetSquaredLength();
255 const auto expected = 34.0f;
256 CHECK(actual == expected);
257 }
258 }
259}
260
261TEST_SUITE("Vector2::IsZero")
262{
263 using designlab::Vector2;
264
265 TEST_CASE("零ベクトルを渡した時,trueが返るべき")
266 {
267 const auto v1 = Vector2(0, 0);
268
269 CHECK(v1.IsZero());
270
271 const auto v2 = Vector2::GetZeroVec();
272
273 CHECK(v2.IsZero());
274 }
275
276 TEST_CASE("零ベクトルでないベクトルを渡した時,falseが返るべき")
277 {
278 const auto v1 = Vector2(1, 0);
279
280 CHECK_FALSE(v1.IsZero());
281
282 const auto v2 = Vector2(0, 1);
283
284 CHECK_FALSE(v2.IsZero());
285
286 const auto v3 = Vector2(1, 1);
287
288 CHECK_FALSE(v3.IsZero());
289 }
290}
291
292TEST_SUITE("Vector2::Normalize")
293{
294 using designlab::Vector2;
295
296 TEST_CASE("実行時,正規化されたベクトルになるべき")
297 {
298 SUBCASE("(3,5)で実行時,(0.514495,0.857493)になるべき")
299 {
300 auto v = Vector2(3, 5);
301 v.Normalize();
302 const auto expected = Vector2(0.514495f, 0.857493f);
303
304 CHECK(v == expected);
305 CHECK(v.GetLength() == doctest::Approx(1.0f));
306 }
307
308 SUBCASE("(0,0)で実行時,(0,0)になるべき")
309 {
310 auto v = Vector2(0, 0);
311 v.Normalize();
312 const auto expected = Vector2(0, 0);
313
314 CHECK(v == expected);
315 CHECK(v.GetLength() == doctest::Approx(0.0f));
316 }
317
318 SUBCASE("(-3,-5)で実行時,(-0.514495,-0.857493)になるべき")
319 {
320 auto v = Vector2(-3, -5);
321 v.Normalize();
322 const auto expected = Vector2(-0.514495f, -0.857493f);
323
324 CHECK(v == expected);
325 CHECK(v.GetLength() == doctest::Approx(1.0f));
326 }
327 }
328}
329
330#endif // DESIGNLAB_MATH_VECTOR2_TEST_H_
TEST_SUITE("Vector2::Constructor")
2次元の位置ベクトルを表す構造体.