GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: test/simple.cpp Lines: 203 203 100.0 %
Date: 2024-02-09 12:57:42 Branches: 980 1960 50.0 %

Line Branch Exec Source
1
#define BOOST_TEST_MODULE FCL_SIMPLE
2
#include <boost/test/included/unit_test.hpp>
3
4
#include <hpp/fcl/internal/intersect.h>
5
#include <hpp/fcl/collision.h>
6
#include <hpp/fcl/BVH/BVH_model.h>
7
#include "fcl_resources/config.h"
8
#include <sstream>
9
10
using namespace hpp::fcl;
11
12
static FCL_REAL epsilon = 1e-6;
13
14
112
static bool approx(FCL_REAL x, FCL_REAL y) { return std::abs(x - y) < epsilon; }
15
16
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗
4
BOOST_AUTO_TEST_CASE(projection_test_line) {
17
✓✗
2
  Vec3f v1(0, 0, 0);
18
✓✗
2
  Vec3f v2(2, 0, 0);
19
20
✓✗
2
  Vec3f p(1, 0, 0);
21
✓✗
2
  Project::ProjectResult res = Project::projectLine(v1, v2, p);
22
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 3);
23
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0));
24
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.5));
25
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.5));
26
27
✓✗
2
  p = Vec3f(-1, 0, 0);
28
✓✗
2
  res = Project::projectLine(v1, v2, p);
29
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 1);
30
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 1));
31
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1));
32
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
33
34
✓✗
2
  p = Vec3f(3, 0, 0);
35
✓✗
2
  res = Project::projectLine(v1, v2, p);
36
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 2);
37
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 1));
38
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
39
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1));
40
2
}
41
42
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗
4
BOOST_AUTO_TEST_CASE(projection_test_triangle) {
43
✓✗
2
  Vec3f v1(0, 0, 1);
44
✓✗
2
  Vec3f v2(0, 1, 0);
45
✓✗
2
  Vec3f v3(1, 0, 0);
46
47
✓✗
2
  Vec3f p(1, 1, 1);
48
✓✗
2
  Project::ProjectResult res = Project::projectTriangle(v1, v2, v3, p);
49
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 7);
50
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 4 / 3.0));
51
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1 / 3.0));
52
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1 / 3.0));
53
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 1 / 3.0));
54
55
✓✗
2
  p = Vec3f(0, 0, 1.5);
56
✓✗
2
  res = Project::projectTriangle(v1, v2, v3, p);
57
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 1);
58
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
59
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1));
60
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
61
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
62
63
✓✗
2
  p = Vec3f(1.5, 0, 0);
64
✓✗
2
  res = Project::projectTriangle(v1, v2, v3, p);
65
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 4);
66
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
67
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
68
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
69
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 1));
70
71
✓✗
2
  p = Vec3f(0, 1.5, 0);
72
✓✗
2
  res = Project::projectTriangle(v1, v2, v3, p);
73
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 2);
74
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
75
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
76
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1));
77
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
78
79
✓✗
2
  p = Vec3f(1, 1, 0);
80
✓✗
2
  res = Project::projectTriangle(v1, v2, v3, p);
81
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 6);
82
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.5));
83
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
84
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.5));
85
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0.5));
86
87
✓✗
2
  p = Vec3f(1, 0, 1);
88
✓✗
2
  res = Project::projectTriangle(v1, v2, v3, p);
89
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 5);
90
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.5));
91
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.5));
92
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
93
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0.5));
94
95
✓✗
2
  p = Vec3f(0, 1, 1);
96
✓✗
2
  res = Project::projectTriangle(v1, v2, v3, p);
97
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 3);
98
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.5));
99
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.5));
100
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.5));
101
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
102
2
}
103
104
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗✓✗
✓✗
4
BOOST_AUTO_TEST_CASE(projection_test_tetrahedron) {
105
✓✗
2
  Vec3f v1(0, 0, 1);
106
✓✗
2
  Vec3f v2(0, 1, 0);
107
✓✗
2
  Vec3f v3(1, 0, 0);
108
✓✗
2
  Vec3f v4(1, 1, 1);
109
110
✓✗
2
  Vec3f p(0.5, 0.5, 0.5);
111
✓✗
2
  Project::ProjectResult res = Project::projectTetrahedra(v1, v2, v3, v4, p);
112
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 15);
113
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0));
114
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.25));
115
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.25));
116
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0.25));
117
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0.25));
118
119
✓✗
2
  p = Vec3f(0, 0, 0);
120
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
121
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 7);
122
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 1 / 3.0));
123
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1 / 3.0));
124
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1 / 3.0));
125
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 1 / 3.0));
126
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
127
128
✓✗
2
  p = Vec3f(0, 1, 1);
129
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
130
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 11);
131
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 1 / 3.0));
132
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1 / 3.0));
133
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1 / 3.0));
134
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
135
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 1 / 3.0));
136
137
✓✗
2
  p = Vec3f(1, 1, 0);
138
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
139
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 14);
140
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 1 / 3.0));
141
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
142
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1 / 3.0));
143
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 1 / 3.0));
144
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 1 / 3.0));
145
146
✓✗
2
  p = Vec3f(1, 0, 1);
147
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
148
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 13);
149
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 1 / 3.0));
150
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1 / 3.0));
151
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
152
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 1 / 3.0));
153
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 1 / 3.0));
154
155
✓✗
2
  p = Vec3f(1.5, 1.5, 1.5);
156
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
157
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 8);
158
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.75));
159
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
160
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
161
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
162
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 1));
163
164
✓✗
2
  p = Vec3f(1.5, -0.5, -0.5);
165
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
166
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 4);
167
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.75));
168
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
169
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
170
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 1));
171
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
172
173
✓✗
2
  p = Vec3f(-0.5, -0.5, 1.5);
174
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
175
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 1);
176
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.75));
177
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 1));
178
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
179
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
180
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
181
182
✓✗
2
  p = Vec3f(-0.5, 1.5, -0.5);
183
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
184
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 2);
185
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.75));
186
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
187
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 1));
188
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
189
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
190
191
✓✗
2
  p = Vec3f(0.5, -0.5, 0.5);
192
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
193
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 5);
194
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
195
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.5));
196
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
197
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0.5));
198
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
199
200
✓✗
2
  p = Vec3f(0.5, 1.5, 0.5);
201
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
202
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 10);
203
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
204
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
205
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.5));
206
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
207
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0.5));
208
209
✓✗
2
  p = Vec3f(1.5, 0.5, 0.5);
210
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
211
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 12);
212
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
213
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
214
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
215
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0.5));
216
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0.5));
217
218
✓✗
2
  p = Vec3f(-0.5, 0.5, 0.5);
219
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
220
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 3);
221
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
222
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.5));
223
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.5));
224
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
225
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
226
227
✓✗
2
  p = Vec3f(0.5, 0.5, 1.5);
228
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
229
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 9);
230
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
231
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0.5));
232
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0));
233
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0));
234
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0.5));
235
236
✓✗
2
  p = Vec3f(0.5, 0.5, -0.5);
237
✓✗
2
  res = Project::projectTetrahedra(v1, v2, v3, v4, p);
238
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(res.encode == 6);
239
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.sqr_distance, 0.25));
240
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[0], 0));
241
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[1], 0.5));
242
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[2], 0.5));
243
✓✗✓✗
✓✗✓✗
✓✗✗✓
2
  BOOST_CHECK(approx(res.parameterization[3], 0));
244
2
}