GCC Code Coverage Report


Directory: ./
File: openvdb/openvdb/unittest/TestQuadraticInterp.cc
Date: 2022-07-25 17:40:05
Exec Total Coverage
Lines: 146 153 95.4%
Functions: 27 27 100.0%
Branches: 103 230 44.8%

Line Branch Exec Source
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 //
4 /// @file TestQuadraticInterp.cc
5
6 #include <openvdb/openvdb.h>
7 #include <openvdb/tools/Interpolation.h>
8
9 #include <gtest/gtest.h>
10
11 #include <sstream>
12
13
14 namespace {
15 // Absolute tolerance for floating-point equality comparisons
16 const double TOLERANCE = 1.0e-5;
17 }
18
19
20 ////////////////////////////////////////
21
22
23 template<typename GridType>
24 class TestQuadraticInterp
25 {
26 public:
27 typedef typename GridType::ValueType ValueT;
28 typedef typename GridType::Ptr GridPtr;
29 struct TestVal { float x, y, z; ValueT expected; };
30
31 static void test();
32 static void testConstantValues();
33 static void testFillValues();
34 static void testNegativeIndices();
35
36 protected:
37 static void executeTest(const GridPtr&, const TestVal*, size_t numVals);
38
39 /// Initialize an arbitrary ValueType from a scalar.
40 static inline ValueT constValue(double d) { return ValueT(d); }
41
42 /// Compare two numeric values for equality within an absolute tolerance.
43 static inline bool relEq(const ValueT& v1, const ValueT& v2)
44 84 { return fabs(v1 - v2) <= TOLERANCE; }
45 };
46
47
48 12 class TestQuadraticInterpTest: public ::testing::Test
49 {
50 };
51
52
53 ////////////////////////////////////////
54
55
56 /// Specialization for Vec3s grids
57 template<>
58 inline openvdb::Vec3s
59 TestQuadraticInterp<openvdb::Vec3SGrid>::constValue(double d)
60 {
61 6 return openvdb::Vec3s(float(d), float(d), float(d));
62 }
63
64 /// Specialization for Vec3s grids
65 template<>
66 inline bool
67 TestQuadraticInterp<openvdb::Vec3SGrid>::relEq(
68 const openvdb::Vec3s& v1, const openvdb::Vec3s& v2)
69 {
70 42 return v1.eq(v2, float(TOLERANCE));
71 }
72
73
74 /// Sample the given tree at various locations and assert if
75 /// any of the sampled values don't match the expected values.
76 template<typename GridType>
77 void
78 24 TestQuadraticInterp<GridType>::executeTest(const GridPtr& grid,
79 const TestVal* testVals, size_t numVals)
80 {
81 openvdb::tools::GridSampler<GridType, openvdb::tools::QuadraticSampler> interpolator(*grid);
82 //openvdb::tools::QuadraticInterp<GridType> interpolator(*tree);
83
84
2/2
✓ Branch 0 taken 126 times.
✓ Branch 1 taken 12 times.
276 for (size_t i = 0; i < numVals; ++i) {
85 252 const TestVal& val = testVals[i];
86 84 const ValueT actual = interpolator.sampleVoxel(val.x, val.y, val.z);
87
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 126 times.
252 if (!relEq(val.expected, actual)) {
88 std::ostringstream ostr;
89 ostr << std::setprecision(10)
90 << "sampleVoxel(" << val.x << ", " << val.y << ", " << val.z
91 << "): expected " << val.expected << ", got " << actual;
92 FAIL() << ostr.str();
93 }
94 }
95 }
96
97
98 template<typename GridType>
99 void
100 6 TestQuadraticInterp<GridType>::test()
101 {
102 const ValueT
103 6 one = constValue(1),
104 6 two = constValue(2),
105 6 three = constValue(3),
106 6 four = constValue(4),
107 6 fillValue = constValue(256);
108
109
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
6 GridPtr grid(new GridType(fillValue));
110 typename GridType::TreeType& tree = grid->tree();
111
112
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 10, 10), one);
113
114
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 10, 10), two);
115
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 11, 10), two);
116
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 11, 10), two);
117
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 11, 10), two);
118
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 10, 10), two);
119
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 9, 10), two);
120
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 9, 10), two);
121
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 9, 10), two);
122
123
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 10, 11), three);
124
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 10, 11), three);
125
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 11, 11), three);
126
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 11, 11), three);
127
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 11, 11), three);
128
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 10, 11), three);
129
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 9, 11), three);
130
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 9, 11), three);
131
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 9, 11), three);
132
133
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 10, 9), four);
134
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 10, 9), four);
135
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 11, 9), four);
136
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 11, 9), four);
137
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 11, 9), four);
138
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 10, 9), four);
139
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 9, 9), four);
140
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 9, 9), four);
141 tree.setValue(openvdb::Coord(11, 9, 9), four);
142
143
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
6 const TestVal testVals[] = {
144 2 { 10.5f, 10.5f, 10.5f, constValue(1.703125) },
145 { 10.0f, 10.0f, 10.0f, one },
146 { 11.0f, 10.0f, 10.0f, two },
147 { 11.0f, 11.0f, 10.0f, two },
148 { 11.0f, 11.0f, 11.0f, three },
149 { 9.0f, 11.0f, 9.0f, four },
150 { 9.0f, 10.0f, 9.0f, four },
151 2 { 10.1f, 10.0f, 10.0f, constValue(1.01) },
152 2 { 10.8f, 10.8f, 10.8f, constValue(2.513344) },
153 2 { 10.1f, 10.8f, 10.5f, constValue(1.8577) },
154 2 { 10.8f, 10.1f, 10.5f, constValue(1.8577) },
155 2 { 10.5f, 10.1f, 10.8f, constValue(2.2927) },
156 2 { 10.5f, 10.8f, 10.1f, constValue(1.6977) },
157 };
158 const size_t numVals = sizeof(testVals) / sizeof(TestVal);
159
160
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 executeTest(grid, testVals, numVals);
161 6 }
162
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testFloat) { TestQuadraticInterp<openvdb::FloatGrid>::test(); }
163
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testDouble) { TestQuadraticInterp<openvdb::DoubleGrid>::test(); }
164
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testVec3S) { TestQuadraticInterp<openvdb::Vec3SGrid>::test(); }
165
166
167 template<typename GridType>
168 void
169 6 TestQuadraticInterp<GridType>::testConstantValues()
170 {
171 const ValueT
172 6 two = constValue(2),
173 6 fillValue = constValue(256);
174
175
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
6 GridPtr grid(new GridType(fillValue));
176 typename GridType::TreeType& tree = grid->tree();
177
178
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 10, 10), two);
179
180
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 10, 10), two);
181
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 11, 10), two);
182
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 11, 10), two);
183
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 11, 10), two);
184
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 10, 10), two);
185
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 9, 10), two);
186
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 9, 10), two);
187
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 9, 10), two);
188
189
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 10, 11), two);
190
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 10, 11), two);
191
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 11, 11), two);
192
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 11, 11), two);
193
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 11, 11), two);
194
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 10, 11), two);
195
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 9, 11), two);
196
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 9, 11), two);
197
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 9, 11), two);
198
199
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 10, 9), two);
200
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 10, 9), two);
201
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(11, 11, 9), two);
202
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 11, 9), two);
203
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 11, 9), two);
204
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 10, 9), two);
205
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( 9, 9, 9), two);
206
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(10, 9, 9), two);
207 tree.setValue(openvdb::Coord(11, 9, 9), two);
208
209 6 const TestVal testVals[] = {
210 { 10.5f, 10.5f, 10.5f, two },
211 { 10.0f, 10.0f, 10.0f, two },
212 { 10.1f, 10.0f, 10.0f, two },
213 { 10.8f, 10.8f, 10.8f, two },
214 { 10.1f, 10.8f, 10.5f, two },
215 { 10.8f, 10.1f, 10.5f, two },
216 { 10.5f, 10.1f, 10.8f, two },
217 { 10.5f, 10.8f, 10.1f, two }
218 };
219 const size_t numVals = sizeof(testVals) / sizeof(TestVal);
220
221
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 executeTest(grid, testVals, numVals);
222 6 }
223
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testConstantValuesFloat) { TestQuadraticInterp<openvdb::FloatGrid>::testConstantValues(); }
224
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testConstantValuesDouble) { TestQuadraticInterp<openvdb::DoubleGrid>::testConstantValues(); }
225
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testConstantValuesVec3S) { TestQuadraticInterp<openvdb::Vec3SGrid>::testConstantValues(); }
226
227
228 template<typename GridType>
229 void
230 6 TestQuadraticInterp<GridType>::testFillValues()
231 {
232 6 const ValueT fillValue = constValue(256);
233
234
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
6 GridPtr grid(new GridType(fillValue));
235
236 6 const TestVal testVals[] = {
237 { 10.5f, 10.5f, 10.5f, fillValue },
238 { 10.0f, 10.0f, 10.0f, fillValue },
239 { 10.1f, 10.0f, 10.0f, fillValue },
240 { 10.8f, 10.8f, 10.8f, fillValue },
241 { 10.1f, 10.8f, 10.5f, fillValue },
242 { 10.8f, 10.1f, 10.5f, fillValue },
243 { 10.5f, 10.1f, 10.8f, fillValue },
244 { 10.5f, 10.8f, 10.1f, fillValue }
245 };
246 const size_t numVals = sizeof(testVals) / sizeof(TestVal);
247
248
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 executeTest(grid, testVals, numVals);
249 6 }
250
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testFillValuesFloat) { TestQuadraticInterp<openvdb::FloatGrid>::testFillValues(); }
251
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testFillValuesDouble) { TestQuadraticInterp<openvdb::DoubleGrid>::testFillValues(); }
252
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testFillValuesVec3S) { TestQuadraticInterp<openvdb::Vec3SGrid>::testFillValues(); }
253
254
255 template<typename GridType>
256 void
257 6 TestQuadraticInterp<GridType>::testNegativeIndices()
258 {
259 const ValueT
260 6 one = constValue(1),
261 6 two = constValue(2),
262 6 three = constValue(3),
263 6 four = constValue(4),
264 6 fillValue = constValue(256);
265
266
1/2
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
6 GridPtr grid(new GridType(fillValue));
267 typename GridType::TreeType& tree = grid->tree();
268
269
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -10, -10), one);
270
271
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -10, -10), two);
272
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -11, -10), two);
273
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -11, -10), two);
274
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -11, -10), two);
275
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -10, -10), two);
276
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -9, -10), two);
277
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -9, -10), two);
278
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -9, -10), two);
279
280
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -10, -11), three);
281
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -10, -11), three);
282
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -11, -11), three);
283
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -11, -11), three);
284
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -11, -11), three);
285
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -10, -11), three);
286
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -9, -11), three);
287
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -9, -11), three);
288
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -9, -11), three);
289
290
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -10, -9), four);
291
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -10, -9), four);
292
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-11, -11, -9), four);
293
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -11, -9), four);
294
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -11, -9), four);
295
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -10, -9), four);
296
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord( -9, -9, -9), four);
297
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 tree.setValue(openvdb::Coord(-10, -9, -9), four);
298 tree.setValue(openvdb::Coord(-11, -9, -9), four);
299
300
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
6 const TestVal testVals[] = {
301 2 { -10.5f, -10.5f, -10.5f, constValue(-104.75586) },
302 { -10.0f, -10.0f, -10.0f, one },
303 { -11.0f, -10.0f, -10.0f, two },
304 { -11.0f, -11.0f, -10.0f, two },
305 { -11.0f, -11.0f, -11.0f, three },
306 { -9.0f, -11.0f, -9.0f, four },
307 { -9.0f, -10.0f, -9.0f, four },
308 2 { -10.1f, -10.0f, -10.0f, constValue(-10.28504) },
309 2 { -10.8f, -10.8f, -10.8f, constValue(-62.84878) },
310 2 { -10.1f, -10.8f, -10.5f, constValue(-65.68951) },
311 2 { -10.8f, -10.1f, -10.5f, constValue(-65.68951) },
312 2 { -10.5f, -10.1f, -10.8f, constValue(-65.40736) },
313 2 { -10.5f, -10.8f, -10.1f, constValue(-66.30510) },
314 };
315 const size_t numVals = sizeof(testVals) / sizeof(TestVal);
316
317
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 executeTest(grid, testVals, numVals);
318 6 }
319
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testNegativeIndicesFloat) { TestQuadraticInterp<openvdb::FloatGrid>::testNegativeIndices(); }
320
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testNegativeIndicesDouble) { TestQuadraticInterp<openvdb::DoubleGrid>::testNegativeIndices(); }
321
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 TEST_F(TestQuadraticInterpTest, testNegativeIndicesVec3S) { TestQuadraticInterp<openvdb::Vec3SGrid>::testNegativeIndices(); }
322