Add guard blocks and checks to SymbolInstance (#2744)

This commit is contained in:
Tim Sylvester
2024-08-26 17:06:11 -07:00
committed by GitHub
parent db95ba147a
commit dd104ded89
17 changed files with 629 additions and 271 deletions

View File

@@ -86,8 +86,8 @@ TEST(CrossTileSymbolLayerIndex, addBucket) {
index.addBucket(mainID, mat4{}, mainBucket);
// Assigned new IDs
ASSERT_EQ(mainBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(mainBucket.symbolInstances.at(1).crossTileID, 2u);
ASSERT_EQ(mainBucket.symbolInstances.at(0).getCrossTileID(), 1u);
ASSERT_EQ(mainBucket.symbolInstances.at(1).getCrossTileID(), 2u);
OverscaledTileID childID(7, 0, 7, 16, 16);
std::vector<SymbolInstance> childInstances;
@@ -114,13 +114,13 @@ TEST(CrossTileSymbolLayerIndex, addBucket) {
index.addBucket(childID, mat4{}, childBucket);
// matched parent tile
ASSERT_EQ(childBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(childBucket.symbolInstances.at(0).getCrossTileID(), 1u);
// does not match because of different key
ASSERT_EQ(childBucket.symbolInstances.at(1).crossTileID, 3u);
ASSERT_EQ(childBucket.symbolInstances.at(1).getCrossTileID(), 3u);
// does not match because of different location
ASSERT_EQ(childBucket.symbolInstances.at(2).crossTileID, 4u);
ASSERT_EQ(childBucket.symbolInstances.at(2).getCrossTileID(), 4u);
// matches with a slightly different location
ASSERT_EQ(childBucket.symbolInstances.at(3).crossTileID, 2u);
ASSERT_EQ(childBucket.symbolInstances.at(3).getCrossTileID(), 2u);
OverscaledTileID parentID(5, 0, 5, 4, 4);
std::vector<SymbolInstance> parentInstances;
@@ -144,7 +144,7 @@ TEST(CrossTileSymbolLayerIndex, addBucket) {
index.addBucket(parentID, mat4{}, parentBucket);
// matched child tile
ASSERT_EQ(parentBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(parentBucket.symbolInstances.at(0).getCrossTileID(), 1u);
std::unordered_set<uint32_t> currentIDs;
currentIDs.insert(mainBucket.bucketInstanceId);
@@ -174,9 +174,9 @@ TEST(CrossTileSymbolLayerIndex, addBucket) {
index.addBucket(grandchildID, mat4{}, grandchildBucket);
// Matches the symbol in `mainBucket`
ASSERT_EQ(grandchildBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(grandchildBucket.symbolInstances.at(0).getCrossTileID(), 1u);
// Does not match the previous value for Windsor because that tile was removed
ASSERT_EQ(grandchildBucket.symbolInstances.at(1).crossTileID, 5u);
ASSERT_EQ(grandchildBucket.symbolInstances.at(1).getCrossTileID(), 5u);
}
TEST(CrossTileSymbolLayerIndex, resetIDs) {
@@ -232,7 +232,7 @@ TEST(CrossTileSymbolLayerIndex, resetIDs) {
// assigns a new id
index.addBucket(mainID, mat4{}, mainBucket);
ASSERT_EQ(mainBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(mainBucket.symbolInstances.at(0).getCrossTileID(), 1u);
// removes the tile
std::unordered_set<uint32_t> currentIDs;
@@ -240,11 +240,11 @@ TEST(CrossTileSymbolLayerIndex, resetIDs) {
// assigns a new id
index.addBucket(childID, mat4{}, childBucket);
ASSERT_EQ(childBucket.symbolInstances.at(0).crossTileID, 2u);
ASSERT_EQ(childBucket.symbolInstances.at(0).getCrossTileID(), 2u);
// overwrites the old id to match the already-added tile
index.addBucket(mainID, mat4{}, mainBucket);
ASSERT_EQ(mainBucket.symbolInstances.at(0).crossTileID, 2u);
ASSERT_EQ(mainBucket.symbolInstances.at(0).getCrossTileID(), 2u);
}
TEST(CrossTileSymbolLayerIndex, noDuplicatesWithinZoomLevel) {
@@ -303,16 +303,16 @@ TEST(CrossTileSymbolLayerIndex, noDuplicatesWithinZoomLevel) {
// assigns new ids
index.addBucket(mainID, mat4{}, mainBucket);
ASSERT_EQ(mainBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(mainBucket.symbolInstances.at(1).crossTileID, 2u);
ASSERT_EQ(mainBucket.symbolInstances.at(0).getCrossTileID(), 1u);
ASSERT_EQ(mainBucket.symbolInstances.at(1).getCrossTileID(), 2u);
// copies parent ids without duplicate ids in this tile
index.addBucket(childID, mat4{}, childBucket);
ASSERT_EQ(childBucket.symbolInstances.at(0).crossTileID,
ASSERT_EQ(childBucket.symbolInstances.at(0).getCrossTileID(),
1u); // A' copies from A
ASSERT_EQ(childBucket.symbolInstances.at(1).crossTileID,
ASSERT_EQ(childBucket.symbolInstances.at(1).getCrossTileID(),
2u); // B' copies from B
ASSERT_EQ(childBucket.symbolInstances.at(2).crossTileID,
ASSERT_EQ(childBucket.symbolInstances.at(2).getCrossTileID(),
3u); // C' gets new ID
}
@@ -371,16 +371,16 @@ TEST(CrossTileSymbolLayerIndex, bucketReplacement) {
// assigns new ids
index.addBucket(tileID, mat4{}, firstBucket);
ASSERT_EQ(firstBucket.symbolInstances.at(0).crossTileID, 1u);
ASSERT_EQ(firstBucket.symbolInstances.at(1).crossTileID, 2u);
ASSERT_EQ(firstBucket.symbolInstances.at(0).getCrossTileID(), 1u);
ASSERT_EQ(firstBucket.symbolInstances.at(1).getCrossTileID(), 2u);
// copies parent ids without duplicate ids in this tile
index.addBucket(tileID, mat4{}, secondBucket);
ASSERT_EQ(secondBucket.symbolInstances.at(0).crossTileID,
ASSERT_EQ(secondBucket.symbolInstances.at(0).getCrossTileID(),
1u); // A' copies from A
ASSERT_EQ(secondBucket.symbolInstances.at(1).crossTileID,
ASSERT_EQ(secondBucket.symbolInstances.at(1).getCrossTileID(),
2u); // B' copies from B
ASSERT_EQ(secondBucket.symbolInstances.at(2).crossTileID,
ASSERT_EQ(secondBucket.symbolInstances.at(2).getCrossTileID(),
3u); // C' gets new ID
}
@@ -429,12 +429,12 @@ TEST(CrossTileSymbolLayerIndex, offscreenSymbols) {
populatePosMatrix(posMatrix, tileId, 60.0, 25.0, 7.0);
index.addBucket(tileId, posMatrix, symbolBucket);
EXPECT_EQ(symbolBucket.symbolInstances.at(0).crossTileID, SymbolInstance::invalidCrossTileID());
EXPECT_EQ(symbolBucket.symbolInstances.at(1).crossTileID, SymbolInstance::invalidCrossTileID());
EXPECT_EQ(symbolBucket.symbolInstances.at(0).getCrossTileID(), SymbolInstance::invalidCrossTileID);
EXPECT_EQ(symbolBucket.symbolInstances.at(1).getCrossTileID(), SymbolInstance::invalidCrossTileID);
populatePosMatrix(posMatrix, tileId, 39.0, -76.0, 7.0);
index.addBucket(tileId, posMatrix, symbolBucket);
EXPECT_EQ(symbolBucket.symbolInstances.at(0).crossTileID, 1u);
EXPECT_EQ(symbolBucket.symbolInstances.at(1).crossTileID, 2u);
EXPECT_EQ(symbolBucket.symbolInstances.at(0).getCrossTileID(), 1u);
EXPECT_EQ(symbolBucket.symbolInstances.at(1).getCrossTileID(), 2u);
}