Add nextNodeBefore primitive.
[SXSI/XMLTree.git] / libcds / tests / test_brw32.cpp
1
2 #include <iostream>
3 #include <sstream>
4 #include <basics.h>
5 #include <static_bitsequence.h>
6
7 using namespace std;
8
9 int main(int argc, char ** argv) {
10         if(argc!=3) {
11                 cout << "usage: " << argv[0] << " <bitmap_file> <sample_rate>" << endl;
12                 return 0;
13         }
14         FILE * fp = fopen(argv[1],"r");
15         if(fp==NULL) {
16                 cout << "Error opening " << argv[1] << endl;
17                 return -1;
18         }
19         uint *bitseq, len;
20         uint l = fread(&len, sizeof(uint), 1, fp);
21         bitseq = new uint[uint_len(len,1)];
22         l += fread(bitseq, sizeof(uint), uint_len(len,1), fp);
23         fclose(fp);
24
25         uint sample_rate;
26         stringstream ss(argv[2]);
27         ss >> sample_rate;
28
29         static_bitsequence * bs = new static_bitsequence_brw32(bitseq,len,sample_rate);
30         
31         char * fname = new char[string(argv[1]).length()+10];
32         sprintf(fname,"%s.rrr",argv[1]);
33         
34         fp = fopen(fname,"w");
35         cout << "Save: " << bs->save(fp) << endl;
36         fclose(fp);
37         delete bs;
38
39         fp = fopen(fname,"r");
40         bs = static_bitsequence::load(fp);
41   cout << bs << endl;
42         fclose(fp);
43         delete [] fname;
44
45         cout << "Bitmap length: " << len << " =? " << bs->length() << endl;
46   cout << "Ones: " << bs->count_one() << endl;
47         cout << "Bitmap size: " << bs->size() << endl;
48         /*for(uint i=0;i<64;i++) {
49                 if(i%15==0) cout << " ";
50                 cout << (bs->access(i)?"1":"0");
51         }
52         cout << endl;*/
53         uint ones = 0;
54         for(uint i=0;i<len;i++) {
55                 //cout << "i="<<i<< endl;
56                 if(i%(max(1,bs->length()/100))==0) cout << i/(max(1,bs->length()/100)) << "%" << endl;
57                 if(bitget(bitseq,i)) ones++;
58                 if(bs->access(i) != (bitget(bitseq,i)!=0)) {
59                         cout << "Access error for position " << i << endl;
60                         cout << " got: " << bs->access(i) << " expected: " << (bitget(bitseq,i)!=0) << endl;
61                 }
62                 if(bs->rank1(i) != ones) {
63                         cout << "Rank1 error for position " << i << endl;
64                         cout << " got: " << bs->rank1(i) << " expected: " << ones << endl;
65                 } 
66                 if(bitget(bitseq,i) && bs->select1(ones) != i) {
67                         cout << "Select1 error for position " << i << " ones:" << ones << endl;
68                         cout << " got: " << bs->select1(ones) << " expected: " << i << endl;
69                 }
70                 if(bs->rank0(i) != i+1-ones) {
71                         cout << "Rank0 error for position " << i << endl;
72                         cout << " got: " << bs->rank0(i) << " expected: " << ones << endl;
73                 }
74                 if(!bitget(bitseq,i) && bs->select0(i+1-ones) != i) {
75                         cout << "Select0 error for position " << i << endl;
76                         cout << " got: " << bs->select0(i+1-ones) << " expected: " << i << endl;
77                 }
78         }
79         delete bs;
80   delete [] bitseq;
81         cout << "Test completed." << endl;
82         return 0;
83 }
84