| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright Contributors to the OpenVDB Project | ||
| 2 | // SPDX-License-Identifier: MPL-2.0 | ||
| 3 | |||
| 4 | //#define BENCHMARK_TEST | ||
| 5 | |||
| 6 | #include <openvdb/openvdb.h> | ||
| 7 | #include <openvdb/tools/LevelSetSphere.h> | ||
| 8 | #include <openvdb/tools/Count.h> | ||
| 9 | #include <openvdb/tools/Dense.h> | ||
| 10 | #include <openvdb/Exceptions.h> | ||
| 11 | #ifdef BENCHMARK_TEST | ||
| 12 | #include <openvdb/util/CpuTimer.h> | ||
| 13 | #endif | ||
| 14 | |||
| 15 | #include <gtest/gtest.h> | ||
| 16 | |||
| 17 | #include <sstream> | ||
| 18 | |||
| 19 | |||
| 20 | 16 | class TestDense: public ::testing::Test | |
| 21 | { | ||
| 22 | public: | ||
| 23 | template <openvdb::tools::MemoryLayout Layout> | ||
| 24 | void testCopy(); | ||
| 25 | template <openvdb::tools::MemoryLayout Layout> | ||
| 26 | void testCopyBool(); | ||
| 27 | template <openvdb::tools::MemoryLayout Layout> | ||
| 28 | void testCopyFromDenseWithOffset(); | ||
| 29 | template <openvdb::tools::MemoryLayout Layout> | ||
| 30 | void testDense2Sparse(); | ||
| 31 | template <openvdb::tools::MemoryLayout Layout> | ||
| 32 | void testDense2Sparse2(); | ||
| 33 | template <openvdb::tools::MemoryLayout Layout> | ||
| 34 | void testInvalidBBox(); | ||
| 35 | template <openvdb::tools::MemoryLayout Layout> | ||
| 36 | void testDense2Sparse2Dense(); | ||
| 37 | }; | ||
| 38 | |||
| 39 | |||
| 40 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDenseZYX) |
| 41 | { | ||
| 42 | 1 | const openvdb::CoordBBox bbox(openvdb::Coord(-40,-5, 6), | |
| 43 | 1 | openvdb::Coord(-11, 7,22)); | |
| 44 | 1 | openvdb::tools::Dense<float> dense(bbox);//LayoutZYX is the default | |
| 45 | |||
| 46 | // Check Desne::origin() | ||
| 47 |
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(openvdb::Coord(-40,-5, 6) == dense.origin()); |
| 48 | |||
| 49 | // Check coordToOffset and offsetToCoord | ||
| 50 | 1 | size_t offset = 0; | |
| 51 |
2/2✓ Branch 0 taken 30 times.
✓ Branch 1 taken 1 times.
|
31 | for (openvdb::Coord P(bbox.min()); P[0] <= bbox.max()[0]; ++P[0]) { |
| 52 |
2/2✓ Branch 0 taken 390 times.
✓ Branch 1 taken 30 times.
|
420 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 53 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 390 times.
|
7020 | for (P[2] = bbox.min()[2]; P[2] <= bbox.max()[2]; ++P[2]) { |
| 54 | //std::cerr << "offset = " << offset << " P = " << P << std::endl; | ||
| 55 |
2/16✓ Branch 2 taken 6630 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 6630 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.
|
6630 | EXPECT_EQ(offset, dense.coordToOffset(P)); |
| 56 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_EQ(P - dense.origin(), dense.offsetToLocalCoord(offset)); |
| 57 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_EQ(P, dense.offsetToCoord(offset)); |
| 58 | 6630 | ++offset; | |
| 59 | } | ||
| 60 | } | ||
| 61 | } | ||
| 62 | |||
| 63 | // Check Dense::valueCount | ||
| 64 | 1 | const int size = static_cast<int>(dense.valueCount()); | |
| 65 |
2/18✓ 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.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_EQ(30*13*17, size); |
| 66 | |||
| 67 | // Check Dense::fill(float) and Dense::getValue(size_t) | ||
| 68 | 1 | const float v = 0.234f; | |
| 69 | 1 | dense.fill(v); | |
| 70 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 1 times.
|
6631 | for (int i=0; i<size; ++i) { |
| 71 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_NEAR(v, dense.getValue(i),/*tolerance=*/0.0001); |
| 72 | } | ||
| 73 | |||
| 74 | // Check Dense::data() and Dense::getValue(Coord, float) | ||
| 75 | float* a = dense.data(); | ||
| 76 | int s = size; | ||
| 77 |
4/18✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 6630 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 6630 times.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
6631 | while(s--) EXPECT_NEAR(v, *a++, /*tolerance=*/0.0001); |
| 78 | |||
| 79 |
2/2✓ Branch 0 taken 30 times.
✓ Branch 1 taken 1 times.
|
31 | for (openvdb::Coord P(bbox.min()); P[0] <= bbox.max()[0]; ++P[0]) { |
| 80 |
2/2✓ Branch 0 taken 390 times.
✓ Branch 1 taken 30 times.
|
420 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 81 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 390 times.
|
7020 | for (P[2] = bbox.min()[2]; P[2] <= bbox.max()[2]; ++P[2]) { |
| 82 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_NEAR(v, dense.getValue(P), /*tolerance=*/0.0001); |
| 83 | } | ||
| 84 | } | ||
| 85 | } | ||
| 86 | |||
| 87 | // Check Dense::setValue(Coord, float) | ||
| 88 | const openvdb::Coord C(-30, 3,12); | ||
| 89 | const float v1 = 3.45f; | ||
| 90 | dense.setValue(C, v1); | ||
| 91 |
2/2✓ Branch 0 taken 30 times.
✓ Branch 1 taken 1 times.
|
31 | for (openvdb::Coord P(bbox.min()); P[0] <= bbox.max()[0]; ++P[0]) { |
| 92 |
2/2✓ Branch 0 taken 390 times.
✓ Branch 1 taken 30 times.
|
420 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 93 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 390 times.
|
7020 | for (P[2] = bbox.min()[2]; P[2] <= bbox.max()[2]; ++P[2]) { |
| 94 |
4/18✓ Branch 0 taken 221 times.
✓ Branch 1 taken 6409 times.
✓ Branch 3 taken 6630 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 6630 times.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
6851 | EXPECT_NEAR(P==C ? v1 : v, dense.getValue(P), |
| 95 | /*tolerance=*/0.0001); | ||
| 96 | } | ||
| 97 | } | ||
| 98 | } | ||
| 99 | |||
| 100 | // Check Dense::setValue(size_t, size_t, size_t, float) | ||
| 101 | dense.setValue(C, v); | ||
| 102 | const openvdb::Coord L(1,2,3), C1 = bbox.min() + L; | ||
| 103 | dense.setValue(L[0], L[1], L[2], v1); | ||
| 104 |
2/2✓ Branch 0 taken 30 times.
✓ Branch 1 taken 1 times.
|
31 | for (openvdb::Coord P(bbox.min()); P[0] <= bbox.max()[0]; ++P[0]) { |
| 105 |
2/2✓ Branch 0 taken 390 times.
✓ Branch 1 taken 30 times.
|
420 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 106 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 390 times.
|
7020 | for (P[2] = bbox.min()[2]; P[2] <= bbox.max()[2]; ++P[2]) { |
| 107 |
4/18✓ Branch 0 taken 221 times.
✓ Branch 1 taken 6409 times.
✓ Branch 3 taken 6630 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 6630 times.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
6851 | EXPECT_NEAR(P==C1 ? v1 : v, dense.getValue(P), |
| 108 | /*tolerance=*/0.0001); | ||
| 109 | } | ||
| 110 | } | ||
| 111 | } | ||
| 112 | |||
| 113 | 1 | } | |
| 114 | |||
| 115 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDenseXYZ) |
| 116 | { | ||
| 117 | 1 | const openvdb::CoordBBox bbox(openvdb::Coord(-40,-5, 6), | |
| 118 | 1 | openvdb::Coord(-11, 7,22)); | |
| 119 | 1 | openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox); | |
| 120 | |||
| 121 | // Check Desne::origin() | ||
| 122 |
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(openvdb::Coord(-40,-5, 6) == dense.origin()); |
| 123 | |||
| 124 | // Check coordToOffset and offsetToCoord | ||
| 125 | 1 | size_t offset = 0; | |
| 126 |
2/2✓ Branch 0 taken 17 times.
✓ Branch 1 taken 1 times.
|
18 | for (openvdb::Coord P(bbox.min()); P[2] <= bbox.max()[2]; ++P[2]) { |
| 127 |
2/2✓ Branch 0 taken 221 times.
✓ Branch 1 taken 17 times.
|
238 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 128 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 221 times.
|
6851 | for (P[0] = bbox.min()[0]; P[0] <= bbox.max()[0]; ++P[0]) { |
| 129 | //std::cerr << "offset = " << offset << " P = " << P << std::endl; | ||
| 130 |
2/16✓ Branch 2 taken 6630 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 6630 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.
|
6630 | EXPECT_EQ(offset, dense.coordToOffset(P)); |
| 131 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_EQ(P - dense.origin(), dense.offsetToLocalCoord(offset)); |
| 132 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_EQ(P, dense.offsetToCoord(offset)); |
| 133 | 6630 | ++offset; | |
| 134 | } | ||
| 135 | } | ||
| 136 | } | ||
| 137 | |||
| 138 | // Check Dense::valueCount | ||
| 139 | 1 | const int size = static_cast<int>(dense.valueCount()); | |
| 140 |
2/18✓ 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.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_EQ(30*13*17, size); |
| 141 | |||
| 142 | // Check Dense::fill(float) and Dense::getValue(size_t) | ||
| 143 | 1 | const float v = 0.234f; | |
| 144 | 1 | dense.fill(v); | |
| 145 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 1 times.
|
6631 | for (int i=0; i<size; ++i) { |
| 146 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_NEAR(v, dense.getValue(i),/*tolerance=*/0.0001); |
| 147 | } | ||
| 148 | |||
| 149 | // Check Dense::data() and Dense::getValue(Coord, float) | ||
| 150 | float* a = dense.data(); | ||
| 151 | int s = size; | ||
| 152 |
4/18✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 6630 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 6630 times.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
6631 | while(s--) EXPECT_NEAR(v, *a++, /*tolerance=*/0.0001); |
| 153 | |||
| 154 |
2/2✓ Branch 0 taken 17 times.
✓ Branch 1 taken 1 times.
|
18 | for (openvdb::Coord P(bbox.min()); P[2] <= bbox.max()[2]; ++P[2]) { |
| 155 |
2/2✓ Branch 0 taken 221 times.
✓ Branch 1 taken 17 times.
|
238 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 156 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 221 times.
|
6851 | for (P[0] = bbox.min()[0]; P[0] <= bbox.max()[0]; ++P[0]) { |
| 157 |
2/16✓ Branch 1 taken 6630 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 6630 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.
|
6630 | EXPECT_NEAR(v, dense.getValue(P), /*tolerance=*/0.0001); |
| 158 | } | ||
| 159 | } | ||
| 160 | } | ||
| 161 | |||
| 162 | // Check Dense::setValue(Coord, float) | ||
| 163 | const openvdb::Coord C(-30, 3,12); | ||
| 164 | const float v1 = 3.45f; | ||
| 165 | dense.setValue(C, v1); | ||
| 166 |
2/2✓ Branch 0 taken 17 times.
✓ Branch 1 taken 1 times.
|
18 | for (openvdb::Coord P(bbox.min()); P[2] <= bbox.max()[2]; ++P[2]) { |
| 167 |
2/2✓ Branch 0 taken 221 times.
✓ Branch 1 taken 17 times.
|
238 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 168 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 221 times.
|
6851 | for (P[0] = bbox.min()[0]; P[0] <= bbox.max()[0]; ++P[0]) { |
| 169 |
4/18✓ Branch 0 taken 221 times.
✓ Branch 1 taken 6409 times.
✓ Branch 3 taken 6630 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 6630 times.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
6851 | EXPECT_NEAR(P==C ? v1 : v, dense.getValue(P), |
| 170 | /*tolerance=*/0.0001); | ||
| 171 | } | ||
| 172 | } | ||
| 173 | } | ||
| 174 | |||
| 175 | // Check Dense::setValue(size_t, size_t, size_t, float) | ||
| 176 | dense.setValue(C, v); | ||
| 177 | const openvdb::Coord L(1,2,3), C1 = bbox.min() + L; | ||
| 178 | dense.setValue(L[0], L[1], L[2], v1); | ||
| 179 |
2/2✓ Branch 0 taken 17 times.
✓ Branch 1 taken 1 times.
|
18 | for (openvdb::Coord P(bbox.min()); P[2] <= bbox.max()[2]; ++P[2]) { |
| 180 |
2/2✓ Branch 0 taken 221 times.
✓ Branch 1 taken 17 times.
|
238 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 181 |
2/2✓ Branch 0 taken 6630 times.
✓ Branch 1 taken 221 times.
|
6851 | for (P[0] = bbox.min()[0]; P[0] <= bbox.max()[0]; ++P[0]) { |
| 182 |
4/18✓ Branch 0 taken 221 times.
✓ Branch 1 taken 6409 times.
✓ Branch 3 taken 6630 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 6630 times.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
6851 | EXPECT_NEAR(P==C1 ? v1 : v, dense.getValue(P), |
| 183 | /*tolerance=*/0.0001); | ||
| 184 | } | ||
| 185 | } | ||
| 186 | } | ||
| 187 | |||
| 188 | 1 | } | |
| 189 | |||
| 190 | |||
| 191 | // The check is so slow that we're going to multi-thread it :) | ||
| 192 | template <typename TreeT, | ||
| 193 | typename DenseT = openvdb::tools::Dense<typename TreeT::ValueType, | ||
| 194 | openvdb::tools::LayoutZYX> > | ||
| 195 | class CheckDense | ||
| 196 | { | ||
| 197 | public: | ||
| 198 | typedef typename TreeT::ValueType ValueT; | ||
| 199 | |||
| 200 | 2 | CheckDense() : mTree(NULL), mDense(NULL) | |
| 201 | { | ||
| 202 | EXPECT_TRUE(DenseT::memoryLayout() == openvdb::tools::LayoutZYX || | ||
| 203 | DenseT::memoryLayout() == openvdb::tools::LayoutXYZ ); | ||
| 204 | } | ||
| 205 | |||
| 206 | void check(const TreeT& tree, const DenseT& dense) | ||
| 207 | { | ||
| 208 | 6 | mTree = &tree; | |
| 209 | 6 | mDense = &dense; | |
| 210 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
|
6 | tbb::parallel_for(dense.bbox(), *this); |
| 211 | 6 | } | |
| 212 | 2154 | void operator()(const openvdb::CoordBBox& bbox) const | |
| 213 | { | ||
| 214 | 2154 | openvdb::tree::ValueAccessor<const TreeT> acc(*mTree); | |
| 215 | |||
| 216 | if (DenseT::memoryLayout() == openvdb::tools::LayoutZYX) {//resolved at compiletime | ||
| 217 |
2/2✓ Branch 0 taken 5167 times.
✓ Branch 1 taken 504 times.
|
11342 | for (openvdb::Coord P(bbox.min()); P[0] <= bbox.max()[0]; ++P[0]) { |
| 218 |
2/2✓ Branch 0 taken 49450 times.
✓ Branch 1 taken 5167 times.
|
109234 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 219 |
2/2✓ Branch 0 taken 352947 times.
✓ Branch 1 taken 49450 times.
|
804794 | for (P[2] = bbox.min()[2]; P[2] <= bbox.max()[2]; ++P[2]) { |
| 220 |
3/18✓ Branch 2 taken 352947 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 352947 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 352947 times.
✗ 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 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
705894 | EXPECT_NEAR(acc.getValue(P), mDense->getValue(P), |
| 221 | /*tolerance=*/0.0001); | ||
| 222 | } | ||
| 223 | } | ||
| 224 | } | ||
| 225 | } else { | ||
| 226 |
2/2✓ Branch 0 taken 3870 times.
✓ Branch 1 taken 573 times.
|
8886 | for (openvdb::Coord P(bbox.min()); P[2] <= bbox.max()[2]; ++P[2]) { |
| 227 |
2/2✓ Branch 0 taken 35076 times.
✓ Branch 1 taken 3870 times.
|
77892 | for (P[1] = bbox.min()[1]; P[1] <= bbox.max()[1]; ++P[1]) { |
| 228 |
2/2✓ Branch 0 taken 352947 times.
✓ Branch 1 taken 35076 times.
|
776046 | for (P[0] = bbox.min()[0]; P[0] <= bbox.max()[0]; ++P[0]) { |
| 229 |
3/18✓ Branch 2 taken 352947 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 352947 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 352947 times.
✗ 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 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
|
705894 | EXPECT_NEAR(acc.getValue(P), mDense->getValue(P), |
| 230 | /*tolerance=*/0.0001); | ||
| 231 | } | ||
| 232 | } | ||
| 233 | } | ||
| 234 | } | ||
| 235 | 2154 | } | |
| 236 | private: | ||
| 237 | const TreeT* mTree; | ||
| 238 | const DenseT* mDense; | ||
| 239 | };// CheckDense | ||
| 240 | |||
| 241 | template <openvdb::tools::MemoryLayout Layout> | ||
| 242 | void | ||
| 243 | 4 | TestDense::testCopy() | |
| 244 | { | ||
| 245 | using namespace openvdb; | ||
| 246 | |||
| 247 | //std::cerr << "\nTesting testCopy with " | ||
| 248 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 249 | // << std::endl; | ||
| 250 | |||
| 251 | typedef tools::Dense<float, Layout> DenseT; | ||
| 252 | CheckDense<FloatTree, DenseT> checkDense; | ||
| 253 | 4 | const float radius = 10.0f, tolerance = 0.00001f; | |
| 254 | const Vec3f center(0.0f); | ||
| 255 | // decrease the voxelSize to test larger grids | ||
| 256 | #ifdef BENCHMARK_TEST | ||
| 257 | const float voxelSize = 0.05f, width = 5.0f; | ||
| 258 | #else | ||
| 259 | 4 | const float voxelSize = 0.5f, width = 5.0f; | |
| 260 | #endif | ||
| 261 | |||
| 262 | // Create a VDB containing a level set of a sphere | ||
| 263 | 4 | FloatGrid::Ptr grid = | |
| 264 | tools::createLevelSetSphere<FloatGrid>(radius, center, voxelSize, width); | ||
| 265 | FloatTree& tree0 = grid->tree(); | ||
| 266 | |||
| 267 | // Create an empty dense grid | ||
| 268 |
2/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
4 | DenseT dense(grid->evalActiveVoxelBoundingBox()); |
| 269 | #ifdef BENCHMARK_TEST | ||
| 270 | std::cerr << "\nBBox = " << grid->evalActiveVoxelBoundingBox() << std::endl; | ||
| 271 | #endif | ||
| 272 | |||
| 273 | {//check Dense::fill | ||
| 274 | 4 | dense.fill(voxelSize); | |
| 275 | #ifndef BENCHMARK_TEST | ||
| 276 |
1/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
8 | checkDense.check(FloatTree(voxelSize), dense); |
| 277 | #endif | ||
| 278 | } | ||
| 279 | |||
| 280 | {// parallel convert to dense | ||
| 281 | #ifdef BENCHMARK_TEST | ||
| 282 | util::CpuTimer ts; | ||
| 283 | ts.start("CopyToDense"); | ||
| 284 | #endif | ||
| 285 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyToDense(*grid, dense); |
| 286 | #ifdef BENCHMARK_TEST | ||
| 287 | ts.stop(); | ||
| 288 | #else | ||
| 289 | checkDense.check(tree0, dense); | ||
| 290 | #endif | ||
| 291 | } | ||
| 292 | |||
| 293 | {// Parallel create from dense | ||
| 294 | #ifdef BENCHMARK_TEST | ||
| 295 | util::CpuTimer ts; | ||
| 296 | ts.start("CopyFromDense"); | ||
| 297 | #endif | ||
| 298 | 8 | FloatTree tree1(tree0.background()); | |
| 299 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyFromDense(dense, tree1, tolerance); |
| 300 | #ifdef BENCHMARK_TEST | ||
| 301 | ts.stop(); | ||
| 302 | #else | ||
| 303 | checkDense.check(tree1, dense); | ||
| 304 | #endif | ||
| 305 | } | ||
| 306 | 4 | } | |
| 307 | |||
| 308 | template <openvdb::tools::MemoryLayout Layout> | ||
| 309 | void | ||
| 310 | 4 | TestDense::testCopyBool() | |
| 311 | { | ||
| 312 | using namespace openvdb; | ||
| 313 | |||
| 314 | //std::cerr << "\nTesting testCopyBool with " | ||
| 315 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 316 | // << std::endl; | ||
| 317 | |||
| 318 | const Coord bmin(-1), bmax(8); | ||
| 319 | const CoordBBox bbox(bmin, bmax); | ||
| 320 | |||
| 321 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | BoolGrid::Ptr grid = createGrid<BoolGrid>(false); |
| 322 | BoolGrid::ConstAccessor acc = grid->getConstAccessor(); | ||
| 323 | |||
| 324 | typedef openvdb::tools::Dense<bool, Layout> DenseT; | ||
| 325 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | DenseT dense(bbox); |
| 326 | 4 | dense.fill(false); | |
| 327 | |||
| 328 | // Start with sparse and dense grids both filled with false. | ||
| 329 | Coord xyz; | ||
| 330 | int &x = xyz[0], &y = xyz[1], &z = xyz[2]; | ||
| 331 |
2/2✓ Branch 0 taken 20 times.
✓ Branch 1 taken 2 times.
|
44 | for (x = bmin.x(); x <= bmax.x(); ++x) { |
| 332 |
2/2✓ Branch 0 taken 200 times.
✓ Branch 1 taken 20 times.
|
440 | for (y = bmin.y(); y <= bmax.y(); ++y) { |
| 333 |
2/2✓ Branch 0 taken 2000 times.
✓ Branch 1 taken 200 times.
|
4400 | for (z = bmin.z(); z <= bmax.z(); ++z) { |
| 334 |
2/16✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2000 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.
|
4000 | EXPECT_EQ(false, dense.getValue(xyz)); |
| 335 |
2/16✓ Branch 2 taken 2000 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2000 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.
|
4000 | EXPECT_EQ(false, acc.getValue(xyz)); |
| 336 | } | ||
| 337 | } | ||
| 338 | } | ||
| 339 | |||
| 340 | // Fill the dense grid with true. | ||
| 341 | 4 | dense.fill(true); | |
| 342 | // Copy the contents of the dense grid to the sparse grid. | ||
| 343 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyFromDense(dense, *grid, /*tolerance=*/false); |
| 344 | |||
| 345 | // Verify that both sparse and dense grids are now filled with true. | ||
| 346 |
2/2✓ Branch 0 taken 20 times.
✓ Branch 1 taken 2 times.
|
44 | for (x = bmin.x(); x <= bmax.x(); ++x) { |
| 347 |
2/2✓ Branch 0 taken 200 times.
✓ Branch 1 taken 20 times.
|
440 | for (y = bmin.y(); y <= bmax.y(); ++y) { |
| 348 |
2/2✓ Branch 0 taken 2000 times.
✓ Branch 1 taken 200 times.
|
4400 | for (z = bmin.z(); z <= bmax.z(); ++z) { |
| 349 |
2/16✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2000 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.
|
4000 | EXPECT_EQ(true, dense.getValue(xyz)); |
| 350 |
2/16✓ Branch 2 taken 2000 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2000 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.
|
4000 | EXPECT_EQ(true, acc.getValue(xyz)); |
| 351 | } | ||
| 352 | } | ||
| 353 | } | ||
| 354 | |||
| 355 | // Fill the dense grid with false. | ||
| 356 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4 | dense.fill(false); |
| 357 | // Copy the contents (= true) of the sparse grid to the dense grid. | ||
| 358 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyToDense(*grid, dense); |
| 359 | |||
| 360 | // Verify that the dense grid is now filled with true. | ||
| 361 |
2/2✓ Branch 0 taken 20 times.
✓ Branch 1 taken 2 times.
|
44 | for (x = bmin.x(); x <= bmax.x(); ++x) { |
| 362 |
2/2✓ Branch 0 taken 200 times.
✓ Branch 1 taken 20 times.
|
440 | for (y = bmin.y(); y <= bmax.y(); ++y) { |
| 363 |
2/2✓ Branch 0 taken 2000 times.
✓ Branch 1 taken 200 times.
|
4400 | for (z = bmin.z(); z <= bmax.z(); ++z) { |
| 364 |
2/18✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2000 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.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
4000 | EXPECT_EQ(true, dense.getValue(xyz)); |
| 365 | } | ||
| 366 | } | ||
| 367 | } | ||
| 368 | 4 | } | |
| 369 | |||
| 370 | |||
| 371 | // Test copying from a dense grid to a sparse grid with various bounding boxes. | ||
| 372 | template <openvdb::tools::MemoryLayout Layout> | ||
| 373 | void | ||
| 374 | 4 | TestDense::testCopyFromDenseWithOffset() | |
| 375 | { | ||
| 376 | using namespace openvdb; | ||
| 377 | |||
| 378 | //std::cerr << "\nTesting testCopyFromDenseWithOffset with " | ||
| 379 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 380 | // << std::endl; | ||
| 381 | |||
| 382 | typedef openvdb::tools::Dense<float, Layout> DenseT; | ||
| 383 | |||
| 384 | 4 | const int DIM = 20, COUNT = DIM * DIM * DIM; | |
| 385 | 4 | const float FOREGROUND = 99.0f, BACKGROUND = 5000.0f; | |
| 386 | |||
| 387 | 4 | const int OFFSET[] = { 1, -1, 1001, -1001 }; | |
| 388 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
|
20 | for (int offsetIdx = 0; offsetIdx < 4; ++offsetIdx) { |
| 389 | |||
| 390 |
1/2✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
|
16 | const int offset = OFFSET[offsetIdx]; |
| 391 | 16 | const CoordBBox bbox = CoordBBox::createCube(Coord(offset), DIM); | |
| 392 | |||
| 393 |
1/2✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
|
16 | DenseT dense(bbox, FOREGROUND); |
| 394 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
|
16 | EXPECT_EQ(bbox, dense.bbox()); |
| 395 | |||
| 396 |
1/2✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
|
32 | FloatGrid grid(BACKGROUND); |
| 397 |
1/2✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
|
16 | tools::copyFromDense(dense, grid, /*tolerance=*/0.0); |
| 398 | |||
| 399 | const CoordBBox gridBBox = grid.evalActiveVoxelBoundingBox(); | ||
| 400 |
1/14✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
|
16 | EXPECT_EQ(bbox, gridBBox); |
| 401 |
2/16✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 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.
|
16 | EXPECT_EQ(COUNT, int(grid.activeVoxelCount())); |
| 402 | |||
| 403 | FloatGrid::ConstAccessor acc = grid.getConstAccessor(); | ||
| 404 |
2/2✓ Branch 0 taken 152 times.
✓ Branch 1 taken 8 times.
|
320 | for (int i = gridBBox.min()[0], ie = gridBBox.max()[0]; i < ie; ++i) { |
| 405 |
2/2✓ Branch 0 taken 2888 times.
✓ Branch 1 taken 152 times.
|
6080 | for (int j = gridBBox.min()[1], je = gridBBox.max()[1]; j < je; ++j) { |
| 406 |
2/2✓ Branch 0 taken 54872 times.
✓ Branch 1 taken 2888 times.
|
115520 | for (int k = gridBBox.min()[2], ke = gridBBox.max()[2]; k < ke; ++k) { |
| 407 | const Coord ijk(i, j, k); | ||
| 408 |
3/18✓ Branch 1 taken 54872 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 54872 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 54872 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.
|
109744 | EXPECT_NEAR( |
| 409 | FOREGROUND, acc.getValue(ijk), /*tolerance=*/0.0); | ||
| 410 |
1/16✗ Branch 1 not taken.
✓ Branch 2 taken 54872 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ 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 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
109744 | EXPECT_TRUE(acc.isValueOn(ijk)); |
| 411 | } | ||
| 412 | } | ||
| 413 | } | ||
| 414 | } | ||
| 415 | 4 | } | |
| 416 | |||
| 417 | template <openvdb::tools::MemoryLayout Layout> | ||
| 418 | void | ||
| 419 | 4 | TestDense::testDense2Sparse() | |
| 420 | { | ||
| 421 | // The following test revealed a bug in v2.0.0b2 | ||
| 422 | using namespace openvdb; | ||
| 423 | |||
| 424 | //std::cerr << "\nTesting testDense2Sparse with " | ||
| 425 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 426 | // << std::endl; | ||
| 427 | |||
| 428 | typedef tools::Dense<float, Layout> DenseT; | ||
| 429 | |||
| 430 | // Test Domain Resolution | ||
| 431 | Int32 sizeX = 8, sizeY = 8, sizeZ = 9; | ||
| 432 | |||
| 433 | // Define a dense grid | ||
| 434 | 4 | DenseT dense(Coord(sizeX, sizeY, sizeZ)); | |
| 435 | 4 | const CoordBBox bboxD = dense.bbox(); | |
| 436 | // std::cerr << "\nDense bbox" << bboxD << std::endl; | ||
| 437 | |||
| 438 | // Verify that the CoordBBox is truely used as [inclusive, inclusive] | ||
| 439 |
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.
|
4 | EXPECT_TRUE(int(dense.valueCount()) == int(sizeX * sizeY * sizeZ)); |
| 440 | |||
| 441 | // Fill the dense grid with constant value 1. | ||
| 442 | 4 | dense.fill(1.0f); | |
| 443 | |||
| 444 | // Create two empty float grids | ||
| 445 |
1/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | FloatGrid::Ptr gridS = FloatGrid::create(0.0f /*background*/); |
| 446 |
1/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | FloatGrid::Ptr gridP = FloatGrid::create(0.0f /*background*/); |
| 447 | |||
| 448 | // Convert in serial and parallel modes | ||
| 449 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyFromDense(dense, *gridS, /*tolerance*/0.0f, /*serial = */ true); |
| 450 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | tools::copyFromDense(dense, *gridP, /*tolerance*/0.0f, /*serial = */ false); |
| 451 | |||
| 452 | float minS, maxS; | ||
| 453 | float minP, maxP; | ||
| 454 | |||
| 455 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | math::MinMax<float> extrema = tools::minMax(gridS->tree()); |
| 456 | 4 | minS = extrema.min(); | |
| 457 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | maxS = extrema.max(); |
| 458 | |||
| 459 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | extrema = tools::minMax(gridP->tree()); |
| 460 | 4 | minP = extrema.min(); | |
| 461 | 4 | maxP = extrema.max(); | |
| 462 | |||
| 463 | const float tolerance = 0.0001f; | ||
| 464 | |||
| 465 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_NEAR(minS, minP, tolerance); |
| 466 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_NEAR(maxS, maxP, tolerance); |
| 467 |
3/18✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 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 | EXPECT_EQ(gridP->activeVoxelCount(), Index64(sizeX * sizeY * sizeZ)); |
| 468 | |||
| 469 | const FloatTree& treeS = gridS->tree(); | ||
| 470 | const FloatTree& treeP = gridP->tree(); | ||
| 471 | |||
| 472 | // Values in Test Domain are correct | ||
| 473 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 2 times.
|
36 | for (Coord ijk(bboxD.min()); ijk[0] <= bboxD.max()[0]; ++ijk[0]) { |
| 474 |
2/2✓ Branch 0 taken 128 times.
✓ Branch 1 taken 16 times.
|
288 | for (ijk[1] = bboxD.min()[1]; ijk[1] <= bboxD.max()[1]; ++ijk[1]) { |
| 475 |
2/2✓ Branch 0 taken 1152 times.
✓ Branch 1 taken 128 times.
|
2560 | for (ijk[2] = bboxD.min()[2]; ijk[2] <= bboxD.max()[2]; ++ijk[2]) { |
| 476 | |||
| 477 | const float expected = bboxD.isInside(ijk) ? 1.f : 0.f; | ||
| 478 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, 1.f, tolerance); |
| 479 | |||
| 480 | const float& vS = treeS.getValue(ijk); | ||
| 481 | const float& vP = treeP.getValue(ijk); | ||
| 482 | |||
| 483 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, vS, tolerance); |
| 484 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, vP, tolerance); |
| 485 | } | ||
| 486 | } | ||
| 487 | } | ||
| 488 | |||
| 489 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | CoordBBox bboxP = gridP->evalActiveVoxelBoundingBox(); |
| 490 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
|
4 | const Index64 voxelCountP = gridP->activeVoxelCount(); |
| 491 | //std::cerr << "\nParallel: bbox=" << bboxP << " voxels=" << voxelCountP << std::endl; | ||
| 492 |
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.
|
4 | EXPECT_TRUE( bboxP == bboxD ); |
| 493 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_EQ( dense.valueCount(), voxelCountP); |
| 494 | |||
| 495 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | CoordBBox bboxS = gridS->evalActiveVoxelBoundingBox(); |
| 496 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
|
4 | const Index64 voxelCountS = gridS->activeVoxelCount(); |
| 497 | //std::cerr << "\nSerial: bbox=" << bboxS << " voxels=" << voxelCountS << std::endl; | ||
| 498 |
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.
|
4 | EXPECT_TRUE( bboxS == bboxD ); |
| 499 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_EQ( dense.valueCount(), voxelCountS); |
| 500 | |||
| 501 | // Topology | ||
| 502 | EXPECT_TRUE( bboxS.isInside(bboxS) ); | ||
| 503 | EXPECT_TRUE( bboxP.isInside(bboxP) ); | ||
| 504 |
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.
|
4 | EXPECT_TRUE( bboxS.isInside(bboxP) ); |
| 505 |
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.
|
4 | EXPECT_TRUE( bboxP.isInside(bboxS) ); |
| 506 | |||
| 507 | /// Check that the two grids agree | ||
| 508 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 2 times.
|
36 | for (Coord ijk(bboxS.min()); ijk[0] <= bboxS.max()[0]; ++ijk[0]) { |
| 509 |
2/2✓ Branch 0 taken 128 times.
✓ Branch 1 taken 16 times.
|
288 | for (ijk[1] = bboxS.min()[1]; ijk[1] <= bboxS.max()[1]; ++ijk[1]) { |
| 510 |
2/2✓ Branch 0 taken 1152 times.
✓ Branch 1 taken 128 times.
|
2560 | for (ijk[2] = bboxS.min()[2]; ijk[2] <= bboxS.max()[2]; ++ijk[2]) { |
| 511 | |||
| 512 | const float& vS = treeS.getValue(ijk); | ||
| 513 | const float& vP = treeP.getValue(ijk); | ||
| 514 | |||
| 515 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(vS, vP, tolerance); |
| 516 | |||
| 517 | // the value we should get based on the original domain | ||
| 518 | const float expected = bboxD.isInside(ijk) ? 1.f : 0.f; | ||
| 519 | |||
| 520 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, vP, tolerance); |
| 521 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, vS, tolerance); |
| 522 | } | ||
| 523 | } | ||
| 524 | } | ||
| 525 | |||
| 526 | |||
| 527 | // Verify the tree topology matches. | ||
| 528 | |||
| 529 |
4/20✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ 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 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
4 | EXPECT_EQ(gridP->activeVoxelCount(), gridS->activeVoxelCount()); |
| 530 |
3/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 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 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
8 | EXPECT_TRUE(gridP->evalActiveVoxelBoundingBox() == gridS->evalActiveVoxelBoundingBox()); |
| 531 |
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.
|
4 | EXPECT_TRUE(treeP.hasSameTopology(treeS) ); |
| 532 | |||
| 533 | 4 | } | |
| 534 | |||
| 535 | template <openvdb::tools::MemoryLayout Layout> | ||
| 536 | void | ||
| 537 | 4 | TestDense::testDense2Sparse2() | |
| 538 | { | ||
| 539 | // The following tests copying a dense grid into a VDB tree with | ||
| 540 | // existing values outside the bbox of the dense grid. | ||
| 541 | |||
| 542 | using namespace openvdb; | ||
| 543 | |||
| 544 | //std::cerr << "\nTesting testDense2Sparse2 with " | ||
| 545 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 546 | // << std::endl; | ||
| 547 | |||
| 548 | typedef tools::Dense<float, Layout> DenseT; | ||
| 549 | |||
| 550 | // Test Domain Resolution | ||
| 551 | const int sizeX = 8, sizeY = 8, sizeZ = 9; | ||
| 552 | const Coord magicVoxel(sizeX, sizeY, sizeZ); | ||
| 553 | |||
| 554 | // Define a dense grid | ||
| 555 | 4 | DenseT dense(Coord(sizeX, sizeY, sizeZ)); | |
| 556 | 4 | const CoordBBox bboxD = dense.bbox(); | |
| 557 | //std::cerr << "\nDense bbox" << bboxD << std::endl; | ||
| 558 | |||
| 559 | // Verify that the CoordBBox is truely used as [inclusive, inclusive] | ||
| 560 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_EQ(sizeX * sizeY * sizeZ, static_cast<int>(dense.valueCount())); |
| 561 | |||
| 562 | // Fill the dense grid with constant value 1. | ||
| 563 | 4 | dense.fill(1.0f); | |
| 564 | |||
| 565 | // Create two empty float grids | ||
| 566 |
1/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | FloatGrid::Ptr gridS = FloatGrid::create(0.0f /*background*/); |
| 567 |
2/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
4 | FloatGrid::Ptr gridP = FloatGrid::create(0.0f /*background*/); |
| 568 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
8 | gridS->tree().setValue(magicVoxel, 5.0f); |
| 569 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | gridP->tree().setValue(magicVoxel, 5.0f); |
| 570 | |||
| 571 | // Convert in serial and parallel modes | ||
| 572 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyFromDense(dense, *gridS, /*tolerance*/0.0f, /*serial = */ true); |
| 573 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | tools::copyFromDense(dense, *gridP, /*tolerance*/0.0f, /*serial = */ false); |
| 574 | |||
| 575 | float minS, maxS; | ||
| 576 | float minP, maxP; | ||
| 577 | |||
| 578 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | math::MinMax<float> extrema = tools::minMax(gridS->tree()); |
| 579 | 4 | minS = extrema.min(); | |
| 580 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | maxS = extrema.max(); |
| 581 | |||
| 582 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | extrema = tools::minMax(gridP->tree()); |
| 583 | 4 | minP = extrema.min(); | |
| 584 | 4 | maxP = extrema.max(); | |
| 585 | |||
| 586 | const float tolerance = 0.0001f; | ||
| 587 | |||
| 588 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_NEAR(1.0f, minP, tolerance); |
| 589 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_NEAR(1.0f, minS, tolerance); |
| 590 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_NEAR(5.0f, maxP, tolerance); |
| 591 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_NEAR(5.0f, maxS, tolerance); |
| 592 |
3/18✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 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 | EXPECT_EQ(gridP->activeVoxelCount(), Index64(1 + sizeX * sizeY * sizeZ)); |
| 593 | |||
| 594 | const FloatTree& treeS = gridS->tree(); | ||
| 595 | const FloatTree& treeP = gridP->tree(); | ||
| 596 | |||
| 597 | // Values in Test Domain are correct | ||
| 598 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 2 times.
|
36 | for (Coord ijk(bboxD.min()); ijk[0] <= bboxD.max()[0]; ++ijk[0]) { |
| 599 |
2/2✓ Branch 0 taken 128 times.
✓ Branch 1 taken 16 times.
|
288 | for (ijk[1] = bboxD.min()[1]; ijk[1] <= bboxD.max()[1]; ++ijk[1]) { |
| 600 |
2/2✓ Branch 0 taken 1152 times.
✓ Branch 1 taken 128 times.
|
2560 | for (ijk[2] = bboxD.min()[2]; ijk[2] <= bboxD.max()[2]; ++ijk[2]) { |
| 601 | |||
| 602 | const float expected = bboxD.isInside(ijk) ? 1.0f : 0.0f; | ||
| 603 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, 1.0f, tolerance); |
| 604 | |||
| 605 | const float& vS = treeS.getValue(ijk); | ||
| 606 | const float& vP = treeP.getValue(ijk); | ||
| 607 | |||
| 608 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, vS, tolerance); |
| 609 |
2/16✓ Branch 1 taken 1152 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1152 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.
|
2304 | EXPECT_NEAR(expected, vP, tolerance); |
| 610 | } | ||
| 611 | } | ||
| 612 | } | ||
| 613 | |||
| 614 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | CoordBBox bboxP = gridP->evalActiveVoxelBoundingBox(); |
| 615 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | const Index64 voxelCountP = gridP->activeVoxelCount(); |
| 616 | //std::cerr << "\nParallel: bbox=" << bboxP << " voxels=" << voxelCountP << std::endl; | ||
| 617 |
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.
|
4 | EXPECT_TRUE( bboxP != bboxD ); |
| 618 |
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.
|
4 | EXPECT_TRUE( bboxP == CoordBBox(Coord(0,0,0), magicVoxel) ); |
| 619 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_EQ( dense.valueCount()+1, voxelCountP); |
| 620 | |||
| 621 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | CoordBBox bboxS = gridS->evalActiveVoxelBoundingBox(); |
| 622 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | const Index64 voxelCountS = gridS->activeVoxelCount(); |
| 623 | //std::cerr << "\nSerial: bbox=" << bboxS << " voxels=" << voxelCountS << std::endl; | ||
| 624 |
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.
|
4 | EXPECT_TRUE( bboxS != bboxD ); |
| 625 |
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.
|
4 | EXPECT_TRUE( bboxS == CoordBBox(Coord(0,0,0), magicVoxel) ); |
| 626 |
2/16✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 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.
|
4 | EXPECT_EQ( dense.valueCount()+1, voxelCountS); |
| 627 | |||
| 628 | // Topology | ||
| 629 | EXPECT_TRUE( bboxS.isInside(bboxS) ); | ||
| 630 | EXPECT_TRUE( bboxP.isInside(bboxP) ); | ||
| 631 |
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.
|
4 | EXPECT_TRUE( bboxS.isInside(bboxP) ); |
| 632 |
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.
|
4 | EXPECT_TRUE( bboxP.isInside(bboxS) ); |
| 633 | |||
| 634 | /// Check that the two grids agree | ||
| 635 |
2/2✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2 times.
|
40 | for (Coord ijk(bboxS.min()); ijk[0] <= bboxS.max()[0]; ++ijk[0]) { |
| 636 |
2/2✓ Branch 0 taken 162 times.
✓ Branch 1 taken 18 times.
|
360 | for (ijk[1] = bboxS.min()[1]; ijk[1] <= bboxS.max()[1]; ++ijk[1]) { |
| 637 |
2/2✓ Branch 0 taken 1620 times.
✓ Branch 1 taken 162 times.
|
3564 | for (ijk[2] = bboxS.min()[2]; ijk[2] <= bboxS.max()[2]; ++ijk[2]) { |
| 638 | |||
| 639 | const float& vS = treeS.getValue(ijk); | ||
| 640 | const float& vP = treeP.getValue(ijk); | ||
| 641 | |||
| 642 |
2/16✓ Branch 1 taken 1620 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1620 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.
|
3240 | EXPECT_NEAR(vS, vP, tolerance); |
| 643 | |||
| 644 | // the value we should get based on the original domain | ||
| 645 | const float expected = bboxD.isInside(ijk) ? 1.0f | ||
| 646 | : ijk == magicVoxel ? 5.0f : 0.0f; | ||
| 647 | |||
| 648 |
2/16✓ Branch 1 taken 1620 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1620 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.
|
3240 | EXPECT_NEAR(expected, vP, tolerance); |
| 649 |
2/16✓ Branch 1 taken 1620 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1620 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.
|
3240 | EXPECT_NEAR(expected, vS, tolerance); |
| 650 | } | ||
| 651 | } | ||
| 652 | } | ||
| 653 | |||
| 654 | // Verify the tree topology matches. | ||
| 655 | |||
| 656 |
4/20✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ 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 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
4 | EXPECT_EQ(gridP->activeVoxelCount(), gridS->activeVoxelCount()); |
| 657 |
3/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 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 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
8 | EXPECT_TRUE(gridP->evalActiveVoxelBoundingBox() == gridS->evalActiveVoxelBoundingBox()); |
| 658 |
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.
|
4 | EXPECT_TRUE(treeP.hasSameTopology(treeS) ); |
| 659 | |||
| 660 | 4 | } | |
| 661 | |||
| 662 | template <openvdb::tools::MemoryLayout Layout> | ||
| 663 | void | ||
| 664 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
4 | TestDense::testInvalidBBox() |
| 665 | { | ||
| 666 | using namespace openvdb; | ||
| 667 | |||
| 668 | //std::cerr << "\nTesting testInvalidBBox with " | ||
| 669 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 670 | // << std::endl; | ||
| 671 | |||
| 672 | typedef tools::Dense<float, Layout> DenseT; | ||
| 673 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
4 | const CoordBBox badBBox(Coord(1, 1, 1), Coord(-1, 2, 2)); |
| 674 | |||
| 675 |
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.
|
4 | EXPECT_TRUE(badBBox.empty()); |
| 676 |
3/14✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ 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 23 not taken.
✗ Branch 24 not taken.
|
8 | EXPECT_THROW(DenseT dense(badBBox), ValueError); |
| 677 | 4 | } | |
| 678 | |||
| 679 | template <openvdb::tools::MemoryLayout Layout> | ||
| 680 | void | ||
| 681 | 4 | TestDense::testDense2Sparse2Dense() | |
| 682 | { | ||
| 683 | using namespace openvdb; | ||
| 684 | |||
| 685 | //std::cerr << "\nTesting testDense2Sparse2Dense with " | ||
| 686 | // << (Layout == tools::LayoutXYZ ? "XYZ" : "ZYX") << " memory layout" | ||
| 687 | // << std::endl; | ||
| 688 | |||
| 689 | typedef tools::Dense<float, Layout> DenseT; | ||
| 690 | |||
| 691 | 4 | const CoordBBox bboxBig(Coord(-12, 7, -32), Coord(12, 14, -15)); | |
| 692 | 4 | const CoordBBox bboxSmall(Coord(-10, 8, -31), Coord(10, 12, -20)); | |
| 693 | |||
| 694 | |||
| 695 | // A larger bbox | ||
| 696 | 4 | CoordBBox bboxBigger = bboxBig; | |
| 697 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | bboxBigger.expand(Coord(10)); |
| 698 | |||
| 699 | |||
| 700 | // Small is in big | ||
| 701 |
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.
|
4 | EXPECT_TRUE(bboxBig.isInside(bboxSmall)); |
| 702 | |||
| 703 | // Big is in Bigger | ||
| 704 |
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.
|
4 | EXPECT_TRUE(bboxBigger.isInside(bboxBig)); |
| 705 | |||
| 706 | // Construct a small dense grid | ||
| 707 | 4 | DenseT denseSmall(bboxSmall, 0.f); | |
| 708 | { | ||
| 709 | // insert non-const values | ||
| 710 | 4 | const int n = static_cast<int>(denseSmall.valueCount()); | |
| 711 | float* d = denseSmall.data(); | ||
| 712 |
2/2✓ Branch 0 taken 2520 times.
✓ Branch 1 taken 2 times.
|
5044 | for (int i = 0; i < n; ++i) { d[i] = static_cast<float>(i); } |
| 713 | } | ||
| 714 | // Construct large dense grid | ||
| 715 |
1/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4 | DenseT denseBig(bboxBig, 0.f); |
| 716 | { | ||
| 717 | // insert non-const values | ||
| 718 | 4 | const int n = static_cast<int>(denseBig.valueCount()); | |
| 719 | float* d = denseBig.data(); | ||
| 720 |
2/2✓ Branch 0 taken 7200 times.
✓ Branch 1 taken 2 times.
|
14404 | for (int i = 0; i < n; ++i) { d[i] = static_cast<float>(i); } |
| 721 | } | ||
| 722 | |||
| 723 | // Make a sparse grid to copy this data into | ||
| 724 |
1/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
4 | FloatGrid::Ptr grid = FloatGrid::create(3.3f /*background*/); |
| 725 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyFromDense(denseBig, *grid, /*tolerance*/0.0f, /*serial = */ true); |
| 726 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | tools::copyFromDense(denseSmall, *grid, /*tolerance*/0.0f, /*serial = */ false); |
| 727 | |||
| 728 | const FloatTree& tree = grid->tree(); | ||
| 729 | // | ||
| 730 |
3/20✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ 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 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
4 | EXPECT_EQ(bboxBig.volume(), grid->activeVoxelCount()); |
| 731 | |||
| 732 | // iterate over the Bigger | ||
| 733 |
2/2✓ Branch 0 taken 50 times.
✓ Branch 1 taken 2 times.
|
104 | for (Coord ijk(bboxBigger.min()); ijk[0] <= bboxBigger.max()[0]; ++ijk[0]) { |
| 734 |
2/2✓ Branch 0 taken 400 times.
✓ Branch 1 taken 50 times.
|
900 | for (ijk[1] = bboxBigger.min()[1]; ijk[1] <= bboxBigger.max()[1]; ++ijk[1]) { |
| 735 |
2/2✓ Branch 0 taken 17200 times.
✓ Branch 1 taken 400 times.
|
35200 | for (ijk[2] = bboxBigger.min()[2]; ijk[2] <= bboxBigger.max()[2]; ++ijk[2]) { |
| 736 | |||
| 737 | float expected = 3.3f; | ||
| 738 | if (bboxSmall.isInside(ijk)) { | ||
| 739 | 5040 | expected = denseSmall.getValue(ijk); | |
| 740 | } else if (bboxBig.isInside(ijk)) { | ||
| 741 | 9360 | expected = denseBig.getValue(ijk); | |
| 742 | } | ||
| 743 | |||
| 744 | const float& value = tree.getValue(ijk); | ||
| 745 | |||
| 746 |
2/16✓ Branch 1 taken 17200 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 17200 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.
|
34400 | EXPECT_NEAR(expected, value, 0.0001); |
| 747 | |||
| 748 | } | ||
| 749 | } | ||
| 750 | } | ||
| 751 | |||
| 752 | // Convert to Dense in small bbox | ||
| 753 | { | ||
| 754 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | DenseT denseSmall2(bboxSmall); |
| 755 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyToDense(*grid, denseSmall2, true /* serial */); |
| 756 | |||
| 757 | // iterate over the Bigger | ||
| 758 |
2/2✓ Branch 0 taken 42 times.
✓ Branch 1 taken 2 times.
|
88 | for (Coord ijk(bboxSmall.min()); ijk[0] <= bboxSmall.max()[0]; ++ijk[0]) { |
| 759 |
2/2✓ Branch 0 taken 210 times.
✓ Branch 1 taken 42 times.
|
504 | for (ijk[1] = bboxSmall.min()[1]; ijk[1] <= bboxSmall.max()[1]; ++ijk[1]) { |
| 760 |
2/2✓ Branch 0 taken 2520 times.
✓ Branch 1 taken 210 times.
|
5460 | for (ijk[2] = bboxSmall.min()[2]; ijk[2] <= bboxSmall.max()[2]; ++ijk[2]) { |
| 761 | |||
| 762 | const float& expected = denseSmall.getValue(ijk); | ||
| 763 | const float& value = denseSmall2.getValue(ijk); | ||
| 764 |
2/16✓ Branch 1 taken 2520 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2520 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.
|
5040 | EXPECT_NEAR(expected, value, 0.0001); |
| 765 | } | ||
| 766 | } | ||
| 767 | } | ||
| 768 | } | ||
| 769 | // Convert to Dense in large bbox | ||
| 770 | { | ||
| 771 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | DenseT denseBig2(bboxBig); |
| 772 | |||
| 773 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | tools::copyToDense(*grid, denseBig2, false /* serial */); |
| 774 | // iterate over the Bigger | ||
| 775 |
2/2✓ Branch 0 taken 50 times.
✓ Branch 1 taken 2 times.
|
104 | for (Coord ijk(bboxBig.min()); ijk[0] <= bboxBig.max()[0]; ++ijk[0]) { |
| 776 |
2/2✓ Branch 0 taken 400 times.
✓ Branch 1 taken 50 times.
|
900 | for (ijk[1] = bboxBig.min()[1]; ijk[1] <= bboxBig.max()[1]; ++ijk[1]) { |
| 777 |
2/2✓ Branch 0 taken 7200 times.
✓ Branch 1 taken 400 times.
|
15200 | for (ijk[2] = bboxBig.min()[2]; ijk[2] <= bboxBig.max()[2]; ++ijk[2]) { |
| 778 | |||
| 779 | float expected = -1.f; // should never be this | ||
| 780 | if (bboxSmall.isInside(ijk)) { | ||
| 781 | 5040 | expected = denseSmall.getValue(ijk); | |
| 782 | } else if (bboxBig.isInside(ijk)) { | ||
| 783 | 9360 | expected = denseBig.getValue(ijk); | |
| 784 | } | ||
| 785 | const float& value = denseBig2.getValue(ijk); | ||
| 786 |
2/16✓ Branch 1 taken 7200 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 7200 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.
|
14400 | EXPECT_NEAR(expected, value, 0.0001); |
| 787 | } | ||
| 788 | } | ||
| 789 | } | ||
| 790 | } | ||
| 791 | 4 | } | |
| 792 | |||
| 793 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testCopyZYX) { this->testCopy<openvdb::tools::LayoutZYX>(); } |
| 794 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testCopyXYZ) { this->testCopy<openvdb::tools::LayoutXYZ>(); } |
| 795 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testCopyBoolZYX) { this->testCopyBool<openvdb::tools::LayoutZYX>(); } |
| 796 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testCopyBoolXYZ) { this->testCopyBool<openvdb::tools::LayoutXYZ>(); } |
| 797 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testCopyFromDenseWithOffsetZYX) { this->testCopyFromDenseWithOffset<openvdb::tools::LayoutZYX>(); } |
| 798 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testCopyFromDenseWithOffsetXYZ) { this->testCopyFromDenseWithOffset<openvdb::tools::LayoutXYZ>(); } |
| 799 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDense2SparseZYX) { this->testDense2Sparse<openvdb::tools::LayoutZYX>(); } |
| 800 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDense2SparseXYZ) { this->testDense2Sparse<openvdb::tools::LayoutXYZ>(); } |
| 801 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDense2Sparse2ZYX) { this->testDense2Sparse2<openvdb::tools::LayoutZYX>(); } |
| 802 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDense2Sparse2XYZ) { this->testDense2Sparse2<openvdb::tools::LayoutXYZ>(); } |
| 803 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testInvalidBBoxZYX) { this->testInvalidBBox<openvdb::tools::LayoutZYX>(); } |
| 804 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testInvalidBBoxXYZ) { this->testInvalidBBox<openvdb::tools::LayoutXYZ>(); } |
| 805 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDense2Sparse2DenseZYX) { this->testDense2Sparse2Dense<openvdb::tools::LayoutZYX>(); } |
| 806 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestDense, testDense2Sparse2DenseXYZ) { this->testDense2Sparse2Dense<openvdb::tools::LayoutXYZ>(); } |
| 807 | |||
| 808 | #undef BENCHMARK_TEST | ||
| 809 |