LongestSequencePieceSelectorTest.cc 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "LongestSequencePieceSelector.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "array_fun.h"
  4. #include "BitfieldMan.h"
  5. #include "a2functional.h"
  6. namespace aria2 {
  7. class LongestSequencePieceSelectorTest : public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(LongestSequencePieceSelectorTest);
  9. CPPUNIT_TEST(testSelect);
  10. CPPUNIT_TEST_SUITE_END();
  11. public:
  12. void setUp() {}
  13. void tearDown() {}
  14. void testSelect();
  15. };
  16. CPPUNIT_TEST_SUITE_REGISTRATION(LongestSequencePieceSelectorTest);
  17. void LongestSequencePieceSelectorTest::testSelect()
  18. {
  19. size_t A[] = {1, 2, 3, 4, 7, 10, 11, 12, 13, 14, 15, 100, 112, 113, 114};
  20. BitfieldMan bf(1_k, 256_k);
  21. for (size_t i = 0; i < arraySize(A); ++i) {
  22. bf.setBit(A[i]);
  23. }
  24. LongestSequencePieceSelector selector;
  25. size_t index;
  26. CPPUNIT_ASSERT(selector.select(index, bf.getBitfield(), bf.countBlock()));
  27. CPPUNIT_ASSERT_EQUAL((size_t)15, index);
  28. bf.clearAllBit();
  29. CPPUNIT_ASSERT(!selector.select(index, bf.getBitfield(), bf.countBlock()));
  30. // See it works in just one range
  31. bf.setBitRange(1, 4);
  32. CPPUNIT_ASSERT(selector.select(index, bf.getBitfield(), bf.countBlock()));
  33. CPPUNIT_ASSERT_EQUAL((size_t)4, index);
  34. }
  35. } // namespace aria2