summaryrefslogtreecommitdiff
path: root/test/BitfieldManTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-10 15:07:06 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-10 15:07:06 +0000
commitccc552cec90b9e71ca36db763fe2ea95bb2dd2ca (patch)
treed1ed3197a5f21abc6eaa644d6dc0ffcef2faf5dd /test/BitfieldManTest.cc
parent762580ba8cbcb14734d42b9e8f6a1c16220319f2 (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.cc29
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