MCPcopy Create free account
hub / github.com/ashvardanian/StringZilla / test_large_memory_utilities

Function test_large_memory_utilities

scripts/test_stringzilla.cpp:1344–1415  ·  view source on GitHub ↗

* @brief Tests memory utilities on large buffers (>1MB) that trigger special code paths * in AVX2/AVX512 implementations. This specifically tests the bidirectional * traversal optimization used for huge buffers. */

Source from the content-addressed store, hash-verified

1342 * traversal optimization used for huge buffers.
1343 */
1344void test_large_memory_utilities() {
1345 // Test sizes that trigger the "huge buffer" path (> 1MB)
1346 std::vector<std::size_t> test_sizes = {
1347 1024ull * 1024ull + 1, // Just over 1MB
1348 1024ull * 10ull * 103ull, // From GitHub issue #228: 1,055,360 bytes
1349 2ull * 1024ull * 1024ull, // 2MB
1350 3ull * 1024ull * 1024ull + 7 // 3MB + 7 (unaligned size)
1351 };
1352
1353 for (std::size_t size : test_sizes) {
1354 // Test memcpy with aligned buffers
1355 {
1356 std::vector<char> src(size);
1357 std::vector<char> dst_std(size);
1358 std::vector<char> dst_sz(size);
1359
1360 // Fill source with pattern to detect copying errors
1361 for (std::size_t i = 0; i < size; i++) { src[i] = static_cast<char>('A' + (i % 26)); }
1362
1363 std::memcpy(dst_std.data(), src.data(), size);
1364 sz::memcpy(dst_sz.data(), src.data(), size);
1365
1366 expect_equality(dst_std.data(), dst_sz.data(), size);
1367 }
1368
1369 // Test memcpy with unaligned buffers
1370 {
1371 std::vector<char> src_buf(size + 64);
1372 std::vector<char> dst_std_buf(size + 64);
1373 std::vector<char> dst_sz_buf(size + 64);
1374
1375 // Use unaligned pointers
1376 char *src = src_buf.data() + 7;
1377 char *dst_std = dst_std_buf.data() + 11;
1378 char *dst_sz = dst_sz_buf.data() + 11;
1379
1380 for (std::size_t i = 0; i < size; i++) { src[i] = static_cast<char>('a' + (i % 26)); }
1381
1382 std::memcpy(dst_std, src, size);
1383 sz::memcpy(dst_sz, src, size);
1384
1385 expect_equality(dst_std, dst_sz, size);
1386 }
1387
1388 // Test memset
1389 {
1390 std::vector<char> buf_std(size);
1391 std::vector<char> buf_sz(size);
1392
1393 std::memset(buf_std.data(), 'Z', size);
1394 sz::memset(buf_sz.data(), 'Z', size);
1395
1396 expect_equality(buf_std.data(), buf_sz.data(), size);
1397 }
1398
1399 // Test memmove with overlapping regions
1400 {
1401 std::vector<char> buf_std(size);

Callers 1

mainFunction · 0.85

Calls 5

expect_equalityFunction · 0.85
memcpyFunction · 0.50
memsetFunction · 0.50
memmoveFunction · 0.50
dataMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…