1/****************************************************************************
2**
3** Copyright (C) 2016 Paul Lemire <paul.lemire350@gmail.com>
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt3D module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29#include <QtTest/QtTest>
30#include <Qt3DCore/private/vector3d_p.h>
31
32class tst_Vector3D_Base: public QObject
33{
34 Q_OBJECT
35private Q_SLOTS:
36 void defaultConstruction()
37 {
38 // GIVEN
39 QVector3D vec3;
40
41 // THEN
42 QCOMPARE(vec3.x(), 0.0f);
43 QCOMPARE(vec3.y(), 0.0f);
44 QCOMPARE(vec3.z(), 0.0f);
45 }
46
47 void checkExplicitConstruction()
48 {
49 // GIVEN
50 QVector3D vec3(427.0f, 454.0f, 383.0f);
51
52 // THEN
53 QCOMPARE(vec3.x(), 427.0f);
54 QCOMPARE(vec3.y(), 454.0f);
55 QCOMPARE(vec3.z(), 383.0f);
56 }
57
58 void checkSelfAddition_data()
59 {
60 QTest::addColumn<float>(name: "xO");
61 QTest::addColumn<float>(name: "yO");
62 QTest::addColumn<float>(name: "zO");
63
64 QTest::addColumn<float>(name: "xA");
65 QTest::addColumn<float>(name: "yA");
66 QTest::addColumn<float>(name: "zA");
67
68 QTest::addColumn<float>(name: "xR");
69 QTest::addColumn<float>(name: "yR");
70 QTest::addColumn<float>(name: "zR");
71
72 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 0.0f
73 << 1.0f << 5.0f << 8.0f
74 << 1.0f << 5.0f << 8.0f;
75
76 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << -4.0f
77 << 5.0f << -8.0f << 4.0f
78 << 0.0f << 0.0f << 0.0f;
79 }
80
81 void checkSelfAddition()
82 {
83 QFETCH(float, xO);
84 QFETCH(float, yO);
85 QFETCH(float, zO);
86
87 QFETCH(float, xA);
88 QFETCH(float, yA);
89 QFETCH(float, zA);
90
91 QFETCH(float, xR);
92 QFETCH(float, yR);
93 QFETCH(float, zR);
94
95 // GIVEN
96 QVector3D vo(xO, yO, zO);
97
98 // WHEN
99 vo += QVector3D(xA, yA, zA);
100
101 // THEN
102 QCOMPARE(vo.x(), xR);
103 QCOMPARE(vo.y(), yR);
104 QCOMPARE(vo.z(), zR);
105 }
106
107 void checkSelfSubstraction_data()
108 {
109 QTest::addColumn<float>(name: "xO");
110 QTest::addColumn<float>(name: "yO");
111 QTest::addColumn<float>(name: "zO");
112
113 QTest::addColumn<float>(name: "xA");
114 QTest::addColumn<float>(name: "yA");
115 QTest::addColumn<float>(name: "zA");
116
117 QTest::addColumn<float>(name: "xR");
118 QTest::addColumn<float>(name: "yR");
119 QTest::addColumn<float>(name: "zR");
120
121 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 0.0f
122 << 1.0f << 5.0f << 8.0f
123 << -1.0f << -5.0f << -8.0f;
124
125 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << -4.0f
126 << 5.0f << -8.0f << 4.0f
127 << -10.0f << 16.0f << -8.0f;
128 }
129
130 void checkSelfSubstraction()
131 {
132 QFETCH(float, xO);
133 QFETCH(float, yO);
134 QFETCH(float, zO);
135
136 QFETCH(float, xA);
137 QFETCH(float, yA);
138 QFETCH(float, zA);
139
140 QFETCH(float, xR);
141 QFETCH(float, yR);
142 QFETCH(float, zR);
143
144 // GIVEN
145 QVector3D vo(xO, yO, zO);
146
147 // WHEN
148 vo -= QVector3D(xA, yA, zA);
149
150 // THEN
151 QCOMPARE(vo.x(), xR);
152 QCOMPARE(vo.y(), yR);
153 QCOMPARE(vo.z(), zR);
154 }
155
156 void checkSelfMultiplication_data()
157 {
158 QTest::addColumn<float>(name: "xO");
159 QTest::addColumn<float>(name: "yO");
160 QTest::addColumn<float>(name: "zO");
161
162 QTest::addColumn<float>(name: "xA");
163 QTest::addColumn<float>(name: "yA");
164 QTest::addColumn<float>(name: "zA");
165
166 QTest::addColumn<float>(name: "xR");
167 QTest::addColumn<float>(name: "yR");
168 QTest::addColumn<float>(name: "zR");
169
170 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 2.0f
171 << 1.0f << 5.0f << 8.0f
172 << 0.0f << 0.0f << 16.0f;
173
174 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << 4.0f
175 << 5.0f << -8.0f << 4.0f
176 << -25.0f << -64.0f << 16.0f;
177 }
178
179 void checkSelfMultiplication()
180 {
181 QFETCH(float, xO);
182 QFETCH(float, yO);
183 QFETCH(float, zO);
184
185 QFETCH(float, xA);
186 QFETCH(float, yA);
187 QFETCH(float, zA);
188
189 QFETCH(float, xR);
190 QFETCH(float, yR);
191 QFETCH(float, zR);
192
193 // GIVEN
194 QVector3D vo(xO, yO, zO);
195
196 // WHEN
197 vo *= QVector3D(xA, yA, zA);
198
199 // THEN
200 QCOMPARE(vo.x(), xR);
201 QCOMPARE(vo.y(), yR);
202 QCOMPARE(vo.z(), zR);
203 }
204
205 void checkSelfDivision_data()
206 {
207 QTest::addColumn<float>(name: "xO");
208 QTest::addColumn<float>(name: "yO");
209 QTest::addColumn<float>(name: "zO");
210
211 QTest::addColumn<float>(name: "xA");
212 QTest::addColumn<float>(name: "yA");
213 QTest::addColumn<float>(name: "zA");
214
215 QTest::addColumn<float>(name: "xR");
216 QTest::addColumn<float>(name: "yR");
217 QTest::addColumn<float>(name: "zR");
218
219 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 2.0f
220 << 1.0f << 5.0f << 8.0f
221 << 0.0f << 0.0f << 0.25f;
222
223 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << 4.0f
224 << 5.0f << -8.0f << 4.0f
225 << -1.0f << -1.0f << 1.0f;
226 }
227
228 void checkSelfDivision()
229 {
230 QFETCH(float, xO);
231 QFETCH(float, yO);
232 QFETCH(float, zO);
233
234 QFETCH(float, xA);
235 QFETCH(float, yA);
236 QFETCH(float, zA);
237
238 QFETCH(float, xR);
239 QFETCH(float, yR);
240 QFETCH(float, zR);
241
242 // GIVEN
243 QVector3D vo(xO, yO, zO);
244
245 // WHEN
246 vo /= QVector3D(xA, yA, zA);
247
248 // THEN
249 QCOMPARE(vo.x(), xR);
250 QCOMPARE(vo.y(), yR);
251 QCOMPARE(vo.z(), zR);
252 }
253
254 void checkSelfDivisionFactor_data()
255 {
256 QTest::addColumn<float>(name: "xO");
257 QTest::addColumn<float>(name: "yO");
258 QTest::addColumn<float>(name: "zO");
259
260 QTest::addColumn<float>(name: "factor");
261
262 QTest::addColumn<float>(name: "xR");
263 QTest::addColumn<float>(name: "yR");
264 QTest::addColumn<float>(name: "zR");
265
266 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 2.0f
267 << 1.0f
268 << 0.0f << 0.0f << 2.0f;
269
270 QTest::newRow(dataTag: "sample_2") << -5.0f << 20.0f << -25.0f
271 << 5.0f
272 << -1.0f << 4.0f << -5.0f;
273 }
274
275 void checkSelfDivisionFactor()
276 {
277 QFETCH(float, xO);
278 QFETCH(float, yO);
279 QFETCH(float, zO);
280
281 QFETCH(float, factor);
282
283 QFETCH(float, xR);
284 QFETCH(float, yR);
285 QFETCH(float, zR);
286
287 // GIVEN
288 QVector3D vo(xO, yO, zO);
289
290 // WHEN
291 vo /= factor;
292
293 // THEN
294 QCOMPARE(vo.x(), xR);
295 QCOMPARE(vo.y(), yR);
296 QCOMPARE(vo.z(), zR);
297 }
298
299 void checkSelfMultiplicationFactor_data()
300 {
301 QTest::addColumn<float>(name: "xO");
302 QTest::addColumn<float>(name: "yO");
303 QTest::addColumn<float>(name: "zO");
304
305 QTest::addColumn<float>(name: "factor");
306
307 QTest::addColumn<float>(name: "xR");
308 QTest::addColumn<float>(name: "yR");
309 QTest::addColumn<float>(name: "zR");
310
311 QTest::newRow(dataTag: "sample_1") << 0.0f << -3.0f << 2.0f
312 << 1.0f
313 << 0.0f << -3.0f << 2.0f;
314
315 QTest::newRow(dataTag: "sample_2") << -5.0f << 20.0f << -25.0f
316 << 5.0f
317 << -25.0f << 100.0f << -125.0f;
318 }
319
320 void checkSelfMultiplicationFactor()
321 {
322 QFETCH(float, xO);
323 QFETCH(float, yO);
324 QFETCH(float, zO);
325
326 QFETCH(float, factor);
327
328 QFETCH(float, xR);
329 QFETCH(float, yR);
330 QFETCH(float, zR);
331
332 // GIVEN
333 QVector3D vo(xO, yO, zO);
334
335 // WHEN
336 vo *= factor;
337
338 // THEN
339 QCOMPARE(vo.x(), xR);
340 QCOMPARE(vo.y(), yR);
341 QCOMPARE(vo.z(), zR);
342 }
343
344 void checkAddition_data()
345 {
346 QTest::addColumn<float>(name: "xO");
347 QTest::addColumn<float>(name: "yO");
348 QTest::addColumn<float>(name: "zO");
349
350 QTest::addColumn<float>(name: "xA");
351 QTest::addColumn<float>(name: "yA");
352 QTest::addColumn<float>(name: "zA");
353
354 QTest::addColumn<float>(name: "xR");
355 QTest::addColumn<float>(name: "yR");
356 QTest::addColumn<float>(name: "zR");
357
358 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 0.0f
359 << 1.0f << 5.0f << 8.0f
360 << 1.0f << 5.0f << 8.0f;
361
362 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << -4.0f
363 << 5.0f << -8.0f << 4.0f
364 << 0.0f << 0.0f << 0.0f;
365 }
366
367 void checkAddition()
368 {
369 QFETCH(float, xO);
370 QFETCH(float, yO);
371 QFETCH(float, zO);
372
373 QFETCH(float, xA);
374 QFETCH(float, yA);
375 QFETCH(float, zA);
376
377 QFETCH(float, xR);
378 QFETCH(float, yR);
379 QFETCH(float, zR);
380
381 // GIVEN
382 QVector3D v0(xO, yO, zO);
383 QVector3D v1(xA, yA, zA);
384
385 // WHEN
386 QVector3D v2 = v0 + v1;
387
388 // THEN
389 QCOMPARE(v2.x(), xR);
390 QCOMPARE(v2.y(), yR);
391 QCOMPARE(v2.z(), zR);
392 }
393
394 void checkSubstraction_data()
395 {
396 QTest::addColumn<float>(name: "xO");
397 QTest::addColumn<float>(name: "yO");
398 QTest::addColumn<float>(name: "zO");
399
400 QTest::addColumn<float>(name: "xA");
401 QTest::addColumn<float>(name: "yA");
402 QTest::addColumn<float>(name: "zA");
403
404 QTest::addColumn<float>(name: "xR");
405 QTest::addColumn<float>(name: "yR");
406 QTest::addColumn<float>(name: "zR");
407
408 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 0.0f
409 << 1.0f << 5.0f << 8.0f
410 << -1.0f << -5.0f << -8.0f;
411
412 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << -4.0f
413 << 5.0f << -8.0f << 4.0f
414 << -10.0f << 16.0f << -8.0f;
415 }
416
417 void checkSubstraction()
418 {
419 QFETCH(float, xO);
420 QFETCH(float, yO);
421 QFETCH(float, zO);
422
423 QFETCH(float, xA);
424 QFETCH(float, yA);
425 QFETCH(float, zA);
426
427 QFETCH(float, xR);
428 QFETCH(float, yR);
429 QFETCH(float, zR);
430
431 // GIVEN
432 QVector3D v0(xO, yO, zO);
433 QVector3D v1(xA, yA, zA);
434
435 // WHEN
436 QVector3D v2 = v0 - v1;
437
438 // THEN
439 QCOMPARE(v2.x(), xR);
440 QCOMPARE(v2.y(), yR);
441 QCOMPARE(v2.z(), zR);
442 }
443
444 void checkMultiplication_data()
445 {
446 QTest::addColumn<float>(name: "xO");
447 QTest::addColumn<float>(name: "yO");
448 QTest::addColumn<float>(name: "zO");
449
450 QTest::addColumn<float>(name: "xA");
451 QTest::addColumn<float>(name: "yA");
452 QTest::addColumn<float>(name: "zA");
453
454 QTest::addColumn<float>(name: "xR");
455 QTest::addColumn<float>(name: "yR");
456 QTest::addColumn<float>(name: "zR");
457
458 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 2.0f
459 << 1.0f << 5.0f << 8.0f
460 << 0.0f << 0.0f << 16.0f;
461
462 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << 4.0f
463 << 5.0f << -8.0f << 4.0f
464 << -25.0f << -64.0f << 16.0f;
465 }
466
467 void checkMultiplication()
468 {
469 QFETCH(float, xO);
470 QFETCH(float, yO);
471 QFETCH(float, zO);
472
473 QFETCH(float, xA);
474 QFETCH(float, yA);
475 QFETCH(float, zA);
476
477 QFETCH(float, xR);
478 QFETCH(float, yR);
479 QFETCH(float, zR);
480
481 // GIVEN
482 QVector3D v0(xO, yO, zO);
483 QVector3D v1(xA, yA, zA);
484
485 // WHEN
486 QVector3D v2 = v0 * v1;
487
488 // THEN
489 QCOMPARE(v2.x(), xR);
490 QCOMPARE(v2.y(), yR);
491 QCOMPARE(v2.z(), zR);
492 }
493
494 void checkDivision_data()
495 {
496 QTest::addColumn<float>(name: "xO");
497 QTest::addColumn<float>(name: "yO");
498 QTest::addColumn<float>(name: "zO");
499
500 QTest::addColumn<float>(name: "xA");
501 QTest::addColumn<float>(name: "yA");
502 QTest::addColumn<float>(name: "zA");
503
504 QTest::addColumn<float>(name: "xR");
505 QTest::addColumn<float>(name: "yR");
506 QTest::addColumn<float>(name: "zR");
507
508 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 2.0f
509 << 1.0f << 5.0f << 8.0f
510 << 0.0f << 0.0f << 0.25f;
511
512 QTest::newRow(dataTag: "sample_2") << -5.0f << 8.0f << 4.0f
513 << 5.0f << -8.0f << 4.0f
514 << -1.0f << -1.0f << 1.0f;
515 }
516
517 void checkDivision()
518 {
519 QFETCH(float, xO);
520 QFETCH(float, yO);
521 QFETCH(float, zO);
522
523 QFETCH(float, xA);
524 QFETCH(float, yA);
525 QFETCH(float, zA);
526
527 QFETCH(float, xR);
528 QFETCH(float, yR);
529 QFETCH(float, zR);
530
531 // GIVEN
532 QVector3D v0(xO, yO, zO);
533 QVector3D v1(xA, yA, zA);
534
535 // WHEN
536 QVector3D v2 = v0 / v1;
537
538 // THEN
539 QCOMPARE(v2.x(), xR);
540 QCOMPARE(v2.y(), yR);
541 QCOMPARE(v2.z(), zR);
542 }
543
544 void checkDivisionFactor_data()
545 {
546 QTest::addColumn<float>(name: "xO");
547 QTest::addColumn<float>(name: "yO");
548 QTest::addColumn<float>(name: "zO");
549
550 QTest::addColumn<float>(name: "factor");
551
552 QTest::addColumn<float>(name: "xR");
553 QTest::addColumn<float>(name: "yR");
554 QTest::addColumn<float>(name: "zR");
555
556 QTest::newRow(dataTag: "sample_1") << 0.0f << 0.0f << 2.0f
557 << 1.0f
558 << 0.0f << 0.0f << 2.0f;
559
560 QTest::newRow(dataTag: "sample_2") << -5.0f << 20.0f << -25.0f
561 << 5.0f
562 << -1.0f << 4.0f << -5.0f;
563 }
564
565 void checkDivisionFactor()
566 {
567 QFETCH(float, xO);
568 QFETCH(float, yO);
569 QFETCH(float, zO);
570
571 QFETCH(float, factor);
572
573 QFETCH(float, xR);
574 QFETCH(float, yR);
575 QFETCH(float, zR);
576
577 // GIVEN
578 QVector3D v0(xO, yO, zO);
579
580 // WHEN
581 QVector3D v2 = v0 / factor;
582
583 // THEN
584 QCOMPARE(v2.x(), xR);
585 QCOMPARE(v2.y(), yR);
586 QCOMPARE(v2.z(), zR);
587 }
588
589 void checkMultiplicationFactor_data()
590 {
591 QTest::addColumn<float>(name: "xO");
592 QTest::addColumn<float>(name: "yO");
593 QTest::addColumn<float>(name: "zO");
594
595 QTest::addColumn<float>(name: "factor");
596
597 QTest::addColumn<float>(name: "xR");
598 QTest::addColumn<float>(name: "yR");
599 QTest::addColumn<float>(name: "zR");
600
601 QTest::newRow(dataTag: "sample_1") << 0.0f << -3.0f << 2.0f
602 << 1.0f
603 << 0.0f << -3.0f << 2.0f;
604
605 QTest::newRow(dataTag: "sample_2") << -5.0f << 20.0f << -25.0f
606 << 5.0f
607 << -25.0f << 100.0f << -125.0f;
608 }
609
610 void checkMultiplicationFactor()
611 {
612 QFETCH(float, xO);
613 QFETCH(float, yO);
614 QFETCH(float, zO);
615
616 QFETCH(float, factor);
617
618 QFETCH(float, xR);
619 QFETCH(float, yR);
620 QFETCH(float, zR);
621
622 // GIVEN
623 QVector3D v0(xO, yO, zO);
624
625 // WHEN
626 QVector3D v2 = v0 * factor;
627
628 // THEN
629 QCOMPARE(v2.x(), xR);
630 QCOMPARE(v2.y(), yR);
631 QCOMPARE(v2.z(), zR);
632 }
633
634 void checkEquality()
635 {
636 {
637 // GIVEN
638 QVector3D v0;
639 QVector3D v1;
640
641 // THEN
642 QVERIFY(v0 == v1);
643 }
644 {
645 // GIVEN
646 QVector3D v0(1.0f, 2.0f, -5.0f);
647 QVector3D v1(1.0f, 2.0f, -5.0f);
648
649 // THEN
650 QVERIFY(v0 == v1);
651 }
652 }
653
654 void checkInequality()
655 {
656 {
657 // GIVEN
658 QVector3D v0;
659 QVector3D v1;
660
661 // THEN
662 QVERIFY(!(v0 != v1));
663 }
664 {
665 // GIVEN
666 QVector3D v0(1.0f, 2.0f, -5.0f);
667 QVector3D v1(1.0f, 5.0f, -5.0f);
668
669 // THEN
670 QVERIFY(v0 != v1);
671 }
672 }
673
674 void checkToQQVector3D()
675 {
676 {
677 // GIVEN
678 QVector3D v0;
679
680 // WHEN
681 QVector3D v1 = v0;
682
683 // THEN
684 QCOMPARE(v0.x(), v1.x());
685 QCOMPARE(v0.y(), v1.y());
686 QCOMPARE(v0.z(), v1.z());
687 }
688 {
689 // GIVEN
690 QVector3D v0(1.0f, 2.0f, -5.0f);
691
692 // WHEN
693 QVector3D v1 = v0;
694
695 // THEN
696 QCOMPARE(v0.x(), v1.x());
697 QCOMPARE(v0.y(), v1.y());
698 QCOMPARE(v0.z(), v1.z());
699 }
700 }
701};
702
703QTEST_MAIN(tst_Vector3D_Base)
704
705#include "tst_vector3d_base.moc"
706

source code of qt3d/tests/auto/core/vector3d_base/tst_vector3d_base.cpp