Skip to content

Commit 57a2a0d

Browse files
author
Micah Scott
committed
Move read/write edge case tests to macros
1 parent 3969826 commit 57a2a0d

File tree

1 file changed

+43
-76
lines changed

1 file changed

+43
-76
lines changed

src/libbson/tests/test-bson-vector.c

Lines changed: 43 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,6 +1384,26 @@ test_bson_vector_example_packed_bit_view (void)
13841384
bson_destroy (&doc);
13851385
}
13861386

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+
13871407
static void
13881408
test_bson_vector_edge_cases_int8 (void)
13891409
{
@@ -1397,7 +1417,7 @@ test_bson_vector_edge_cases_int8 (void)
13971417
}
13981418

13991419
// 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.
14011421
#if BSON_WORD_SIZE > 32
14021422

14031423
size_t expected_bson_overhead =
@@ -1419,20 +1439,8 @@ test_bson_vector_edge_cases_int8 (void)
14191439
{
14201440
int8_t values[] = {1, 2, 3, 4, 5};
14211441
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);
14361444
}
14371445

14381446
bson_destroy (&doc);
@@ -1454,7 +1462,7 @@ test_bson_vector_edge_cases_float32 (void)
14541462
}
14551463

14561464
// 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.
14581466
#if BSON_WORD_SIZE > 32
14591467

14601468
size_t expected_bson_overhead =
@@ -1477,20 +1485,8 @@ test_bson_vector_edge_cases_float32 (void)
14771485
{
14781486
float values[] = {1.f, 2.f, 3.f, 4.f, 5.f};
14791487
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);
14941490
}
14951491

14961492
bson_destroy (&doc);
@@ -1512,7 +1508,7 @@ test_bson_vector_edge_cases_packed_bit (void)
15121508
}
15131509

15141510
// 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.
15161512
#if BSON_WORD_SIZE > 32
15171513

15181514
size_t expected_bson_overhead =
@@ -1531,60 +1527,31 @@ test_bson_vector_edge_cases_packed_bit (void)
15311527
ASSERT (BSON_APPEND_VECTOR_PACKED_BIT_UNINIT (&doc, "v", max_alloc_elements, &view));
15321528
}
15331529

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.
15351531
// Only tests one length, but it's chosen to be greater than 8 and not a multiple of 8.
15361532
{
15371533
bool values[190];
15381534
size_t values_size = sizeof values / sizeof values[0];
15391535
for (size_t i = 0; i < values_size; i++) {
15401536
values[i] = (i & 3) == 3;
15411537
}
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.
15631547
{
15641548
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);
15881555
}
15891556

15901557
bson_destroy (&doc);

0 commit comments

Comments
 (0)