SegmentTest.cc 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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(testClear);
  12. CPPUNIT_TEST_SUITE_END();
  13. private:
  14. public:
  15. void setUp() {}
  16. void testUpdateWrittenLength();
  17. void testUpdateWrittenLength_overflow();
  18. void testUpdateWrittenLength_lastPiece();
  19. void testUpdateWrittenLength_incompleteLastPiece();
  20. void testClear();
  21. };
  22. CPPUNIT_TEST_SUITE_REGISTRATION( SegmentTest );
  23. void SegmentTest::testUpdateWrittenLength()
  24. {
  25. PieceHandle p = new Piece(0, 16*1024*10);
  26. PiecedSegment s(16*1024*10, p);
  27. CPPUNIT_ASSERT_EQUAL((int32_t)0, s.getWrittenLength());
  28. s.updateWrittenLength(16*1024);
  29. CPPUNIT_ASSERT(p->hasBlock(0));
  30. CPPUNIT_ASSERT(!p->hasBlock(1));
  31. s.updateWrittenLength(16*1024*9);
  32. CPPUNIT_ASSERT(p->pieceComplete());
  33. }
  34. void SegmentTest::testUpdateWrittenLength_overflow()
  35. {
  36. PieceHandle p = new Piece(0, 16*1024*10);
  37. PiecedSegment s(16*1024*10, p);
  38. s.updateWrittenLength(16*1024*11);
  39. CPPUNIT_ASSERT(p->pieceComplete());
  40. CPPUNIT_ASSERT_EQUAL((int32_t)16*1024, s.getOverflowLength());
  41. }
  42. void SegmentTest::testUpdateWrittenLength_lastPiece()
  43. {
  44. PieceHandle p = new Piece(0, 16*1024*9+1);
  45. PiecedSegment s(16*1024*10, p);
  46. s.updateWrittenLength(16*1024*10);
  47. CPPUNIT_ASSERT(p->pieceComplete());
  48. }
  49. void SegmentTest::testUpdateWrittenLength_incompleteLastPiece()
  50. {
  51. PieceHandle p = new Piece(0, 16*1024*9+2);
  52. PiecedSegment s(16*1024*10, p);
  53. s.updateWrittenLength(16*1024*9+1);
  54. CPPUNIT_ASSERT(!p->pieceComplete());
  55. s.updateWrittenLength(1);
  56. CPPUNIT_ASSERT(p->pieceComplete());
  57. }
  58. void SegmentTest::testClear()
  59. {
  60. PieceHandle p = new Piece(0, 16*1024*10);
  61. PiecedSegment s(16*1024*10, p);
  62. s.updateWrittenLength(16*1024*11);
  63. CPPUNIT_ASSERT_EQUAL((int32_t)16*1024*10, s.getWrittenLength());
  64. CPPUNIT_ASSERT_EQUAL((int32_t)16*1024, s.getOverflowLength());
  65. s.clear();
  66. CPPUNIT_ASSERT_EQUAL((int32_t)0, s.getWrittenLength());
  67. CPPUNIT_ASSERT_EQUAL((int32_t)0, s.getOverflowLength());
  68. }