diff options
Diffstat (limited to 'test/BitfieldManTest.cc')
| -rw-r--r-- | test/BitfieldManTest.cc | 63 |
1 files changed, 55 insertions, 8 deletions
diff --git a/test/BitfieldManTest.cc b/test/BitfieldManTest.cc index 00451fbc..2ab8e936 100644 --- a/test/BitfieldManTest.cc +++ b/test/BitfieldManTest.cc @@ -21,6 +21,7 @@ class BitfieldManTest:public CppUnit::TestFixture { CPPUNIT_TEST(testSetBitRange); CPPUNIT_TEST(testGetAllMissingIndexes); CPPUNIT_TEST(testGetAllMissingIndexes_noarg); + CPPUNIT_TEST(testGetAllMissingUnusedIndexes); CPPUNIT_TEST(testGetMissingUnusedIndex); CPPUNIT_TEST(testGetMissingIndex_noarg); CPPUNIT_TEST(testGetMissingUnusedIndex_noarg); @@ -48,7 +49,8 @@ public: void testGetMissingUnusedIndex_noarg(); void testGetAllMissingIndexes(); void testGetAllMissingIndexes_noarg(); - + void testGetAllMissingUnusedIndexes(); + void testIsAllBitSet(); void testFilter(); void testGetSparceMissingUnusedIndex(); @@ -594,12 +596,20 @@ void BitfieldManTest::testGetAllMissingIndexes_noarg() uint64_t totalLength = 1024*1024; BitfieldMan bf(blockLength, totalLength); - CPPUNIT_ASSERT_EQUAL((size_t)64, bf.getAllMissingIndexes().size()); + { + std::deque<size_t> indexes; + CPPUNIT_ASSERT(bf.getAllMissingIndexes(indexes)); + CPPUNIT_ASSERT_EQUAL((size_t)64, indexes.size()); + } for(size_t i = 0; i < 63; ++i) { bf.setBit(i); } - CPPUNIT_ASSERT_EQUAL((size_t)1, bf.getAllMissingIndexes().size()); - CPPUNIT_ASSERT_EQUAL((size_t)63, bf.getAllMissingIndexes().front()); + { + std::deque<size_t> indexes; + CPPUNIT_ASSERT(bf.getAllMissingIndexes(indexes)); + CPPUNIT_ASSERT_EQUAL((size_t)1, indexes.size()); + CPPUNIT_ASSERT_EQUAL((size_t)63, indexes.front()); + } } void BitfieldManTest::testGetAllMissingIndexes() @@ -610,16 +620,53 @@ void BitfieldManTest::testGetAllMissingIndexes() BitfieldMan peerBf(blockLength, totalLength); peerBf.setAllBit(); - CPPUNIT_ASSERT_EQUAL((size_t)64, bf.getAllMissingIndexes(peerBf.getBitfield(), - peerBf.getBitfieldLength()).size()); + { + std::deque<size_t> indexes; + CPPUNIT_ASSERT(bf.getAllMissingIndexes(indexes, + peerBf.getBitfield(), + peerBf.getBitfieldLength())); + CPPUNIT_ASSERT_EQUAL((size_t)64, indexes.size()); + } for(size_t i = 0; i < 62; ++i) { bf.setBit(i); } peerBf.unsetBit(62); + { + std::deque<size_t> indexes; + CPPUNIT_ASSERT(bf.getAllMissingIndexes(indexes, + peerBf.getBitfield(), + peerBf.getBitfieldLength())); + + CPPUNIT_ASSERT_EQUAL((size_t)1, indexes.size()); + CPPUNIT_ASSERT_EQUAL((size_t)63, indexes.front()); + } +} + +void BitfieldManTest::testGetAllMissingUnusedIndexes() +{ + size_t blockLength = 16*1024; + uint64_t totalLength = 1024*1024; + BitfieldMan bf(blockLength, totalLength); + BitfieldMan peerBf(blockLength, totalLength); + peerBf.setAllBit(); { - std::deque<size_t> indexes = bf.getAllMissingIndexes(peerBf.getBitfield(), - peerBf.getBitfieldLength()); + std::deque<size_t> indexes; + CPPUNIT_ASSERT(bf.getAllMissingUnusedIndexes(indexes, + peerBf.getBitfield(), + peerBf.getBitfieldLength())); + CPPUNIT_ASSERT_EQUAL((size_t)64, indexes.size()); + } + for(size_t i = 0; i < 61; ++i) { + bf.setBit(i); + } + bf.setUseBit(61); + peerBf.unsetBit(62); + { + std::deque<size_t> indexes; + CPPUNIT_ASSERT(bf.getAllMissingUnusedIndexes(indexes, + peerBf.getBitfield(), + peerBf.getBitfieldLength())); CPPUNIT_ASSERT_EQUAL((size_t)1, indexes.size()); CPPUNIT_ASSERT_EQUAL((size_t)63, indexes.front()); |
