summaryrefslogtreecommitdiff
path: root/test/BitfieldManTest.cc
diff options
context:
space:
mode:
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