Skip to content

Commit b7fc5b2

Browse files
Copilotakleshchev
andcommitted
Extend sendMapBlockRequest stub and add test<4> for request-size assertions
Co-authored-by: akleshchev <117672381+akleshchev@users.noreply.github.com> Agent-Logs-Url: https://github.com/secondlife/viewer/sessions/fb89a385-185d-4179-a3a4-39a45a713f4f
1 parent 0084a93 commit b7fc5b2

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

indra/newview/tests/llworldmap_test.cpp

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,22 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(const LLUUID&,
5454
LLGLint, LLGLenum, LLHost ) { return NULL; }
5555

5656
// Stub related map calls
57+
58+
// Records each sendMapBlockRequest call for inspection in tests
59+
struct MapBlockRequest
60+
{
61+
U16 min_x, min_y, max_x, max_y;
62+
};
63+
static std::vector<MapBlockRequest> gMapBlockRequests;
64+
5765
LLWorldMapMessage::LLWorldMapMessage() { }
5866
LLWorldMapMessage::~LLWorldMapMessage() { }
5967
void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { }
60-
void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { }
68+
void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
69+
{
70+
MapBlockRequest req = { min_x, min_y, max_x, max_y };
71+
gMapBlockRequests.push_back(req);
72+
}
6173

6274
LLWorldMipmap::LLWorldMipmap() { }
6375
LLWorldMipmap::~LLWorldMipmap() { }
@@ -518,4 +530,63 @@ namespace tut
518530
mWorld->cancelTracking();
519531
ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false);
520532
}
533+
// Test updateRegions() request grouping, size limits, and bounds
534+
template<> template<>
535+
void worldmap_object_t::test<4>()
536+
{
537+
// Test 27 : 1x1 block (4x4 = 16 regions) - single small request within bounds
538+
mWorld->reset();
539+
gMapBlockRequests.clear();
540+
mWorld->updateRegions(0, 0, 3, 3);
541+
ensure("updateRegions 1x1 block: expected 1 request", gMapBlockRequests.size() == 1);
542+
{
543+
const MapBlockRequest& req = gMapBlockRequests[0];
544+
ensure("updateRegions 1x1 block: min_x", req.min_x == 0);
545+
ensure("updateRegions 1x1 block: min_y", req.min_y == 0);
546+
ensure("updateRegions 1x1 block: max_x", req.max_x == 3);
547+
ensure("updateRegions 1x1 block: max_y", req.max_y == 3);
548+
S32 regions = (req.max_x - req.min_x + 1) * (req.max_y - req.min_y + 1);
549+
ensure("updateRegions 1x1 block: must not exceed 64 regions", regions <= 64);
550+
}
551+
552+
// Test 28 : 2x2 blocks (8x8 = 64 regions) - single request at the 64-region limit
553+
mWorld->reset();
554+
gMapBlockRequests.clear();
555+
mWorld->updateRegions(0, 0, 7, 7);
556+
ensure("updateRegions 2x2 blocks: expected 1 request", gMapBlockRequests.size() == 1);
557+
{
558+
const MapBlockRequest& req = gMapBlockRequests[0];
559+
ensure("updateRegions 2x2 blocks: min_x", req.min_x == 0);
560+
ensure("updateRegions 2x2 blocks: min_y", req.min_y == 0);
561+
ensure("updateRegions 2x2 blocks: max_x", req.max_x == 7);
562+
ensure("updateRegions 2x2 blocks: max_y", req.max_y == 7);
563+
S32 regions = (req.max_x - req.min_x + 1) * (req.max_y - req.min_y + 1);
564+
ensure("updateRegions 2x2 blocks: must not exceed 64 regions", regions <= 64);
565+
}
566+
567+
// Test 29 : 4x4 blocks (16x16 = 256 total regions) - must split into multiple requests
568+
// each spanning a 4x1 strip (64 regions), none exceeding the server limit
569+
mWorld->reset();
570+
gMapBlockRequests.clear();
571+
mWorld->updateRegions(0, 0, 15, 15);
572+
ensure("updateRegions 4x4 blocks: expected 4 requests", gMapBlockRequests.size() == 4);
573+
for (size_t i = 0; i < gMapBlockRequests.size(); ++i)
574+
{
575+
const MapBlockRequest& req = gMapBlockRequests[i];
576+
S32 regions = (req.max_x - req.min_x + 1) * (req.max_y - req.min_y + 1);
577+
ensure("updateRegions 4x4 blocks: each request must not exceed 64 regions", regions <= 64);
578+
// Requests must stay within the requested area (0..15)
579+
ensure("updateRegions 4x4 blocks: max_x in bounds", req.max_x <= 15);
580+
ensure("updateRegions 4x4 blocks: max_y in bounds", req.max_y <= 15);
581+
}
582+
// Each request covers one horizontal strip of 4 blocks (rows 0..3, 4..7, 8..11, 12..15)
583+
ensure("updateRegions 4x4 blocks: request[0] min_y", gMapBlockRequests[0].min_y == 0);
584+
ensure("updateRegions 4x4 blocks: request[0] max_y", gMapBlockRequests[0].max_y == 3);
585+
ensure("updateRegions 4x4 blocks: request[1] min_y", gMapBlockRequests[1].min_y == 4);
586+
ensure("updateRegions 4x4 blocks: request[1] max_y", gMapBlockRequests[1].max_y == 7);
587+
ensure("updateRegions 4x4 blocks: request[2] min_y", gMapBlockRequests[2].min_y == 8);
588+
ensure("updateRegions 4x4 blocks: request[2] max_y", gMapBlockRequests[2].max_y == 11);
589+
ensure("updateRegions 4x4 blocks: request[3] min_y", gMapBlockRequests[3].min_y == 12);
590+
ensure("updateRegions 4x4 blocks: request[3] max_y", gMapBlockRequests[3].max_y == 15);
591+
}
521592
}

0 commit comments

Comments
 (0)