5 #include <static_bitsequence.h>
9 int main(int argc, char ** argv) {
11 cout << "usage: " << argv[0] << " <bitmap_file> <sample_rate>" << endl;
14 FILE * fp = fopen(argv[1],"r");
16 cout << "Error opening " << argv[1] << endl;
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);
26 stringstream ss(argv[2]);
29 static_bitsequence * bs = new static_bitsequence_brw32(bitseq,len,sample_rate);
31 char * fname = new char[string(argv[1]).length()+10];
32 sprintf(fname,"%s.rrr",argv[1]);
34 fp = fopen(fname,"w");
35 cout << "Save: " << bs->save(fp) << endl;
39 fp = fopen(fname,"r");
40 bs = static_bitsequence::load(fp);
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");
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;
62 if(bs->rank1(i) != ones) {
63 cout << "Rank1 error for position " << i << endl;
64 cout << " got: " << bs->rank1(i) << " expected: " << ones << endl;
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;
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;
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;
81 cout << "Test completed." << endl;