| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | #include "Piece.h"#include <string>#include <cppunit/extensions/HelperMacros.h>namespace aria2 {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.  SharedHandle<Piece> 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));  SharedHandle<Piece> startSubPiece = new Piece(0, blockLength, 1);  p.addSubPiece(startSubPiece);    SharedHandle<Piece> 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);    SharedHandle<Piece> 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());}} // namespace aria2
 |