MCPcopy Create free account
hub / github.com/cameron314/concurrentqueue / block_reuse

Method block_reuse

tests/unittests/unittests.cpp:1466–1618  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1464 }
1465
1466 bool block_reuse()
1467 {
1468 int item;
1469
1470 typedef TestTraits<4> SmallBlocks;
1471 SmallBlocks::reset();
1472 {
1473 ConcurrentQueue<int, SmallBlocks> q(8); // 2 blocks
1474 ProducerToken t(q);
1475
1476 for (int j = 0; j != 3; ++j) {
1477 for (int i = 0; i != 4; ++i) {
1478 ASSERT_OR_FAIL(q.enqueue(t, i));
1479 }
1480 for (int i = 0; i != 4; ++i) {
1481 ASSERT_OR_FAIL(q.try_dequeue_from_producer(t, item));
1482 ASSERT_OR_FAIL(item == i);
1483 }
1484
1485 for (int i = 0; i != 8; ++i) {
1486 ASSERT_OR_FAIL(q.enqueue(t, i));
1487 }
1488 for (int i = 0; i != 4; ++i) {
1489 ASSERT_OR_FAIL(q.try_dequeue_from_producer(t, item));
1490 ASSERT_OR_FAIL(item == i);
1491 }
1492 for (int i = 0; i != 4; ++i) {
1493 ASSERT_OR_FAIL(q.enqueue(t, i));
1494 }
1495 for (int i = 0; i != 8; ++i) {
1496 ASSERT_OR_FAIL(q.try_dequeue_from_producer(t, item));
1497 ASSERT_OR_FAIL(item == ((i + 4) & 7));
1498 }
1499
1500 ASSERT_OR_FAIL(!q.try_dequeue_from_producer(t, item));
1501 }
1502 }
1503
1504 ASSERT_OR_FAIL(SmallBlocks::malloc_count() == 3);
1505 ASSERT_OR_FAIL(SmallBlocks::free_count() == SmallBlocks::malloc_count());
1506
1507
1508 typedef TestTraits<8192> HugeBlocks;
1509 HugeBlocks::reset();
1510 {
1511 ConcurrentQueue<int, HugeBlocks> q(8192 * 2); // 2 blocks
1512 ProducerToken t(q);
1513
1514 for (int j = 0; j != 3; ++j) {
1515 for (int i = 0; i != 8192; ++i) {
1516 ASSERT_OR_FAIL(q.enqueue(t, i));
1517 }
1518 for (int i = 0; i != 8192; ++i) {
1519 ASSERT_OR_FAIL(q.try_dequeue_from_producer(t, item));
1520 ASSERT_OR_FAIL(item == i);
1521 }
1522
1523 for (int i = 0; i != 8192 * 2; ++i) {

Callers

nothing calls this directly

Calls 3

enqueueMethod · 0.45
try_dequeueMethod · 0.45

Tested by

no test coverage detected