BitfieldManTest.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "BitfieldMan.h"
  2. #include <string>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. using namespace std;
  5. class BitfieldManTest:public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(BitfieldManTest);
  7. CPPUNIT_TEST(testGetBlockSize);
  8. CPPUNIT_TEST(testGetFirstMissingUnusedIndex);
  9. CPPUNIT_TEST(testIsAllBitSet);
  10. CPPUNIT_TEST_SUITE_END();
  11. private:
  12. public:
  13. void setUp() {
  14. }
  15. void testGetBlockSize();
  16. void testGetFirstMissingUnusedIndex();
  17. void testIsAllBitSet();
  18. };
  19. CPPUNIT_TEST_SUITE_REGISTRATION( BitfieldManTest );
  20. void BitfieldManTest::testGetBlockSize() {
  21. BitfieldMan bt1(1024, 1024*10);
  22. CPPUNIT_ASSERT_EQUAL(1024, bt1.getBlockSize(9));
  23. BitfieldMan bt2(1024, 1024*10+1);
  24. CPPUNIT_ASSERT_EQUAL(1024, bt2.getBlockSize(9));
  25. CPPUNIT_ASSERT_EQUAL(1, bt2.getBlockSize(10));
  26. CPPUNIT_ASSERT_EQUAL(0, bt2.getBlockSize(11));
  27. }
  28. void BitfieldManTest::testGetFirstMissingUnusedIndex() {
  29. BitfieldMan bt1(1024, 1024*10);
  30. unsigned char bitfield[2];
  31. memset(bitfield, 0xff, sizeof(bitfield));
  32. CPPUNIT_ASSERT_EQUAL(0, bt1.getFirstMissingUnusedIndex(bitfield, sizeof(bitfield)));
  33. CPPUNIT_ASSERT(bt1.setUseBit(0));
  34. CPPUNIT_ASSERT_EQUAL(1, bt1.getFirstMissingUnusedIndex(bitfield, sizeof(bitfield)));
  35. CPPUNIT_ASSERT(bt1.unsetUseBit(0));
  36. CPPUNIT_ASSERT_EQUAL(0, bt1.getFirstMissingUnusedIndex(bitfield, sizeof(bitfield)));
  37. CPPUNIT_ASSERT(bt1.setBit(0));
  38. CPPUNIT_ASSERT_EQUAL(1, bt1.getFirstMissingUnusedIndex(bitfield, sizeof(bitfield)));
  39. for(int i = 0; i < 8; i++) {
  40. CPPUNIT_ASSERT(bt1.setBit(i));
  41. }
  42. CPPUNIT_ASSERT_EQUAL(8, bt1.getFirstMissingUnusedIndex(bitfield, sizeof(bitfield)));
  43. CPPUNIT_ASSERT_EQUAL(8, bt1.getFirstMissingUnusedIndex());
  44. CPPUNIT_ASSERT(bt1.setUseBit(8));
  45. CPPUNIT_ASSERT_EQUAL(9, bt1.getFirstMissingUnusedIndex());
  46. }
  47. void BitfieldManTest::testIsAllBitSet() {
  48. BitfieldMan bt1(1024, 1024*10);
  49. CPPUNIT_ASSERT(!bt1.isAllBitSet());
  50. bt1.setBit(1);
  51. CPPUNIT_ASSERT(!bt1.isAllBitSet());
  52. for(int i = 0; i < 8; i++) {
  53. CPPUNIT_ASSERT(bt1.setBit(i));
  54. }
  55. CPPUNIT_ASSERT(!bt1.isAllBitSet());
  56. for(int i = 0; i < bt1.getBlocks(); i++) {
  57. CPPUNIT_ASSERT(bt1.setBit(i));
  58. }
  59. CPPUNIT_ASSERT(bt1.isAllBitSet());
  60. }