summaryrefslogtreecommitdiff
path: root/test/BitfieldManTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-02-06 14:49:22 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-02-06 14:49:22 +0000
commit5b2f8f036eabae5bb607b91e69f0862ec9e2a9ef (patch)
tree546e85527511973a478b6559ef86c3975dc86b9b /test/BitfieldManTest.cc
parenta4e7bd7ec4e995852d5413fce4cde3b5ef5e8af1 (diff)
2007-02-06 Tatsuhiro Tsujikawa <tujikawa dot rednoah dot com>
To fix the bug that causes crash on Max OS X: * src/SimpleRandomizer.h (getInstance): Create new instance if the static variable is null. * src/SimpleRandomizer.cc (randomizer): Initialized to 0. * src/BitfieldManFactory.h (getNewFactory): Removed the call to setRandomizer(). To fix the miscalculation of the range of checksum: * src/BitfieldMan.h (isBitSetOffsetRange): New function. * src/BitfieldMan.cc (isBitSetOffsetRange): New function. * src/SegmentMan.cc (tryChunkChecksumValidation): Use BitfieldMan::isBitSetOffsetRange(). Use bitfield->getBlockLength() instead of segment.segmentLength.
Diffstat (limited to 'test/BitfieldManTest.cc')
-rw-r--r--test/BitfieldManTest.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/BitfieldManTest.cc b/test/BitfieldManTest.cc
index 814175b7..60187cc9 100644
--- a/test/BitfieldManTest.cc
+++ b/test/BitfieldManTest.cc
@@ -15,6 +15,7 @@ class BitfieldManTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testFilter);
CPPUNIT_TEST(testGetMissingIndex);
CPPUNIT_TEST(testGetSparceMissingUnusedIndex);
+ CPPUNIT_TEST(testIsBitSetOffsetRange);
CPPUNIT_TEST_SUITE_END();
private:
RandomizerHandle fixedNumberRandomizer;
@@ -35,6 +36,7 @@ public:
void testFilter();
void testGetMissingIndex();
void testGetSparceMissingUnusedIndex();
+ void testIsBitSetOffsetRange();
};
@@ -233,3 +235,35 @@ void BitfieldManTest::testGetSparceMissingUnusedIndex() {
bitfield.setBit(9);
CPPUNIT_ASSERT_EQUAL(-1, bitfield.getSparseMissingUnusedIndex());
}
+
+void BitfieldManTest::testIsBitSetOffsetRange()
+{
+ int64_t totalLength = (int64_t)4*1024*1024*1024;
+ int32_t pieceLength = 4*1024*1024;
+ BitfieldMan bitfield(pieceLength, totalLength);
+ bitfield.setAllBit();
+
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(0, 0));
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(0, -1));
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(totalLength, 100));
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(totalLength+1, 100));
+
+ CPPUNIT_ASSERT(bitfield.isBitSetOffsetRange(0, totalLength));
+ CPPUNIT_ASSERT(bitfield.isBitSetOffsetRange(0, totalLength+1));
+
+ bitfield.clearAllBit();
+
+ bitfield.setBit(100);
+ bitfield.setBit(101);
+
+ CPPUNIT_ASSERT(bitfield.isBitSetOffsetRange(pieceLength*100, pieceLength*2));
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(pieceLength*100-10, pieceLength*2));
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(pieceLength*100, pieceLength*2+1));
+
+ bitfield.clearAllBit();
+
+ bitfield.setBit(100);
+ bitfield.setBit(102);
+
+ CPPUNIT_ASSERT(!bitfield.isBitSetOffsetRange(pieceLength*100, pieceLength*3));
+}