| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright Contributors to the OpenVDB Project | ||
| 2 | // SPDX-License-Identifier: MPL-2.0 | ||
| 3 | |||
| 4 | #include <openvdb/points/PointGroup.h> | ||
| 5 | #include <openvdb/points/PointCount.h> | ||
| 6 | #include <openvdb/points/PointConversion.h> | ||
| 7 | #include <openvdb/points/PointDelete.h> | ||
| 8 | |||
| 9 | #include <gtest/gtest.h> | ||
| 10 | |||
| 11 | #include <string> | ||
| 12 | #include <vector> | ||
| 13 | |||
| 14 | #ifdef _WIN32 | ||
| 15 | #include <windows.h> | ||
| 16 | #endif | ||
| 17 | |||
| 18 | using namespace openvdb::points; | ||
| 19 | |||
| 20 | 1 | class TestPointDelete: public ::testing::Test | |
| 21 | { | ||
| 22 | public: | ||
| 23 | 1 | void SetUp() override { openvdb::initialize(); } | |
| 24 | 1 | void TearDown() override { openvdb::uninitialize(); } | |
| 25 | }; // class TestPointDelete | ||
| 26 | |||
| 27 | |||
| 28 | //////////////////////////////////////// | ||
| 29 | |||
| 30 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestPointDelete, testDeleteFromGroups) |
| 31 | { | ||
| 32 | using openvdb::math::Vec3s; | ||
| 33 | using openvdb::tools::PointIndexGrid; | ||
| 34 | using openvdb::Index64; | ||
| 35 | |||
| 36 | const float voxelSize(1.0); | ||
| 37 | 1 | openvdb::math::Transform::Ptr transform(openvdb::math::Transform::createLinearTransform(voxelSize)); | |
| 38 | |||
| 39 | const std::vector<Vec3s> positions6Points = { | ||
| 40 | {1, 1, 1}, | ||
| 41 | {1, 2, 1}, | ||
| 42 | {2, 1, 1}, | ||
| 43 | {2, 2, 1}, | ||
| 44 | {100, 100, 100}, | ||
| 45 | {100, 101, 100} | ||
| 46 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | }; |
| 47 | const PointAttributeVector<Vec3s> pointList6Points(positions6Points); | ||
| 48 | |||
| 49 | { | ||
| 50 | // delete from a tree with 2 leaves, checking that group membership is updated as | ||
| 51 | // expected | ||
| 52 | |||
| 53 | PointIndexGrid::Ptr pointIndexGrid = | ||
| 54 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | openvdb::tools::createPointIndexGrid<PointIndexGrid>(pointList6Points, *transform); |
| 55 | |||
| 56 | PointDataGrid::Ptr grid = | ||
| 57 | createPointDataGrid<NullCodec, PointDataGrid>(*pointIndexGrid, pointList6Points, | ||
| 58 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | *transform); |
| 59 | PointDataTree& tree = grid->tree(); | ||
| 60 | |||
| 61 | // first test will delete 3 groups, with the third one empty. | ||
| 62 | |||
| 63 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test1"); |
| 64 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test2"); |
| 65 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test3"); |
| 66 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test4"); |
| 67 | |||
| 68 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(pointCount(tree), Index64(6)); |
| 69 | |||
| 70 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | std::vector<short> membership1{1, 0, 0, 0, 0, 1}; |
| 71 | |||
| 72 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership1, "test1"); |
| 73 | |||
| 74 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | std::vector<short> membership2{0, 0, 1, 1, 0, 1}; |
| 75 | |||
| 76 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership2, "test2"); |
| 77 | |||
| 78 |
4/10✓ 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 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
2 | std::vector<std::string> groupsToDelete{"test1", "test2", "test3"}; |
| 79 | |||
| 80 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | deleteFromGroups(tree, groupsToDelete); |
| 81 | |||
| 82 | // 4 points should have been deleted, so only 2 remain | ||
| 83 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(pointCount(tree), Index64(2)); |
| 84 | |||
| 85 | // check that first three groups are deleted but the last is not | ||
| 86 | |||
| 87 | const PointDataTree::LeafCIter leafIterAfterDeletion = tree.cbeginLeaf(); | ||
| 88 | |||
| 89 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | AttributeSet attributeSetAfterDeletion = leafIterAfterDeletion->attributeSet(); |
| 90 | AttributeSet::Descriptor& descriptor = attributeSetAfterDeletion.descriptor(); | ||
| 91 | |||
| 92 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 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 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
1 | EXPECT_TRUE(!descriptor.hasGroup("test1")); |
| 93 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 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 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
1 | EXPECT_TRUE(!descriptor.hasGroup("test2")); |
| 94 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 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 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
1 | EXPECT_TRUE(!descriptor.hasGroup("test3")); |
| 95 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
2 | EXPECT_TRUE(descriptor.hasGroup("test4")); |
| 96 | } | ||
| 97 | |||
| 98 | { | ||
| 99 | // check deletion from a single leaf tree and that attribute values are preserved | ||
| 100 | // correctly after deletion | ||
| 101 | |||
| 102 | std::vector<Vec3s> positions4Points = { | ||
| 103 | {1, 1, 1}, | ||
| 104 | {1, 2, 1}, | ||
| 105 | {2, 1, 1}, | ||
| 106 | {2, 2, 1}, | ||
| 107 |
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.
|
1 | }; |
| 108 | |||
| 109 | const PointAttributeVector<Vec3s> pointList4Points(positions4Points); | ||
| 110 | |||
| 111 | PointIndexGrid::Ptr pointIndexGrid = | ||
| 112 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | openvdb::tools::createPointIndexGrid<PointIndexGrid>(pointList4Points, *transform); |
| 113 | |||
| 114 | PointDataGrid::Ptr grid = | ||
| 115 | createPointDataGrid<NullCodec, PointDataGrid>(*pointIndexGrid, | ||
| 116 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | pointList4Points, *transform); |
| 117 | PointDataTree& tree = grid->tree(); | ||
| 118 | |||
| 119 |
3/6✓ 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.
|
2 | appendGroup(tree, "test"); |
| 120 |
3/6✓ 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.
|
2 | appendAttribute(tree, "testAttribute", TypedAttributeArray<int32_t>::attributeType()); |
| 121 | |||
| 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(tree.beginLeaf()); |
| 123 | |||
| 124 | const PointDataTree::LeafIter leafIter = tree.beginLeaf(); | ||
| 125 | |||
| 126 | AttributeWriteHandle<int> | ||
| 127 |
3/6✓ 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.
|
2 | testAttributeWriteHandle(leafIter->attributeArray("testAttribute")); |
| 128 | |||
| 129 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
5 | for(int i = 0; i < 4; i++) { |
| 130 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | testAttributeWriteHandle.set(i,i+1); |
| 131 | } | ||
| 132 | |||
| 133 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | std::vector<short> membership{0, 1, 1, 0}; |
| 134 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership, "test"); |
| 135 | |||
| 136 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | deleteFromGroup(tree, "test"); |
| 137 | |||
| 138 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
|
1 | EXPECT_EQ(pointCount(tree), Index64(2)); |
| 139 | |||
| 140 | const PointDataTree::LeafCIter leafIterAfterDeletion = tree.cbeginLeaf(); | ||
| 141 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const AttributeSet attributeSetAfterDeletion = leafIterAfterDeletion->attributeSet(); |
| 142 | const AttributeSet::Descriptor& descriptor = attributeSetAfterDeletion.descriptor(); | ||
| 143 | |||
| 144 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 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 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
1 | EXPECT_TRUE(descriptor.find("testAttribute") != AttributeSet::INVALID_POS); |
| 145 | |||
| 146 |
3/6✓ 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.
|
2 | AttributeHandle<int> testAttributeHandle(*attributeSetAfterDeletion.get("testAttribute")); |
| 147 | |||
| 148 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(1, testAttributeHandle.get(0)); |
| 149 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(4, testAttributeHandle.get(1)); |
| 150 | } | ||
| 151 | |||
| 152 | { | ||
| 153 | // test the invert flag using data similar to that used in the first test | ||
| 154 | |||
| 155 | PointIndexGrid::Ptr pointIndexGrid = | ||
| 156 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | openvdb::tools::createPointIndexGrid<PointIndexGrid>(pointList6Points, *transform); |
| 157 | PointDataGrid::Ptr grid = | ||
| 158 | createPointDataGrid<NullCodec, PointDataGrid>(*pointIndexGrid, pointList6Points, | ||
| 159 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | *transform); |
| 160 | PointDataTree& tree = grid->tree(); | ||
| 161 | |||
| 162 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test1"); |
| 163 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test2"); |
| 164 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test3"); |
| 165 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test4"); |
| 166 | |||
| 167 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(pointCount(tree), Index64(6)); |
| 168 | |||
| 169 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | std::vector<short> membership1{1, 0, 1, 1, 0, 1}; |
| 170 | |||
| 171 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership1, "test1"); |
| 172 | |||
| 173 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | std::vector<short> membership2{0, 0, 1, 1, 0, 1}; |
| 174 | |||
| 175 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership2, "test2"); |
| 176 | |||
| 177 |
3/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
2 | std::vector<std::string> groupsToDelete{"test1", "test3"}; |
| 178 | |||
| 179 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | deleteFromGroups(tree, groupsToDelete, /*invert=*/ true); |
| 180 | |||
| 181 | const PointDataTree::LeafCIter leafIterAfterDeletion = tree.cbeginLeaf(); | ||
| 182 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const AttributeSet attributeSetAfterDeletion = leafIterAfterDeletion->attributeSet(); |
| 183 | const AttributeSet::Descriptor& descriptor = attributeSetAfterDeletion.descriptor(); | ||
| 184 | |||
| 185 | // no groups should be dropped when invert = true | ||
| 186 |
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(static_cast<size_t>(descriptor.groupMap().size()), |
| 187 | static_cast<size_t>(4)); | ||
| 188 | |||
| 189 | // 4 points should remain since test1 and test3 have 4 members between then | ||
| 190 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(static_cast<size_t>(pointCount(tree)), |
| 191 | static_cast<size_t>(4)); | ||
| 192 | } | ||
| 193 | |||
| 194 | { | ||
| 195 | // similar to first test, but don't drop groups | ||
| 196 | |||
| 197 | PointIndexGrid::Ptr pointIndexGrid = | ||
| 198 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | openvdb::tools::createPointIndexGrid<PointIndexGrid>(pointList6Points, *transform); |
| 199 | |||
| 200 | PointDataGrid::Ptr grid = | ||
| 201 | createPointDataGrid<NullCodec, PointDataGrid>(*pointIndexGrid, pointList6Points, | ||
| 202 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | *transform); |
| 203 | PointDataTree& tree = grid->tree(); | ||
| 204 | |||
| 205 | // first test will delete 3 groups, with the third one empty. | ||
| 206 | |||
| 207 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test1"); |
| 208 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test2"); |
| 209 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test3"); |
| 210 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | appendGroup(tree, "test4"); |
| 211 | |||
| 212 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | std::vector<short> membership1{1, 0, 0, 0, 0, 1}; |
| 213 | |||
| 214 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership1, "test1"); |
| 215 | |||
| 216 |
1/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1 | std::vector<short> membership2{0, 0, 1, 1, 0, 1}; |
| 217 | |||
| 218 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | setGroup(tree, pointIndexGrid->tree(), membership2, "test2"); |
| 219 | |||
| 220 |
4/10✓ 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 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
2 | std::vector<std::string> groupsToDelete{"test1", "test2", "test3"}; |
| 221 | |||
| 222 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | deleteFromGroups(tree, groupsToDelete, /*invert=*/ false, /*drop=*/ false); |
| 223 | |||
| 224 | // 4 points should have been deleted, so only 2 remain | ||
| 225 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
1 | EXPECT_EQ(pointCount(tree), Index64(2)); |
| 226 | |||
| 227 | // check that first three groups are deleted but the last is not | ||
| 228 | |||
| 229 | const PointDataTree::LeafCIter leafIterAfterDeletion = tree.cbeginLeaf(); | ||
| 230 | |||
| 231 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | AttributeSet attributeSetAfterDeletion = leafIterAfterDeletion->attributeSet(); |
| 232 | AttributeSet::Descriptor& descriptor = attributeSetAfterDeletion.descriptor(); | ||
| 233 | |||
| 234 | // all group should still be present | ||
| 235 | |||
| 236 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
2 | EXPECT_TRUE(descriptor.hasGroup("test1")); |
| 237 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
2 | EXPECT_TRUE(descriptor.hasGroup("test2")); |
| 238 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
2 | EXPECT_TRUE(descriptor.hasGroup("test3")); |
| 239 |
3/20✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 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.
|
2 | EXPECT_TRUE(descriptor.hasGroup("test4")); |
| 240 | } | ||
| 241 | |||
| 242 | 1 | } | |
| 243 |