@@ -1384,6 +1384,26 @@ test_bson_vector_example_packed_bit_view (void)
1384
1384
bson_destroy (& doc );
1385
1385
}
1386
1386
1387
+ // Shared edge case tests that apply to all reader/writer functions.
1388
+ #define TEST_BSON_VECTOR_RW (_expected , _view , _v , _count , _offset , _read , _write ) \
1389
+ if (true) { \
1390
+ ASSERT ((_expected) == (_write) ((_view), (_v), (_count), (_offset))); \
1391
+ ASSERT ((_expected) == (_read) ((_view), (_v), (_count), (_offset))); \
1392
+ } else { \
1393
+ }
1394
+
1395
+ #define TEST_BSON_VECTOR_EDGE_CASES_RW_COMMON (_view , _alloc_size , _v , _v_size , _read , _write ) \
1396
+ if (true) { \
1397
+ TEST_BSON_VECTOR_RW (false, (_view), (_v), (_alloc_size) + 1u, 0, (_read), (_write)); \
1398
+ TEST_BSON_VECTOR_RW (true, (_view), (_v), (_v_size), (_alloc_size) - (_v_size), (_read), (_write)); \
1399
+ TEST_BSON_VECTOR_RW (false, (_view), (_v), (_v_size), (_alloc_size) - (_v_size) + 1u, (_read), (_write)); \
1400
+ TEST_BSON_VECTOR_RW (false, (_view), (_v), (_v_size) + 1u, (_alloc_size) - (_v_size), (_read), (_write)); \
1401
+ TEST_BSON_VECTOR_RW (false, (_view), (_v), SIZE_MAX, (_alloc_size) - (_v_size), (_read), (_write)); \
1402
+ TEST_BSON_VECTOR_RW (false, (_view), (_v), SIZE_MAX, (_alloc_size) - (_v_size) + 1u, (_read), (_write)); \
1403
+ TEST_BSON_VECTOR_RW (true, (_view), (_v), (_v_size), 0, (_read), (_write)); \
1404
+ } else { \
1405
+ }
1406
+
1387
1407
static void
1388
1408
test_bson_vector_edge_cases_int8 (void )
1389
1409
{
@@ -1397,7 +1417,7 @@ test_bson_vector_edge_cases_int8 (void)
1397
1417
}
1398
1418
1399
1419
// Needs little real memory because most bytes are never accessed,
1400
- // but we do need a virtual address space larger than 32 bits.
1420
+ // but we should require a virtual address space larger than 32 bits.
1401
1421
#if BSON_WORD_SIZE > 32
1402
1422
1403
1423
size_t expected_bson_overhead =
@@ -1419,20 +1439,8 @@ test_bson_vector_edge_cases_int8 (void)
1419
1439
{
1420
1440
int8_t values [] = {1 , 2 , 3 , 4 , 5 };
1421
1441
size_t values_size = sizeof values / sizeof values [0 ];
1422
- ASSERT (bson_vector_int8_view_write (view , values , values_size , 0 ));
1423
- ASSERT (bson_vector_int8_view_read (view , values , values_size , 0 ));
1424
- ASSERT (!bson_vector_int8_view_write (view , values , max_alloc_elements + 1u , 0 ));
1425
- ASSERT (!bson_vector_int8_view_read (view , values , max_alloc_elements + 1u , 0 ));
1426
- ASSERT (bson_vector_int8_view_write (view , values , values_size , max_alloc_elements - values_size ));
1427
- ASSERT (bson_vector_int8_view_read (view , values , values_size , max_alloc_elements - values_size ));
1428
- ASSERT (!bson_vector_int8_view_write (view , values , values_size , max_alloc_elements - values_size + 1u ));
1429
- ASSERT (!bson_vector_int8_view_read (view , values , values_size , max_alloc_elements - values_size + 1u ));
1430
- ASSERT (!bson_vector_int8_view_write (view , values , values_size + 1u , max_alloc_elements - values_size ));
1431
- ASSERT (!bson_vector_int8_view_read (view , values , values_size + 1u , max_alloc_elements - values_size ));
1432
- ASSERT (!bson_vector_int8_view_write (view , values , SIZE_MAX , max_alloc_elements - values_size ));
1433
- ASSERT (!bson_vector_int8_view_read (view , values , SIZE_MAX , max_alloc_elements - values_size ));
1434
- ASSERT (!bson_vector_int8_view_write (view , values , SIZE_MAX , max_alloc_elements - values_size + 1u ));
1435
- ASSERT (!bson_vector_int8_view_read (view , values , SIZE_MAX , max_alloc_elements - values_size + 1u ));
1442
+ TEST_BSON_VECTOR_EDGE_CASES_RW_COMMON (
1443
+ view , max_alloc_elements , values , values_size , bson_vector_int8_view_read , bson_vector_int8_view_write );
1436
1444
}
1437
1445
1438
1446
bson_destroy (& doc );
@@ -1454,7 +1462,7 @@ test_bson_vector_edge_cases_float32 (void)
1454
1462
}
1455
1463
1456
1464
// Needs little real memory because most bytes are never accessed,
1457
- // but we do need a virtual address space larger than 32 bits.
1465
+ // but we should require a virtual address space larger than 32 bits.
1458
1466
#if BSON_WORD_SIZE > 32
1459
1467
1460
1468
size_t expected_bson_overhead =
@@ -1477,20 +1485,8 @@ test_bson_vector_edge_cases_float32 (void)
1477
1485
{
1478
1486
float values [] = {1.f , 2.f , 3.f , 4.f , 5.f };
1479
1487
size_t values_size = sizeof values / sizeof values [0 ];
1480
- ASSERT (bson_vector_float32_view_write (view , values , values_size , 0 ));
1481
- ASSERT (bson_vector_float32_view_read (view , values , values_size , 0 ));
1482
- ASSERT (!bson_vector_float32_view_write (view , values , max_alloc_elements + 1u , 0 ));
1483
- ASSERT (!bson_vector_float32_view_read (view , values , max_alloc_elements + 1u , 0 ));
1484
- ASSERT (bson_vector_float32_view_write (view , values , values_size , max_alloc_elements - values_size ));
1485
- ASSERT (bson_vector_float32_view_read (view , values , values_size , max_alloc_elements - values_size ));
1486
- ASSERT (!bson_vector_float32_view_write (view , values , values_size , max_alloc_elements - values_size + 1u ));
1487
- ASSERT (!bson_vector_float32_view_read (view , values , values_size , max_alloc_elements - values_size + 1u ));
1488
- ASSERT (!bson_vector_float32_view_write (view , values , values_size + 1u , max_alloc_elements - values_size ));
1489
- ASSERT (!bson_vector_float32_view_read (view , values , values_size + 1u , max_alloc_elements - values_size ));
1490
- ASSERT (!bson_vector_float32_view_write (view , values , SIZE_MAX , max_alloc_elements - values_size ));
1491
- ASSERT (!bson_vector_float32_view_read (view , values , SIZE_MAX , max_alloc_elements - values_size ));
1492
- ASSERT (!bson_vector_float32_view_write (view , values , SIZE_MAX , max_alloc_elements - values_size + 1u ));
1493
- ASSERT (!bson_vector_float32_view_read (view , values , SIZE_MAX , max_alloc_elements - values_size + 1u ));
1488
+ TEST_BSON_VECTOR_EDGE_CASES_RW_COMMON (
1489
+ view , max_alloc_elements , values , values_size , bson_vector_float32_view_read , bson_vector_float32_view_write );
1494
1490
}
1495
1491
1496
1492
bson_destroy (& doc );
@@ -1512,7 +1508,7 @@ test_bson_vector_edge_cases_packed_bit (void)
1512
1508
}
1513
1509
1514
1510
// Needs little real memory because most bytes are never accessed,
1515
- // but we do need a virtual address space larger than 32 bits.
1511
+ // but we should require a virtual address space larger than 32 bits.
1516
1512
#if BSON_WORD_SIZE > 32
1517
1513
1518
1514
size_t expected_bson_overhead =
@@ -1531,60 +1527,31 @@ test_bson_vector_edge_cases_packed_bit (void)
1531
1527
ASSERT (BSON_APPEND_VECTOR_PACKED_BIT_UNINIT (& doc , "v" , max_alloc_elements , & view ));
1532
1528
}
1533
1529
1534
- // Test some pack and unpack boundaries, similar to the read/write tests for non-packed element types.
1530
+ // Test pack and unpack boundaries with the same tests used for read/write of non-packed element types.
1535
1531
// Only tests one length, but it's chosen to be greater than 8 and not a multiple of 8.
1536
1532
{
1537
1533
bool values [190 ];
1538
1534
size_t values_size = sizeof values / sizeof values [0 ];
1539
1535
for (size_t i = 0 ; i < values_size ; i ++ ) {
1540
1536
values [i ] = (i & 3 ) == 3 ;
1541
1537
}
1542
- ASSERT (bson_vector_packed_bit_view_pack_bool (view , values , values_size , 0 ));
1543
- ASSERT (bson_vector_packed_bit_view_unpack_bool (view , values , values_size , 0 ));
1544
- ASSERT (!bson_vector_packed_bit_view_pack_bool (view , values , max_alloc_elements + 1u , 0 ));
1545
- ASSERT (!bson_vector_packed_bit_view_unpack_bool (view , values , max_alloc_elements + 1u , 0 ));
1546
- ASSERT (bson_vector_packed_bit_view_pack_bool (view , values , values_size , max_alloc_elements - values_size ));
1547
- ASSERT (bson_vector_packed_bit_view_unpack_bool (view , values , values_size , max_alloc_elements - values_size ));
1548
- ASSERT (
1549
- !bson_vector_packed_bit_view_pack_bool (view , values , values_size , max_alloc_elements - values_size + 1u ));
1550
- ASSERT (
1551
- !bson_vector_packed_bit_view_unpack_bool (view , values , values_size , max_alloc_elements - values_size + 1u ));
1552
- ASSERT (
1553
- !bson_vector_packed_bit_view_pack_bool (view , values , values_size + 1u , max_alloc_elements - values_size ));
1554
- ASSERT (
1555
- !bson_vector_packed_bit_view_unpack_bool (view , values , values_size + 1u , max_alloc_elements - values_size ));
1556
- ASSERT (!bson_vector_packed_bit_view_pack_bool (view , values , SIZE_MAX , max_alloc_elements - values_size ));
1557
- ASSERT (!bson_vector_packed_bit_view_unpack_bool (view , values , SIZE_MAX , max_alloc_elements - values_size ));
1558
- ASSERT (!bson_vector_packed_bit_view_pack_bool (view , values , SIZE_MAX , max_alloc_elements - values_size + 1u ));
1559
- ASSERT (!bson_vector_packed_bit_view_unpack_bool (view , values , SIZE_MAX , max_alloc_elements - values_size + 1u ));
1560
- }
1561
-
1562
- // Test some read and write boundaries on packed bytes.
1538
+ TEST_BSON_VECTOR_EDGE_CASES_RW_COMMON (view ,
1539
+ max_alloc_elements ,
1540
+ values ,
1541
+ values_size ,
1542
+ bson_vector_packed_bit_view_unpack_bool ,
1543
+ bson_vector_packed_bit_view_pack_bool );
1544
+ }
1545
+
1546
+ // Test read and write boundaries on packed bytes.
1563
1547
{
1564
1548
uint8_t packed [] = {0x12 , 0x34 , 0x56 , 0x78 , 0x9A };
1565
- ASSERT (bson_vector_packed_bit_view_write_packed (view , packed , sizeof packed , 0 ));
1566
- ASSERT (bson_vector_packed_bit_view_read_packed (view , packed , sizeof packed , 0 ));
1567
- ASSERT (!bson_vector_packed_bit_view_write_packed (view , packed , max_alloc_bytes + 1u , 0 ));
1568
- ASSERT (!bson_vector_packed_bit_view_read_packed (view , packed , max_alloc_bytes + 1u , 0 ));
1569
- ASSERT (
1570
- bson_vector_packed_bit_view_write_packed (view , packed , sizeof packed , max_alloc_bytes - sizeof packed ));
1571
- ASSERT (
1572
- bson_vector_packed_bit_view_read_packed (view , packed , sizeof packed , max_alloc_bytes - sizeof packed ));
1573
- ASSERT (!bson_vector_packed_bit_view_write_packed (
1574
- view , packed , sizeof packed , max_alloc_bytes - sizeof packed + 1u ));
1575
- ASSERT (!bson_vector_packed_bit_view_read_packed (
1576
- view , packed , sizeof packed , max_alloc_bytes - sizeof packed + 1u ));
1577
- ASSERT (!bson_vector_packed_bit_view_write_packed (
1578
- view , packed , sizeof packed + 1u , max_alloc_bytes - sizeof packed ));
1579
- ASSERT (!bson_vector_packed_bit_view_read_packed (
1580
- view , packed , sizeof packed + 1u , max_alloc_bytes - sizeof packed ));
1581
- ASSERT (
1582
- !bson_vector_packed_bit_view_write_packed (view , packed , SIZE_MAX , max_alloc_bytes - sizeof packed ));
1583
- ASSERT (!bson_vector_packed_bit_view_read_packed (view , packed , SIZE_MAX , max_alloc_bytes - sizeof packed ));
1584
- ASSERT (!bson_vector_packed_bit_view_write_packed (
1585
- view , packed , SIZE_MAX , max_alloc_bytes - sizeof packed + 1u ));
1586
- ASSERT (
1587
- !bson_vector_packed_bit_view_read_packed (view , packed , SIZE_MAX , max_alloc_bytes - sizeof packed + 1u ));
1549
+ TEST_BSON_VECTOR_EDGE_CASES_RW_COMMON (view ,
1550
+ max_alloc_bytes ,
1551
+ packed ,
1552
+ sizeof packed ,
1553
+ bson_vector_packed_bit_view_read_packed ,
1554
+ bson_vector_packed_bit_view_write_packed );
1588
1555
}
1589
1556
1590
1557
bson_destroy (& doc );
0 commit comments