Line data Source code
1 : /**
2 : * @file test_BoundingBox.cpp
3 : *
4 : * @brief Test for BoundingBox struct
5 : *
6 : * @author David Frank - initial code
7 : */
8 :
9 : #include "doctest/doctest.h"
10 : #include "BoundingBox.h"
11 : #include "testHelpers.h"
12 :
13 : using namespace elsa;
14 : using namespace doctest;
15 :
16 2 : TEST_CASE("BoundingBox: Testing 2D AABB")
17 : {
18 4 : GIVEN("An aabb of size 10x15")
19 : {
20 : // setup
21 2 : std::size_t dim = 2;
22 2 : index_t x = 10;
23 2 : index_t y = 15;
24 4 : IndexVector_t volumeDims(dim);
25 2 : volumeDims << x, y;
26 :
27 3 : WHEN("instantiating the AABB")
28 : {
29 2 : BoundingBox aabb(volumeDims);
30 :
31 2 : THEN("The min is set to the origin (0, 0) and the max is (10, 15)")
32 : {
33 1 : REQUIRE_EQ(aabb._dim, dim);
34 :
35 1 : REQUIRE_UNARY(checkApproxEq(aabb._min(0), 0));
36 1 : REQUIRE_UNARY(checkApproxEq(aabb._min(1), 0));
37 :
38 1 : REQUIRE_UNARY(checkApproxEq(aabb._max(0), (real_t) x));
39 1 : REQUIRE_UNARY(checkApproxEq(aabb._max(1), (real_t) y));
40 :
41 1 : REQUIRE_UNARY(checkApproxEq(aabb._voxelCoordToIndexVector(0), 1));
42 1 : REQUIRE_UNARY(checkApproxEq(aabb._voxelCoordToIndexVector(1), y));
43 : }
44 : }
45 :
46 3 : WHEN("copying the AABB")
47 : {
48 2 : BoundingBox aabb(volumeDims);
49 2 : auto aabbcopy = aabb;
50 :
51 2 : THEN("A copy is created succesfully")
52 : {
53 1 : REQUIRE_EQ(aabbcopy._dim, dim);
54 :
55 1 : REQUIRE_UNARY(checkApproxEq(aabbcopy._min(0), 0));
56 1 : REQUIRE_UNARY(checkApproxEq(aabbcopy._min(1), 0));
57 :
58 1 : REQUIRE_UNARY(checkApproxEq(aabbcopy._max(0), (real_t) x));
59 1 : REQUIRE_UNARY(checkApproxEq(aabbcopy._max(1), (real_t) y));
60 :
61 1 : REQUIRE_EQ(aabbcopy._voxelCoordToIndexVector(0), 1);
62 1 : REQUIRE_EQ(aabbcopy._voxelCoordToIndexVector(1), y);
63 : }
64 : }
65 : }
66 2 : }
67 :
68 1 : TEST_CASE("BoundingBox: Testing 3D aabb")
69 : {
70 2 : GIVEN("An aabb of size 10x15x20 with uniform")
71 : {
72 : // setup
73 1 : size_t dim = 3;
74 1 : index_t x = 10;
75 1 : index_t y = 15;
76 1 : index_t z = 20;
77 2 : IndexVector_t volumeDims(dim);
78 1 : volumeDims << x, y, z;
79 :
80 2 : WHEN("instantiating the AABB")
81 : {
82 2 : BoundingBox aabb(volumeDims);
83 :
84 2 : THEN("The min is set to the origin (0, 0, 0) and the max is (10, 15, 20)")
85 : {
86 1 : REQUIRE_EQ(aabb._dim, dim);
87 :
88 1 : REQUIRE_UNARY(checkApproxEq(aabb._min(0), 0));
89 1 : REQUIRE_UNARY(checkApproxEq(aabb._min(1), 0));
90 1 : REQUIRE_UNARY(checkApproxEq(aabb._min(2), 0));
91 :
92 1 : REQUIRE_UNARY(checkApproxEq(aabb._max(0), (real_t) x));
93 1 : REQUIRE_UNARY(checkApproxEq(aabb._max(1), (real_t) y));
94 1 : REQUIRE_UNARY(checkApproxEq(aabb._max(2), (real_t) z));
95 :
96 1 : REQUIRE_EQ(aabb._voxelCoordToIndexVector(0), 1);
97 1 : REQUIRE_EQ(aabb._voxelCoordToIndexVector(1), y);
98 1 : REQUIRE_EQ(aabb._voxelCoordToIndexVector(2), (z * z));
99 : }
100 : }
101 : }
102 1 : }
|