SegmentTest.cc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "PiecedSegment.h"
  2. #include "Piece.h"
  3. #include <cppunit/extensions/HelperMacros.h>
  4. using namespace std;
  5. class SegmentTest : public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(SegmentTest);
  7. CPPUNIT_TEST(testUpdateWrittenLength);
  8. CPPUNIT_TEST(testUpdateWrittenLength_overflow);
  9. CPPUNIT_TEST(testUpdateWrittenLength_lastPiece);
  10. CPPUNIT_TEST(testUpdateWrittenLength_incompleteLastPiece);
  11. CPPUNIT_TEST_SUITE_END();
  12. private:
  13. public:
  14. void setUp() {}
  15. void testUpdateWrittenLength();
  16. void testUpdateWrittenLength_overflow();
  17. void testUpdateWrittenLength_lastPiece();
  18. void testUpdateWrittenLength_incompleteLastPiece();
  19. };
  20. CPPUNIT_TEST_SUITE_REGISTRATION( SegmentTest );
  21. void SegmentTest::testUpdateWrittenLength()
  22. {
  23. PieceHandle p = new Piece(0, 16*1024*10);
  24. PiecedSegment s(16*1024*10, p);
  25. CPPUNIT_ASSERT_EQUAL((int32_t)0, s.getWrittenLength());
  26. s.updateWrittenLength(16*1024);
  27. CPPUNIT_ASSERT(p->hasBlock(0));
  28. CPPUNIT_ASSERT(!p->hasBlock(1));
  29. s.updateWrittenLength(16*1024*9);
  30. CPPUNIT_ASSERT(p->pieceComplete());
  31. }
  32. void SegmentTest::testUpdateWrittenLength_overflow()
  33. {
  34. PieceHandle p = new Piece(0, 16*1024*10);
  35. PiecedSegment s(16*1024*10, p);
  36. s.updateWrittenLength(16*1024*11);
  37. CPPUNIT_ASSERT(p->pieceComplete());
  38. CPPUNIT_ASSERT_EQUAL((int32_t)16*1024, s.getOverflowLength());
  39. }
  40. void SegmentTest::testUpdateWrittenLength_lastPiece()
  41. {
  42. PieceHandle p = new Piece(0, 16*1024*9+1);
  43. PiecedSegment s(16*1024*10, p);
  44. s.updateWrittenLength(16*1024*10);
  45. CPPUNIT_ASSERT(p->pieceComplete());
  46. }
  47. void SegmentTest::testUpdateWrittenLength_incompleteLastPiece()
  48. {
  49. PieceHandle p = new Piece(0, 16*1024*9+2);
  50. PiecedSegment s(16*1024*10, p);
  51. s.updateWrittenLength(16*1024*9+1);
  52. CPPUNIT_ASSERT(!p->pieceComplete());
  53. s.updateWrittenLength(1);
  54. CPPUNIT_ASSERT(p->pieceComplete());
  55. }