PriorityPieceSelectorTest.cc 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "PriorityPieceSelector.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "array_fun.h"
  4. #include "BitfieldMan.h"
  5. #include "MockPieceSelector.h"
  6. #include "a2functional.h"
  7. namespace aria2 {
  8. class PriorityPieceSelectorTest : public CppUnit::TestFixture {
  9. CPPUNIT_TEST_SUITE(PriorityPieceSelectorTest);
  10. CPPUNIT_TEST(testSelect);
  11. CPPUNIT_TEST_SUITE_END();
  12. public:
  13. void testSelect();
  14. };
  15. CPPUNIT_TEST_SUITE_REGISTRATION(PriorityPieceSelectorTest);
  16. void PriorityPieceSelectorTest::testSelect()
  17. {
  18. constexpr size_t pieceLength = 1_k;
  19. size_t A[] = {1, 200};
  20. BitfieldMan bf(pieceLength, pieceLength * 256);
  21. for (auto i : A) {
  22. bf.setBit(i);
  23. }
  24. PriorityPieceSelector selector(
  25. std::shared_ptr<PieceSelector>(new MockPieceSelector()));
  26. selector.setPriorityPiece(std::begin(A), std::end(A));
  27. size_t index;
  28. CPPUNIT_ASSERT(selector.select(index, bf.getBitfield(), bf.countBlock()));
  29. CPPUNIT_ASSERT_EQUAL((size_t)1, index);
  30. bf.unsetBit(1);
  31. CPPUNIT_ASSERT(selector.select(index, bf.getBitfield(), bf.countBlock()));
  32. CPPUNIT_ASSERT_EQUAL((size_t)200, index);
  33. bf.unsetBit(200);
  34. CPPUNIT_ASSERT(!selector.select(index, bf.getBitfield(), bf.countBlock()));
  35. }
  36. } // namespace aria2