diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-10 15:07:06 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-10 15:07:06 +0000 |
| commit | ccc552cec90b9e71ca36db763fe2ea95bb2dd2ca (patch) | |
| tree | d1ed3197a5f21abc6eaa644d6dc0ffcef2faf5dd /test/BitfieldManTest.cc | |
| parent | 762580ba8cbcb14734d42b9e8f6a1c16220319f2 (diff) | |
2010-02-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added BitfieldMan::getFirstNMissingUnusedIndex() to get multiple
unused block indexes at once instead of calling
getFirstMissingUnusedIndex() multiple times. Made use of it in
Piece class and DefaultBtRequestFactory class via Piece class.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/DefaultBtRequestFactory.cc
* src/Piece.cc
* src/Piece.h
* test/BitfieldManTest.cc
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 |
