Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright Contributors to the OpenVDB Project | ||
2 | // SPDX-License-Identifier: MPL-2.0 | ||
3 | |||
4 | #include <openvdb/tree/Tree.h> | ||
5 | #include <openvdb/openvdb.h> | ||
6 | #include <openvdb/Types.h> | ||
7 | #include <openvdb/tools/LevelSetSphere.h> // for tools::createLevelSetSphere() | ||
8 | |||
9 | #include <gtest/gtest.h> | ||
10 | |||
11 | |||
12 | #define ASSERT_DOUBLES_EXACTLY_EQUAL(expected, actual) \ | ||
13 | EXPECT_NEAR((expected), (actual), /*tolerance=*/0.0) | ||
14 | |||
15 | |||
16 | 8 | class TestTreeIterators: public ::testing::Test | |
17 | { | ||
18 | public: | ||
19 | 8 | void SetUp() override { openvdb::initialize(); } | |
20 | 8 | void TearDown() override { openvdb::uninitialize(); } | |
21 | }; | ||
22 | |||
23 | |||
24 | typedef openvdb::FloatTree TreeType; | ||
25 | |||
26 | |||
27 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testLeafIterator) |
28 | { | ||
29 | 1 | const float fillValue = 256.0f; | |
30 | |||
31 | 2 | TreeType tree(fillValue); | |
32 | |||
33 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(0, 0, 0), 1.0); |
34 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(1, 0, 0), 1.5); |
35 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(0, 0, 8), 2.0); |
36 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(1, 0, 8), 2.5); |
37 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tree.setValue(openvdb::Coord(0, 0, 16), 3.0); |
38 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(1, 0, 16), 3.5); |
39 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(0, 0, 24), 4.0); |
40 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tree.setValue(openvdb::Coord(1, 0, 24), 4.5); |
41 | |||
42 | float val = 1.f; | ||
43 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
5 | for (TreeType::LeafCIter iter = tree.cbeginLeaf(); iter; ++iter) { |
44 | const TreeType::LeafNodeType* leaf = iter.getLeaf(); | ||
45 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
4 | EXPECT_TRUE(leaf != NULL); |
46 |
3/18✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
4 | ASSERT_DOUBLES_EXACTLY_EQUAL(val, leaf->getValue(openvdb::Coord(0, 0, 0))); |
47 |
3/18✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
4 | ASSERT_DOUBLES_EXACTLY_EQUAL(val + 0.5, iter->getValue(openvdb::Coord(1, 0, 0))); |
48 |
3/18✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
4 | ASSERT_DOUBLES_EXACTLY_EQUAL(fillValue, iter->getValue(openvdb::Coord(1, 1, 1))); |
49 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | val = val + 1.f; |
50 | } | ||
51 | 1 | } | |
52 | |||
53 | |||
54 | // Test the leaf iterator over a tree without any leaf nodes. | ||
55 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testEmptyLeafIterator) |
56 | { | ||
57 | using namespace openvdb; | ||
58 | |||
59 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | TreeType tree(/*fillValue=*/256.0); |
60 | |||
61 | std::vector<Index> dims; | ||
62 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.getNodeLog2Dims(dims); |
63 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(4, int(dims.size())); |
64 | |||
65 | // Start with an iterator over an empty tree. | ||
66 | TreeType::LeafCIter iter = tree.cbeginLeaf(); | ||
67 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!iter); |
68 | |||
69 | // Using sparse fill, add internal nodes but no leaf nodes to the tree. | ||
70 | |||
71 | // Fill the region subsumed by a level-2 internal node (assuming a four-level tree). | ||
72 | 1 | Index log2Sum = dims[1] + dims[2] + dims[3]; | |
73 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CoordBBox bbox(Coord(0), Coord((1 << log2Sum) - 1)); |
74 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tree.fill(bbox, /*value=*/1.0); |
75 | 1 | iter = tree.cbeginLeaf(); | |
76 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!iter); |
77 | |||
78 | // Fill the region subsumed by a level-1 internal node. | ||
79 | 1 | log2Sum = dims[2] + dims[3]; | |
80 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | bbox.reset(Coord(0), Coord((1 << log2Sum) - 1)); |
81 |
2/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
2 | tree.fill(bbox, /*value=*/2.0); |
82 | 1 | iter = tree.cbeginLeaf(); | |
83 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!iter); |
84 | 1 | } | |
85 | |||
86 | |||
87 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testOnlyNegative) |
88 | { | ||
89 | using openvdb::Index64; | ||
90 | |||
91 | 1 | const float fillValue = 5.0f; | |
92 | |||
93 | 2 | TreeType tree(fillValue); | |
94 | |||
95 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(tree.empty()); |
96 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(fillValue, tree.getValue(openvdb::Coord(5, -10, 20))); |
97 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(fillValue, tree.getValue(openvdb::Coord(-500, 200, 300))); |
98 | |||
99 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-5, 10, 20), 0.1f); |
100 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord( 5, -10, 20), 0.2f); |
101 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord( 5, 10, -20), 0.3f); |
102 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-5, -10, 20), 0.4f); |
103 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-5, 10, -20), 0.5f); |
104 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord( 5, -10, -20), 0.6f); |
105 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-5, -10, -20), 0.7f); |
106 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-500, 200, -300), 4.5678f); |
107 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord( 500, -200, -300), 4.5678f); |
108 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tree.setValue(openvdb::Coord(-500, -200, 300), 4.5678f); |
109 | |||
110 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.1f, tree.getValue(openvdb::Coord(-5, 10, 20))); |
111 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.2f, tree.getValue(openvdb::Coord( 5, -10, 20))); |
112 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.3f, tree.getValue(openvdb::Coord( 5, 10, -20))); |
113 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.4f, tree.getValue(openvdb::Coord(-5, -10, 20))); |
114 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.5f, tree.getValue(openvdb::Coord(-5, 10, -20))); |
115 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.6f, tree.getValue(openvdb::Coord( 5, -10, -20))); |
116 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.7f, tree.getValue(openvdb::Coord(-5, -10, -20))); |
117 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(4.5678f, tree.getValue(openvdb::Coord(-500, 200, -300))); |
118 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(4.5678f, tree.getValue(openvdb::Coord( 500, -200, -300))); |
119 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(4.5678f, tree.getValue(openvdb::Coord(-500, -200, 300))); |
120 | |||
121 | 1 | int count = 0; | |
122 |
2/2✓ Branch 0 taken 50 times.
✓ Branch 1 taken 1 times.
|
51 | for (int i = -25; i < 25; ++i) { |
123 |
2/2✓ Branch 0 taken 2500 times.
✓ Branch 1 taken 50 times.
|
2550 | for (int j = -25; j < 25; ++j) { |
124 |
2/2✓ Branch 0 taken 125000 times.
✓ Branch 1 taken 2500 times.
|
127500 | for (int k = -25; k < 25; ++k) { |
125 |
2/2✓ Branch 0 taken 7 times.
✓ Branch 1 taken 124993 times.
|
125000 | if (tree.getValue(openvdb::Coord(i, j, k)) < 1.0f) { |
126 | //fprintf(stderr, "(%i, %i, %i) = %f\n", | ||
127 | // i, j, k, tree.getValue(openvdb::Coord(i, j, k))); | ||
128 | 7 | ++count; | |
129 | } | ||
130 | } | ||
131 | } | ||
132 | } | ||
133 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(7, count); |
134 | |||
135 | openvdb::Coord xyz; | ||
136 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | int count2 = 0; |
137 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for (TreeType::ValueOnCIter iter = tree.cbeginValueOn();iter; ++iter) { |
138 |
1/2✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
10 | ++count2; |
139 | xyz = iter.getCoord(); | ||
140 | //std::cerr << xyz << " = " << *iter << "\n"; | ||
141 | } | ||
142 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(10, count2); |
143 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(Index64(10), tree.activeVoxelCount()); |
144 | 1 | } | |
145 | |||
146 | |||
147 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testValueAllIterator) |
148 | { | ||
149 | const openvdb::Index DIM0 = 3, DIM1 = 2, DIM2 = 3; | ||
150 | |||
151 | typedef openvdb::tree::Tree4<float, DIM2, DIM1, DIM0>::Type Tree323f; | ||
152 | |||
153 | typedef Tree323f::RootNodeType RootT; | ||
154 | typedef RootT::ChildNodeType Int1T; | ||
155 | typedef Int1T::ChildNodeType Int2T; | ||
156 | typedef Int2T::ChildNodeType LeafT; | ||
157 | |||
158 | 2 | Tree323f tree(/*fillValue=*/256.0f); | |
159 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(4), 0.0f); |
160 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-4), -1.0f); |
161 | |||
162 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | const size_t expectedNumOff = |
163 | 2 * ((1 << (3 * DIM2)) - 1) // 2 8x8x8 InternalNodes - 1 child pointer each | ||
164 | + 2 * ((1 << (3 * DIM1)) - 1) // 2 4x4x4 InternalNodes - 1 child pointer each | ||
165 | + 2 * ((1 << (3 * DIM0)) - 1); // 2 8x8x8 LeafNodes - 1 active value each | ||
166 | |||
167 | { | ||
168 | Tree323f::ValueAllIter iter = tree.beginValueAll(); | ||
169 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
170 | |||
171 | // Read all tile and voxel values through a non-const value iterator. | ||
172 | 1 | size_t numOn = 0, numOff = 0; | |
173 |
2/2✓ Branch 0 taken 2172 times.
✓ Branch 1 taken 1 times.
|
2173 | for ( ; iter; ++iter) { |
174 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 2172 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2172 | EXPECT_TRUE(iter.getLevel() <= 3); |
175 | const openvdb::Index iterLevel = iter.getLevel(); | ||
176 |
2/2✓ Branch 0 taken 8688 times.
✓ Branch 1 taken 2172 times.
|
10860 | for (openvdb::Index lvl = 0; lvl <= 3; ++lvl) { |
177 | RootT* root; Int1T* int1; Int2T* int2; LeafT* leaf; | ||
178 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 8688 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
8688 | iter.getNode(root); EXPECT_TRUE(root != NULL); |
179 |
2/18✓ Branch 0 taken 8688 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8688 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
8688 | iter.getNode(int1); EXPECT_TRUE(iterLevel < 3 ? int1 != NULL: int1 == NULL); |
180 |
3/18✓ Branch 0 taken 4600 times.
✓ Branch 1 taken 4088 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8688 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
8688 | iter.getNode(int2); EXPECT_TRUE(iterLevel < 2 ? int2 != NULL: int2 == NULL); |
181 |
3/18✓ Branch 0 taken 4096 times.
✓ Branch 1 taken 4592 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8688 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
8688 | iter.getNode(leaf); EXPECT_TRUE(iterLevel < 1 ? leaf != NULL: leaf == NULL); |
182 | } | ||
183 | |||
184 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2170 times.
|
2172 | if (iter.isValueOn()) { |
185 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | ++numOn; |
186 | 2 | const float f = iter.getValue(); | |
187 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
|
2 | if (openvdb::math::isZero(f)) { |
188 |
2/18✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
2 | EXPECT_TRUE(iter.getCoord() == openvdb::Coord(4)); |
189 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.isVoxelValue()); |
190 | } else { | ||
191 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | ASSERT_DOUBLES_EXACTLY_EQUAL(-1.0f, f); |
192 |
2/18✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
2 | EXPECT_TRUE(iter.getCoord() == openvdb::Coord(-4)); |
193 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.isVoxelValue()); |
194 | } | ||
195 | } else { | ||
196 | 2170 | ++numOff; | |
197 | |||
198 | // For every tenth inactive value, check that the size of | ||
199 | // the tile or voxel is as expected. | ||
200 |
2/2✓ Branch 0 taken 217 times.
✓ Branch 1 taken 1953 times.
|
2170 | if (numOff % 10 == 0) { |
201 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 217 times.
|
217 | const int dim[4] = { |
202 | 1, 1 << DIM0, 1 << (DIM1 + DIM0), 1 << (DIM2 + DIM1 + DIM0) | ||
203 | }; | ||
204 | 217 | const int lvl = iter.getLevel(); | |
205 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 217 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
217 | EXPECT_TRUE(lvl < 4); |
206 | 217 | openvdb::CoordBBox bbox; | |
207 |
1/2✓ Branch 1 taken 217 times.
✗ Branch 2 not taken.
|
217 | iter.getBoundingBox(bbox); |
208 |
2/16✓ Branch 2 taken 217 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 217 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
217 | EXPECT_EQ( |
209 | bbox.extents(), openvdb::Coord(dim[lvl], dim[lvl], dim[lvl])); | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(2, int(numOn)); |
214 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(expectedNumOff, numOff); |
215 | } | ||
216 | { | ||
217 | Tree323f::ValueAllCIter iter = tree.cbeginValueAll(); | ||
218 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
219 | |||
220 | // Read all tile and voxel values through a const value iterator. | ||
221 | 1 | size_t numOn = 0, numOff = 0; | |
222 |
3/4✓ Branch 0 taken 2172 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 2172 times.
✗ Branch 4 not taken.
|
4345 | for ( ; iter.test(); iter.next()) { |
223 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2170 times.
|
2172 | if (iter.isValueOn()) ++numOn; else ++numOff; |
224 | } | ||
225 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(2, int(numOn)); |
226 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(expectedNumOff, numOff); |
227 | } | ||
228 | { | ||
229 | Tree323f::ValueAllIter iter = tree.beginValueAll(); | ||
230 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
231 | |||
232 | // Read all tile and voxel values through a non-const value iterator | ||
233 | // and overwrite all active values. | ||
234 | 1 | size_t numOn = 0, numOff = 0; | |
235 |
2/2✓ Branch 0 taken 2172 times.
✓ Branch 1 taken 1 times.
|
2173 | for ( ; iter; ++iter) { |
236 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2170 times.
|
2172 | if (iter.isValueOn()) { |
237 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | iter.setValue(iter.getValue() - 5); |
238 | 2 | ++numOn; | |
239 | } else { | ||
240 | 2170 | ++numOff; | |
241 | } | ||
242 | } | ||
243 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(2, int(numOn)); |
244 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(expectedNumOff, numOff); |
245 | } | ||
246 | 1 | } | |
247 | |||
248 | |||
249 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testValueOnIterator) |
250 | { | ||
251 | typedef openvdb::tree::Tree4<float, 3, 2, 3>::Type Tree323f; | ||
252 | |||
253 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | Tree323f tree(/*fillValue=*/256.0f); |
254 | |||
255 | { | ||
256 | Tree323f::ValueOnIter iter = tree.beginValueOn(); | ||
257 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!iter.test()); // empty tree |
258 | } | ||
259 | |||
260 | 1 | const int STEP = 8/*100*/, NUM_STEPS = 10; | |
261 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for (int i = 0; i < NUM_STEPS; ++i) { |
262 |
1/2✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
20 | tree.setValue(openvdb::Coord(STEP * i), 0.0f); |
263 | } | ||
264 | |||
265 | { | ||
266 | Tree323f::ValueOnIter iter = tree.beginValueOn(); | ||
267 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
268 | |||
269 | // Read all active tile and voxel values through a non-const value iterator. | ||
270 | 1 | int numOn = 0; | |
271 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for ( ; iter; ++iter) { |
272 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
10 | EXPECT_TRUE(iter.isVoxelValue()); |
273 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
10 | EXPECT_TRUE(iter.isValueOn()); |
274 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.0f, iter.getValue()); |
275 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | EXPECT_EQ(openvdb::Coord(STEP * numOn), iter.getCoord()); |
276 |
1/2✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
10 | ++numOn; |
277 | } | ||
278 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(NUM_STEPS, numOn); |
279 | } | ||
280 | { | ||
281 | Tree323f::ValueOnCIter iter = tree.cbeginValueOn(); | ||
282 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
283 | |||
284 | // Read all active tile and voxel values through a const value iterator. | ||
285 | 1 | int numOn = 0; | |
286 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for ( ; iter.test(); iter.next()) { |
287 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
10 | EXPECT_TRUE(iter.isVoxelValue()); |
288 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
10 | EXPECT_TRUE(iter.isValueOn()); |
289 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.0f, iter.getValue()); |
290 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | EXPECT_EQ(openvdb::Coord(STEP * numOn), iter.getCoord()); |
291 |
1/2✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
10 | ++numOn; |
292 | } | ||
293 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(NUM_STEPS, numOn); |
294 | } | ||
295 | { | ||
296 | Tree323f::ValueOnIter iter = tree.beginValueOn(); | ||
297 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
298 | |||
299 | // Read all active tile and voxel values through a non-const value iterator | ||
300 | // and overwrite the values. | ||
301 | 1 | int numOn = 0; | |
302 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
11 | for ( ; iter; ++iter) { |
303 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
10 | EXPECT_TRUE(iter.isVoxelValue()); |
304 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
10 | EXPECT_TRUE(iter.isValueOn()); |
305 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | ASSERT_DOUBLES_EXACTLY_EQUAL(0.0f, iter.getValue()); |
306 |
2/4✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | iter.setValue(5.0f); |
307 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | ASSERT_DOUBLES_EXACTLY_EQUAL(5.0f, iter.getValue()); |
308 |
2/16✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
10 | EXPECT_EQ(openvdb::Coord(STEP * numOn), iter.getCoord()); |
309 |
1/2✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
10 | ++numOn; |
310 | } | ||
311 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(NUM_STEPS, numOn); |
312 | } | ||
313 | 1 | } | |
314 | |||
315 | |||
316 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testValueOffIterator) |
317 | { | ||
318 | const openvdb::Index DIM0 = 3, DIM1 = 2, DIM2 = 3; | ||
319 | |||
320 | typedef openvdb::tree::Tree4<float, DIM2, DIM1, DIM0>::Type Tree323f; | ||
321 | |||
322 | 2 | Tree323f tree(/*fillValue=*/256.0f); | |
323 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(4), 0.0f); |
324 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-4), -1.0f); |
325 | |||
326 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | const size_t expectedNumOff = |
327 | 2 * ((1 << (3 * DIM2)) - 1) // 2 8x8x8 InternalNodes - 1 child pointer each | ||
328 | + 2 * ((1 << (3 * DIM1)) - 1) // 2 4x4x4 InternalNodes - 1 child pointer each | ||
329 | + 2 * ((1 << (3 * DIM0)) - 1); // 2 8x8x8 LeafNodes - 1 active value each | ||
330 | |||
331 | { | ||
332 | Tree323f::ValueOffIter iter = tree.beginValueOff(); | ||
333 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
334 | |||
335 | // Read all inactive tile and voxel values through a non-const value iterator. | ||
336 | 1 | size_t numOff = 0; | |
337 |
2/2✓ Branch 0 taken 2170 times.
✓ Branch 1 taken 1 times.
|
2171 | for ( ; iter; ++iter) { |
338 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 2170 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2170 | EXPECT_TRUE(!iter.isValueOn()); |
339 | 2170 | ++numOff; | |
340 | // For every tenth inactive value, check that the size of | ||
341 | // the tile or voxel is as expected. | ||
342 |
2/2✓ Branch 0 taken 217 times.
✓ Branch 1 taken 1953 times.
|
2170 | if (numOff % 10 == 0) { |
343 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 217 times.
|
217 | const int dim[4] = { |
344 | 1, 1 << DIM0, 1 << (DIM1 + DIM0), 1 << (DIM2 + DIM1 + DIM0) | ||
345 | }; | ||
346 | 217 | const int lvl = iter.getLevel(); | |
347 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 217 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
217 | EXPECT_TRUE(lvl < 4); |
348 | 217 | openvdb::CoordBBox bbox; | |
349 |
1/2✓ Branch 1 taken 217 times.
✗ Branch 2 not taken.
|
217 | iter.getBoundingBox(bbox); |
350 |
2/16✓ Branch 2 taken 217 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 217 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
217 | EXPECT_EQ(bbox.extents(), openvdb::Coord(dim[lvl], dim[lvl], dim[lvl])); |
351 | } | ||
352 | } | ||
353 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(expectedNumOff, numOff); |
354 | } | ||
355 | { | ||
356 | Tree323f::ValueOffCIter iter = tree.cbeginValueOff(); | ||
357 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
358 | |||
359 | // Read all inactive tile and voxel values through a const value iterator. | ||
360 | 1 | size_t numOff = 0; | |
361 |
3/4✓ Branch 0 taken 2170 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 2170 times.
✗ Branch 4 not taken.
|
4341 | for ( ; iter.test(); iter.next(), ++numOff) { |
362 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 2170 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2170 | EXPECT_TRUE(!iter.isValueOn()); |
363 | } | ||
364 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(expectedNumOff, numOff); |
365 | } | ||
366 | { | ||
367 | Tree323f::ValueOffIter iter = tree.beginValueOff(); | ||
368 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
369 | |||
370 | // Read all inactive tile and voxel values through a non-const value iterator | ||
371 | // and overwrite the values. | ||
372 | 1 | size_t numOff = 0; | |
373 |
2/2✓ Branch 0 taken 2170 times.
✓ Branch 1 taken 1 times.
|
4341 | for ( ; iter; ++iter, ++numOff) { |
374 |
1/2✓ Branch 1 taken 2170 times.
✗ Branch 2 not taken.
|
2170 | iter.setValue(iter.getValue() - 5); |
375 |
1/2✓ Branch 1 taken 2170 times.
✗ Branch 2 not taken.
|
2170 | iter.setValueOff(); |
376 | } | ||
377 |
2/2✓ Branch 1 taken 2170 times.
✓ Branch 2 taken 1 times.
|
4342 | for (iter = tree.beginValueOff(); iter; ++iter, --numOff); |
378 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), numOff); |
379 | } | ||
380 | 1 | } | |
381 | |||
382 | |||
383 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testModifyValue) |
384 | { | ||
385 | using openvdb::Coord; | ||
386 | |||
387 | const openvdb::Index DIM0 = 3, DIM1 = 2, DIM2 = 3; | ||
388 | { | ||
389 | typedef openvdb::tree::Tree4<int32_t, DIM2, DIM1, DIM0>::Type IntTree323f; | ||
390 | |||
391 | 2 | IntTree323f tree(/*background=*/256); | |
392 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.addTile(/*level=*/3, Coord(-1), /*value=*/ 4, /*active=*/true); |
393 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.addTile(/*level=*/2, Coord(1 << (DIM0 + DIM1)), /*value=*/-3, /*active=*/true); |
394 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.addTile(/*level=*/1, Coord(1 << DIM0), /*value=*/ 2, /*active=*/true); |
395 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tree.addTile(/*level=*/0, Coord(0), /*value=*/-1, /*active=*/true); |
396 | |||
397 | 1087 | struct Local { static inline void negate(int32_t& n) { n = -n; } }; | |
398 | |||
399 |
2/2✓ Branch 0 taken 1087 times.
✓ Branch 1 taken 1 times.
|
1088 | for (IntTree323f::ValueAllIter iter = tree.beginValueAll(); iter; ++iter) { |
400 | iter.modifyValue(Local::negate); | ||
401 | } | ||
402 | |||
403 |
2/2✓ Branch 0 taken 1087 times.
✓ Branch 1 taken 1 times.
|
1088 | for (IntTree323f::ValueAllCIter iter = tree.cbeginValueAll(); iter; ++iter) { |
404 | 1087 | const int32_t val = *iter; | |
405 |
3/18✓ Branch 0 taken 1085 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1085 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
1087 | if (val < 0) EXPECT_TRUE((-val) % 2 == 0); // negative values are even |
406 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2 | else EXPECT_TRUE(val % 2 == 1); // positive values are odd |
407 | } | ||
408 | |||
409 | // Because modifying values through a const iterator is not allowed, | ||
410 | // uncommenting the following line should result in a static assertion failure: | ||
411 | //tree.cbeginValueOn().modifyValue(Local::negate); | ||
412 | } | ||
413 | { | ||
414 | typedef openvdb::tree::Tree4<bool, DIM2, DIM1, DIM0>::Type BoolTree323f; | ||
415 | |||
416 | 2 | BoolTree323f tree; | |
417 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.addTile(/*level=*/3, Coord(-1), /*value=*/false, /*active=*/true); |
418 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.addTile(/*level=*/2, Coord(1 << (DIM0 + DIM1)), /*value=*/ true, /*active=*/true); |
419 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.addTile(/*level=*/1, Coord(1 << DIM0), /*value=*/false, /*active=*/true); |
420 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tree.addTile(/*level=*/0, Coord(0), /*value=*/ true, /*active=*/true); |
421 | |||
422 | 1087 | struct Local { static inline void negate(bool& b) { b = !b; } }; | |
423 | |||
424 |
2/2✓ Branch 0 taken 1087 times.
✓ Branch 1 taken 1 times.
|
1088 | for (BoolTree323f::ValueAllIter iter = tree.beginValueAll(); iter; ++iter) { |
425 | iter.modifyValue(Local::negate); | ||
426 | } | ||
427 | |||
428 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!tree.getValue(Coord(0))); |
429 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE( tree.getValue(Coord(1 << DIM0))); |
430 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!tree.getValue(Coord(1 << (DIM0 + DIM1)))); |
431 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE( tree.getValue(Coord(-1))); |
432 | |||
433 | // Because modifying values through a const iterator is not allowed, | ||
434 | // uncommenting the following line should result in a static assertion failure: | ||
435 | //tree.cbeginValueOn().modifyValue(Local::negate); | ||
436 | } | ||
437 | { | ||
438 | // @note StringTree types as native types are deprecated, but we can | ||
439 | // still test tool functionality with them | ||
440 | typedef openvdb::tree::Tree4<std::string, DIM2, DIM1, DIM0>::Type StringTree323f; | ||
441 | |||
442 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | StringTree323f tree(/*background=*/""); |
443 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tree.addTile(/*level=*/3, Coord(-1), /*value=*/"abc", /*active=*/true); |
444 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tree.addTile(/*level=*/2, Coord(1 << (DIM0 + DIM1)), /*value=*/"abc", /*active=*/true); |
445 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tree.addTile(/*level=*/1, Coord(1 << DIM0), /*value=*/"abc", /*active=*/true); |
446 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | tree.addTile(/*level=*/0, Coord(0), /*value=*/"abc", /*active=*/true); |
447 | |||
448 | 4 | struct Local { static inline void op(std::string& s) { s.append("def"); } }; | |
449 | |||
450 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
5 | for (StringTree323f::ValueOnIter iter = tree.beginValueOn(); iter; ++iter) { |
451 | iter.modifyValue(Local::op); | ||
452 | } | ||
453 | |||
454 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | const std::string expectedVal("abcdef"); |
455 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
5 | for (StringTree323f::ValueOnCIter iter = tree.cbeginValueOn(); iter; ++iter) { |
456 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
4 | EXPECT_EQ(expectedVal, *iter); |
457 | } | ||
458 |
2/2✓ Branch 0 taken 1083 times.
✓ Branch 1 taken 1 times.
|
1084 | for (StringTree323f::ValueOffCIter iter = tree.cbeginValueOff(); iter; ++iter) { |
459 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1083 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1083 | EXPECT_TRUE((*iter).empty()); |
460 | } | ||
461 | } | ||
462 | 1 | } | |
463 | |||
464 | |||
465 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestTreeIterators, testDepthBounds) |
466 | { | ||
467 | const openvdb::Index DIM0 = 3, DIM1 = 2, DIM2 = 3; | ||
468 | |||
469 | typedef openvdb::tree::Tree4<float, DIM2, DIM1, DIM0>::Type Tree323f; | ||
470 | |||
471 | 2 | Tree323f tree(/*fillValue=*/256.0f); | |
472 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(4), 0.0f); |
473 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tree.setValue(openvdb::Coord(-4), -1.0f); |
474 | |||
475 | const size_t | ||
476 | numDepth1 = 2 * ((1 << (3 * DIM2)) - 1), // 2 8x8x8 InternalNodes - 1 child pointer each | ||
477 | numDepth2 = 2 * ((1 << (3 * DIM1)) - 1), // 2 4x4x4 InternalNodes - 1 child pointer each | ||
478 | numDepth3 = 2 * ((1 << (3 * DIM0)) - 1), // 2 8x8x8 LeafNodes - 1 active value each | ||
479 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | expectedNumOff = numDepth1 + numDepth2 + numDepth3; |
480 | |||
481 | { | ||
482 | Tree323f::ValueOffCIter iter = tree.cbeginValueOff(); | ||
483 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
484 | |||
485 | // Read all inactive tile and voxel values through a non-const value iterator. | ||
486 | 1 | size_t numOff = 0; | |
487 |
2/2✓ Branch 0 taken 2170 times.
✓ Branch 1 taken 1 times.
|
2171 | for ( ; iter; ++iter) { |
488 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 2170 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2170 | EXPECT_TRUE(!iter.isValueOn()); |
489 |
1/2✓ Branch 1 taken 2170 times.
✗ Branch 2 not taken.
|
2170 | ++numOff; |
490 | } | ||
491 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
1 | EXPECT_EQ(expectedNumOff, numOff); |
492 | } | ||
493 | { | ||
494 | // Repeat, setting the minimum iterator depth to 2. | ||
495 | Tree323f::ValueOffCIter iter = tree.cbeginValueOff(); | ||
496 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
497 | |||
498 | iter.setMinDepth(2); | ||
499 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
500 | |||
501 | 1 | size_t numOff = 0; | |
502 |
2/2✓ Branch 0 taken 1148 times.
✓ Branch 1 taken 1 times.
|
1149 | for ( ; iter; ++iter) { |
503 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1148 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1148 | EXPECT_TRUE(!iter.isValueOn()); |
504 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1148 times.
|
1148 | ++numOff; |
505 | 1148 | const int depth = iter.getDepth(); | |
506 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1148 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1148 | EXPECT_TRUE(depth > 1); |
507 | } | ||
508 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(expectedNumOff - numDepth1, numOff); |
509 | } | ||
510 | { | ||
511 | // Repeat, setting the minimum and maximum depths to 2. | ||
512 | Tree323f::ValueOffCIter iter = tree.cbeginValueOff(); | ||
513 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
514 | |||
515 | iter.setMinDepth(2); | ||
516 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
517 | |||
518 | 1 | iter.setMaxDepth(2); | |
519 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(iter.test()); |
520 | |||
521 | 1 | size_t numOff = 0; | |
522 |
2/2✓ Branch 0 taken 126 times.
✓ Branch 1 taken 1 times.
|
127 | for ( ; iter; ++iter) { |
523 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 126 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
126 | EXPECT_TRUE(!iter.isValueOn()); |
524 |
1/2✓ Branch 1 taken 126 times.
✗ Branch 2 not taken.
|
126 | ++numOff; |
525 | 126 | const int depth = iter.getDepth(); | |
526 |
2/16✓ Branch 1 taken 126 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 126 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
126 | EXPECT_EQ(2, depth); |
527 | } | ||
528 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(expectedNumOff - numDepth1 - numDepth3, numOff); |
529 | } | ||
530 | { | ||
531 | // FX-7884 regression test | ||
532 | using namespace openvdb; | ||
533 | |||
534 | const float radius = 4.3f, voxelSize = 0.1f, width = 2.0f; | ||
535 | const Vec3f center(15.8f, 13.2f, 16.7f); | ||
536 | FloatGrid::Ptr sphereGrid = tools::createLevelSetSphere<FloatGrid>( | ||
537 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | radius, center, voxelSize, width); |
538 | const FloatTree& sphereTree = sphereGrid->tree(); | ||
539 | |||
540 | FloatGrid::ValueOffIter iter = sphereGrid->beginValueOff(); | ||
541 | 1 | iter.setMaxDepth(2); | |
542 |
2/2✓ Branch 0 taken 56675 times.
✓ Branch 1 taken 1 times.
|
56676 | for ( ; iter; ++iter) { |
543 |
1/2✓ Branch 1 taken 56675 times.
✗ Branch 2 not taken.
|
56675 | const Coord ijk = iter.getCoord(); |
544 |
3/18✓ Branch 1 taken 56675 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 56675 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 56675 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
56675 | ASSERT_DOUBLES_EXACTLY_EQUAL(sphereTree.getValue(ijk), *iter); |
545 | } | ||
546 | } | ||
547 | { | ||
548 | // FX-10221 regression test | ||
549 | // This code generated an infinite loop in OpenVDB 5.1.0 and earlier: | ||
550 | 2 | openvdb::FloatTree emptyTree; | |
551 | auto iter = emptyTree.cbeginValueAll(); | ||
552 | iter.setMinDepth(2); | ||
553 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!iter); |
554 | } | ||
555 | 1 | } | |
556 |