diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-02-06 14:49:22 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-02-06 14:49:22 +0000 |
| commit | 5b2f8f036eabae5bb607b91e69f0862ec9e2a9ef (patch) | |
| tree | 546e85527511973a478b6559ef86c3975dc86b9b /test/BitfieldManTest.cc | |
| parent | a4e7bd7ec4e995852d5413fce4cde3b5ef5e8af1 (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.cc | 34 |
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)); +} |
