diff options
Diffstat (limited to 'test/BitfieldManTest.cc')
| -rw-r--r-- | test/BitfieldManTest.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/BitfieldManTest.cc b/test/BitfieldManTest.cc index c0532ff5..80a6f980 100644 --- a/test/BitfieldManTest.cc +++ b/test/BitfieldManTest.cc @@ -1,6 +1,7 @@ #include "BitfieldMan.h" #include <cstring> +#include <vector> #include <cppunit/extensions/HelperMacros.h> @@ -37,6 +38,7 @@ class BitfieldManTest:public CppUnit::TestFixture { CPPUNIT_TEST(testCountFilteredBlock); CPPUNIT_TEST(testCountMissingBlock); CPPUNIT_TEST(testZeroLengthFilter); + CPPUNIT_TEST(testGetFirstNMissingUnusedIndex); CPPUNIT_TEST_SUITE_END(); private: SharedHandle<Randomizer> fixedNumberRandomizer; @@ -77,6 +79,7 @@ public: void testCountFilteredBlock(); void testCountMissingBlock(); void testZeroLengthFilter(); + void testGetFirstNMissingUnusedIndex(); }; @@ -843,4 +846,30 @@ void BitfieldManTest::testZeroLengthFilter() CPPUNIT_ASSERT_EQUAL((size_t)0, bt.countMissingBlock()); } +void BitfieldManTest::testGetFirstNMissingUnusedIndex() +{ + BitfieldMan bt(1024, 1024*10); + bt.setUseBit(1); + bt.setBit(5); + std::vector<size_t> out; + bt.getFirstNMissingUnusedIndex(out, 256); + CPPUNIT_ASSERT_EQUAL((size_t)8, out.size()); + const size_t ans[] = {0, 2, 3, 4, 6, 7, 8, 9}; + for(size_t i = 0; i < out.size(); ++i) { + CPPUNIT_ASSERT_EQUAL(ans[i], out[i]); + } + out.clear(); + bt.getFirstNMissingUnusedIndex(out, 3); + CPPUNIT_ASSERT_EQUAL((size_t)3, out.size()); + for(size_t i = 0; i < out.size(); ++i) { + CPPUNIT_ASSERT_EQUAL(ans[i], out[i]); + } + out.clear(); + bt.addFilter(1024*9, 1024); + bt.enableFilter(); + bt.getFirstNMissingUnusedIndex(out, 256); + CPPUNIT_ASSERT_EQUAL((size_t)1, out.size()); + CPPUNIT_ASSERT_EQUAL((size_t)9, out[0]); +} + } // namespace aria2 |
