Create branch library-split
[SXSI/XMLTree.git] / libcds / tests / test_naive.cpp
1
2 #include <iostream>
3 #include <basics.h>
4 #include <static_bitsequence.h>
5
6 using namespace std;
7
8 int main(int argc, char ** argv) {
9         if(argc!=2) {
10                 cout << "usage: " << argv[0] << " <bitmap_file>" << endl;
11                 return 0;
12         }
13         FILE * fp = fopen(argv[1],"r");
14         if(fp==NULL) {
15                 cout << "Error opening " << argv[1] << endl;
16                 return -1;
17         }
18         uint *bitseq, len;
19         uint l = fread(&len, sizeof(uint), 1, fp);
20         bitseq = new uint[uint_len(len,1)];
21         l += fread(bitseq, sizeof(uint), uint_len(len,1), fp);
22         static_bitsequence * bs = new static_bitsequence_naive(bitseq,len);
23         cout << "Bitmap length: " << len << " =? " << bs->length() << endl;
24         uint ones = 0;
25         for(uint i=0;i<len;i++) {
26                 if(bitget(bitseq,i)) ones++;
27                 if(bs->rank1(i) != ones) {
28                         cout << "Rank1 error for position " << i << endl;
29                         cout << " got: " << bs->rank1(i) << " expected: " << ones << endl;
30                 }
31                 if(bitget(bitseq,i) && bs->select1(ones) != i) {
32                         cout << "Select1 error for position " << i << endl;
33                         cout << " got: " << bs->select1(ones) << " expected: " << i << endl;
34                 }
35                 if(bs->rank0(i) != i+1-ones) {
36                         cout << "Rank0 error for position " << i << endl;
37                         cout << " got: " << bs->rank0(i) << " expected: " << ones << endl;
38                 }
39                 if(!bitget(bitseq,i) && bs->select0(i+1-ones) != i) {
40                         cout << "Select0 error for position " << i << endl;
41                         cout << " got: " << bs->select0(ones) << " expected: " << i << endl;
42                 }
43         }
44         delete bs;
45         fclose(fp);
46         cout << "Test completed." << endl;
47         return 0;
48 }
49