diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-10-23 16:29:37 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-10-23 16:29:37 +0000 |
| commit | 3ab9fe706dc92a1ee9fb94301d2eaf3e2017f592 (patch) | |
| tree | 3ef53ee4523bb46a169c2567c2538c4d55db95ef /test/PieceTest.cc | |
| parent | 884a139e725f4c3968929dca734eef6812cf2e6f (diff) | |
2007-10-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/Piece.{h, cc}: Added SubPiece infrastructure to track down
the data smaller than block length.
A block length can be specified by constructor's argument.
* src/DefaultPieceStorage.{h, cc} (getMissingPiece):
Get a missing piece in the range of given FileEntry. This
function is
not used in the program yet.
* src/Util.h: Added some macros.
Diffstat (limited to 'test/PieceTest.cc')
| -rw-r--r-- | test/PieceTest.cc | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/test/PieceTest.cc b/test/PieceTest.cc new file mode 100644 index 00000000..0c554b8d --- /dev/null +++ b/test/PieceTest.cc @@ -0,0 +1,106 @@ +#include "Piece.h" +#include <string> +#include <cppunit/extensions/HelperMacros.h> + +using namespace std; + +class PieceTest:public CppUnit::TestFixture { + + CPPUNIT_TEST_SUITE(PieceTest); + CPPUNIT_TEST(testCompleteBlock); + CPPUNIT_TEST(testIsRangeComplete); + CPPUNIT_TEST(testIsRangeComplete_subPiece); + CPPUNIT_TEST(testGetCompletedLength); + CPPUNIT_TEST_SUITE_END(); +private: + +public: + void setUp() {} + + void testCompleteBlock(); + void testIsRangeComplete(); + void testIsRangeComplete_subPiece(); + void testGetCompletedLength(); +}; + + +CPPUNIT_TEST_SUITE_REGISTRATION( PieceTest ); + +void PieceTest::testCompleteBlock() +{ + int32_t blockLength = 32*1024; + Piece p(0, blockLength*10, blockLength); + + // 5 is a block index inside the Piece p. + PieceHandle subPiece = new Piece(5, blockLength, 1); + p.addSubPiece(subPiece); + + CPPUNIT_ASSERT(!p.getSubPiece(5).isNull()); + + // When block is complete, then its associated sub piece must be deleted. + p.completeBlock(5); + + CPPUNIT_ASSERT(p.getSubPiece(5).isNull()); +} + +void PieceTest::testIsRangeComplete() +{ + int32_t blockLength = 16*1024; + Piece p(0, blockLength*10, blockLength); + + CPPUNIT_ASSERT(!p.isRangeComplete(8*1024, 16*1024)); + + p.completeBlock(0); + CPPUNIT_ASSERT(!p.isRangeComplete(8*1024, 16*1024)); + CPPUNIT_ASSERT(p.isRangeComplete(8*1024, 8*1024)); + + p.completeBlock(1); + CPPUNIT_ASSERT(p.isRangeComplete(8*1024, 16*1024)); +} + +void PieceTest::testIsRangeComplete_subPiece() +{ + int32_t blockLength = 16*1024; + Piece p(0, blockLength*10, blockLength); + + CPPUNIT_ASSERT(!p.isRangeComplete(8*1024, 32*1024)); + + PieceHandle startSubPiece = new Piece(0, blockLength, 1); + p.addSubPiece(startSubPiece); + + PieceHandle endSubPiece = new Piece(2, blockLength, 1); + p.addSubPiece(endSubPiece); + + p.completeBlock(1); + + CPPUNIT_ASSERT(!p.isRangeComplete(8*1024, 32*1024)); + + for(int32_t i = 8*1024; i < blockLength; ++i) { + startSubPiece->completeBlock(i); + } + + CPPUNIT_ASSERT(!p.isRangeComplete(8*1024, 32*1024)); + + for(int32_t i = 0; i < 8*1024; ++i) { + endSubPiece->completeBlock(i); + } + CPPUNIT_ASSERT(p.isRangeComplete(8*1024, 32*1024)); +} + +void PieceTest::testGetCompletedLength() +{ + int32_t blockLength = 16*1024; + Piece p(0, blockLength*10, blockLength); + + PieceHandle subPiece = new Piece(0, blockLength, 1); + for(int32_t i = 0; i < blockLength-1; ++i) { + subPiece->completeBlock(i); + } + p.addSubPiece(subPiece); + + p.completeBlock(1); + p.completeBlock(2); + p.completeBlock(9); + + CPPUNIT_ASSERT_EQUAL(blockLength*3+blockLength-1, p.getCompletedLength()); +} |
