File: BitSetTest.cpp

package info (click to toggle)
vecgeom 1.2.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 24,016 kB
  • sloc: cpp: 88,803; ansic: 6,888; python: 1,035; sh: 582; sql: 538; makefile: 23
file content (97 lines) | stat: -rw-r--r-- 2,211 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "VecGeom/base/BitSet.h"

#ifdef NDEBUG
#undef NDEBUG
#endif
#include <cassert>

using namespace vecgeom;

#include <iostream>

template <typename T>
bool compare(size_t iter, T value, T expected)
{
  if (value != expected) {
    std::cerr << "For iter " << iter << " expected " << expected << " and got " << value << "\n";
    return false;
  } else {
    return true;
  }
}

bool CheckValues(BitSet *s, size_t nbits)
{
  assert(s->CountBits() == 32);

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->TestBitNumber(b), (bool)(b % 3))); // every 3rd bit is zero.
  }

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, (*s)[b] == (bool)(b % 3), true)); // every 3rd bit is zero.
  }

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->FirstNullBit(b), ((b % 3 == 0) ? b : ((b / 3 + 1) * 3)))); // every 3rd bit is zero.
  }

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->FirstSetBit(b), ((b % 3 == 0) ? b + 1 : b))); // every 3rd bit is zero.
  }

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->LastNullBit(b), 3 * (b / 3)));
  }

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->LastSetBit(b), ((b % 3 == 0) ? (b == 0 ? nbits : b - 1) : b)));
  }

  return true;
}

void BitSetTest()
{
  size_t nbits = 48;

  BitSet *s = BitSet::MakeInstance(nbits);

  // fprintf(stderr,"%ld, %ld vs %ld \n", sizeof(BitSet), s->SizeOf(), (( (nbits+1) )/8 - 1) + sizeof(BitSet));
  assert(s->SizeOf() == (((nbits + 1)) / 8 - 1) + sizeof(BitSet));

  for (size_t b = 0; b < nbits; ++b) {
    s->SetBitNumber(b, (bool)(b % 3)); // every 3rd bit is zero.
  }

  CheckValues(s, nbits);

  s->ResetAllBits();

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->TestBitNumber(b) == false, true)); // All zeros.
  }

  for (size_t b = 0; b < nbits; ++b) {
    s->SetBitNumber(b, true);
  }

  for (size_t b = 0; b < nbits; ++b) {
    assert(compare(b, s->TestBitNumber(b) == true, true)); // All zeros.
  }

  for (size_t b = 0; b < nbits; ++b) {
    if (!(bool)(b % 3)) {
      s->ResetBitNumber(b); // every 3rd bit is zero.
    }
  }

  CheckValues(s, nbits);
  delete[] s;
}

int main()
{
  BitSetTest();
  return 0;
}