diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-05-06 07:49:22 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-05-06 07:49:22 +0000 |
| commit | 4da631bef683ab0aa7ece0c28cd9743ce2ad26f2 (patch) | |
| tree | f38117b18280ff3bc4d25c49ee0ad6d3cfe74298 /test/PieceStatManTest.cc | |
| parent | d05d8bbddc505a0117010dd05da4d9b89c0c728f (diff) | |
2009-05-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Moved piece statistics stuff to new PieceStatMan class.
Refactored PieceSelector interface.
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/LongestSequencePieceSelector.cc
* src/LongestSequencePieceSelector.h
* src/Makefile.am
* src/PieceSelector.h
* src/PieceStatMan.cc
* src/PieceStatMan.h
* src/RarestPieceSelector.cc
* src/RarestPieceSelector.h
* src/RequestGroup.cc
* test/DefaultPieceStorageTest.cc
* test/InOrderPieceSelector.h
* test/Makefile.am
* test/PieceStatManTest.cc
* test/RarestPieceSelectorTest.cc
Diffstat (limited to 'test/PieceStatManTest.cc')
| -rw-r--r-- | test/PieceStatManTest.cc | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/test/PieceStatManTest.cc b/test/PieceStatManTest.cc new file mode 100644 index 00000000..3ddcdb4f --- /dev/null +++ b/test/PieceStatManTest.cc @@ -0,0 +1,194 @@ +#include "PieceStatMan.h" + +#include <cppunit/extensions/HelperMacros.h> + +namespace aria2 { + +class PieceStatManTest:public CppUnit::TestFixture { + + CPPUNIT_TEST_SUITE(PieceStatManTest); + CPPUNIT_TEST(testAddPieceStats_index); + CPPUNIT_TEST(testAddPieceStats_bitfield); + CPPUNIT_TEST(testUpdatePieceStats); + CPPUNIT_TEST(testSubtractPieceStats); + CPPUNIT_TEST_SUITE_END(); +public: + void setUp() {} + + void tearDown() {} + + void testAddPieceStats_index(); + void testAddPieceStats_bitfield(); + void testUpdatePieceStats(); + void testSubtractPieceStats(); +}; + + +CPPUNIT_TEST_SUITE_REGISTRATION(PieceStatManTest); + +void PieceStatManTest::testAddPieceStats_index() +{ + PieceStatMan pieceStatMan(10, false); + pieceStatMan.addPieceStats(1); + { + size_t indexes[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 1 }; + size_t counts[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + CPPUNIT_ASSERT_EQUAL((size_t)10, stats.size()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } + + pieceStatMan.addPieceStats(1); + + { + size_t indexes[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 1 }; + size_t counts[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } + + pieceStatMan.addPieceStats(3); + pieceStatMan.addPieceStats(9); + pieceStatMan.addPieceStats(3); + pieceStatMan.addPieceStats(0); + + { + size_t indexes[] = { 2, 4, 5, 6, 7, 8, 0, 9, 1, 3 }; + size_t counts[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } + +} + +void PieceStatManTest::testAddPieceStats_bitfield() +{ + PieceStatMan pieceStatMan(10, false); + const unsigned char bitfield[] = { 0xaa, 0x80 }; + pieceStatMan.addPieceStats(bitfield, sizeof(bitfield)); + { + size_t indexes[] = { 1, 3, 5, 7, 9, 0, 2, 4, 6, 8 }; + size_t counts[] = { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + CPPUNIT_ASSERT_EQUAL((size_t)10, stats.size()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } + + pieceStatMan.addPieceStats(bitfield, sizeof(bitfield)); + + { + size_t indexes[] = { 1, 3, 5, 7, 9, 0, 2, 4, 6, 8 }; + size_t counts[] = { 0, 0, 0, 0, 0, 2, 2, 2, 2, 2 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + CPPUNIT_ASSERT_EQUAL((size_t)10, stats.size()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } +} + +void PieceStatManTest::testUpdatePieceStats() +{ + PieceStatMan pieceStatMan(10, false); + + const unsigned char bitfield[] = { 0xff, 0xc0 }; + pieceStatMan.addPieceStats(bitfield, sizeof(bitfield)); + + const unsigned char oldBitfield[] = { 0xf0, 0x00 }; + const unsigned char newBitfield[] = { 0x1f, 0x00 }; + + pieceStatMan.updatePieceStats(newBitfield, sizeof(newBitfield), oldBitfield); + { + // idx: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + // bf : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + // old: 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 + // new: 0, 0, 0, 1, 1, 1, 1, 1, 0, 0 + // --------------------------------- + // res: 0, 0, 0, 1, 2, 2, 2, 2, 1, 1 + + size_t indexes[] = { 0, 1, 2, 3, 8, 9, 4, 5, 6, 7 }; + size_t counts[] = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 2 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + CPPUNIT_ASSERT_EQUAL((size_t)10, stats.size()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } +} + +void PieceStatManTest::testSubtractPieceStats() +{ + PieceStatMan pieceStatMan(10, false); + + const unsigned char bitfield[] = { 0xf0, 0x00 }; + pieceStatMan.addPieceStats(bitfield, sizeof(bitfield)); + + const unsigned char newBitfield[] = { 0x3f, 0x00 }; + + pieceStatMan.subtractPieceStats(newBitfield, sizeof(newBitfield)); + { + // idx: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + // bf : 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 + // new: 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 + // --------------------------------- + // res: 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 + + size_t indexes[] = { 2, 3, 4, 5, 6, 7, 8, 9, 0, 1 }; + size_t counts[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; + + const std::vector<size_t>& statsidx(pieceStatMan.getRarerPieceIndexes()); + const std::vector<SharedHandle<PieceStat> >& stats + (pieceStatMan.getPieceStats()); + + CPPUNIT_ASSERT_EQUAL((size_t)10, stats.size()); + + for(size_t i = 0; i < 10; ++i) { + CPPUNIT_ASSERT_EQUAL(indexes[i], statsidx[i]); + CPPUNIT_ASSERT_EQUAL(counts[i], stats[statsidx[i]]->getCount()); + } + } +} + +} // namespace aria2 |
