Skip to content

Commit d13ae10

Browse files
committed
Added inactive leaf and tile tests to minmax unit tests
Signed-off-by: Nick Avramoussis <[email protected]>
1 parent 7052cde commit d13ae10

File tree

1 file changed

+40
-20
lines changed

1 file changed

+40
-20
lines changed

openvdb/openvdb/unittest/TestCount.cc

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -241,44 +241,64 @@ minMaxTest()
241241
{
242242
using ValueT = typename TreeT::ValueType;
243243

244-
struct Local {
245-
static bool isEqual(const ValueT& a, const ValueT& b) {
246-
using namespace openvdb; // for operator>()
247-
return !(math::Abs(a - b) > zeroVal<ValueT>());
248-
}
249-
};
250-
251244
const ValueT
252245
zero = openvdb::zeroVal<ValueT>(),
253246
minusTwo = zero + (-2),
254247
plusTwo = zero + 2,
255-
five = zero + 5;
248+
five = zero + 5,
249+
ten = zero + 10,
250+
twenty = zero + 20;
251+
252+
static constexpr int64_t DIM = TreeT::LeafNodeType::DIM;
256253

257254
TreeT tree(/*background=*/five);
258255

259256
// No set voxels (defaults to min = max = zero)
260257
openvdb::math::MinMax<ValueT> extrema = openvdb::tools::minMax(tree);
261-
EXPECT_TRUE(Local::isEqual(extrema.min(), zero));
262-
EXPECT_TRUE(Local::isEqual(extrema.max(), zero));
258+
EXPECT_EQ(zero, extrema.min());
259+
EXPECT_EQ(zero, extrema.max());
263260

264261
// Only one set voxel
265-
tree.setValue(openvdb::Coord(0, 0, 0), minusTwo);
262+
tree.setValue(openvdb::Coord(0), minusTwo);
266263
extrema = openvdb::tools::minMax(tree);
267-
EXPECT_TRUE(Local::isEqual(extrema.min(), minusTwo));
268-
EXPECT_TRUE(Local::isEqual(extrema.max(), minusTwo));
264+
EXPECT_EQ(minusTwo, extrema.min());
265+
EXPECT_EQ(minusTwo, extrema.max());
269266

270267
// Multiple set voxels, single value
271-
tree.setValue(openvdb::Coord(10, 10, 10), minusTwo);
268+
tree.setValue(openvdb::Coord(DIM), minusTwo);
272269
extrema = openvdb::tools::minMax(tree);
273-
EXPECT_TRUE(Local::isEqual(extrema.min(), minusTwo));
274-
EXPECT_TRUE(Local::isEqual(extrema.max(), minusTwo));
270+
EXPECT_EQ(minusTwo, extrema.min());
271+
EXPECT_EQ(minusTwo, extrema.max());
275272

276273
// Multiple set voxels, multiple values
277-
tree.setValue(openvdb::Coord(10, 10, 10), plusTwo);
278-
tree.setValue(openvdb::Coord(-10, -10, -10), zero);
274+
tree.setValue(openvdb::Coord(DIM), plusTwo);
275+
tree.setValue(openvdb::Coord(DIM*2), zero);
276+
extrema = openvdb::tools::minMax(tree);
277+
EXPECT_EQ(minusTwo, extrema.min());
278+
EXPECT_EQ(plusTwo, extrema.max());
279+
280+
// add some empty leaf nodes to test the join op
281+
tree.setValueOnly(openvdb::Coord(DIM*3), ten);
282+
tree.setValueOnly(openvdb::Coord(DIM*4),-ten);
283+
extrema = openvdb::tools::minMax(tree);
284+
EXPECT_EQ(minusTwo, extrema.min());
285+
EXPECT_EQ(plusTwo, extrema.max());
286+
287+
tree.clear();
288+
289+
// test tiles
290+
using NodeChainT = typename TreeT::RootNodeType::NodeChainType;
291+
using ChildT1 = typename NodeChainT::template Get<1>; // Leaf parent
292+
using ChildT2 = typename NodeChainT::template Get<2>; // ChildT1 parent
293+
tree.addTile(ChildT2::LEVEL, openvdb::Coord(0), -ten, true);
294+
tree.addTile(ChildT2::LEVEL, openvdb::Coord(ChildT2::DIM), ten, true);
295+
tree.addTile(ChildT1::LEVEL, openvdb::Coord(ChildT2::DIM + ChildT2::DIM), -twenty, false);
296+
tree.setValueOnly(openvdb::Coord(-1), twenty);
297+
tree.setValue(openvdb::Coord(-2), five);
298+
279299
extrema = openvdb::tools::minMax(tree);
280-
EXPECT_TRUE(Local::isEqual(extrema.min(), minusTwo));
281-
EXPECT_TRUE(Local::isEqual(extrema.max(), plusTwo));
300+
EXPECT_EQ(-ten, extrema.min());
301+
EXPECT_EQ( ten, extrema.max());
282302
}
283303

284304
/// Specialization for boolean trees

0 commit comments

Comments
 (0)