BitSet[] sets = new BitSet[numSets];
OpenBitSet[] osets = new OpenBitSet[numSets];
for (int i=0; i<numSets; i++) {
sets[i] = new BitSet(bitSetSize);
osets[i] = new OpenBitSet(bitSetSize);
randomSets(bitSetSize, numBitsSet, sets[i], osets[i]);
}
BitSet bs = new BitSet(bitSetSize);
OpenBitSet obs = new OpenBitSet(bitSetSize);
randomSets(bitSetSize, numBitsSet, bs, obs);
int ret=0;
long start = System.currentTimeMillis();
if ("union".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets; i++) {
if (impl=="open") {
OpenBitSet other=osets[i];
obs.union(other);
} else {
BitSet other=sets[i];
bs.or(other);
}
}
}
}
if ("cardinality".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets; i++) {
if (impl=="open") {
ret += osets[i].cardinality();
} else {
ret += sets[i].cardinality();
}
}
}
}
if ("get".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets; i++) {
if (impl=="open") {
OpenBitSet oset = osets[i];
for (int k=0; k<bitSetSize; k++) if (oset.fastGet(k)) ret++;
} else {
BitSet bset = sets[i];
for (int k=0; k<bitSetSize; k++) if (bset.get(k)) ret++;
}
}
}
}
if ("icount".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets-1; i++) {
if (impl=="open") {
OpenBitSet a=osets[i];
OpenBitSet b=osets[i+1];
ret += OpenBitSet.intersectionCount(a,b);
} else {
BitSet a=sets[i];
BitSet b=sets[i+1];
BitSet newset = (BitSet)a.clone();
newset.and(b);
ret += newset.cardinality();
}
}
}
}
if ("clone".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets; i++) {
if (impl=="open") {
osets[i] = (OpenBitSet)osets[i].clone();
} else {
sets[i] = (BitSet)sets[i].clone();
}
}
}
}
if ("nextSetBit".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets; i++) {
if (impl=="open") {
final OpenBitSet set = osets[i];
for(int next=set.nextSetBit(0); next>=0; next=set.nextSetBit(next+1)) {
ret += next;
}
} else {
final BitSet set = sets[i];
for(int next=set.nextSetBit(0); next>=0; next=set.nextSetBit(next+1)) {
ret += next;
}
}
}
}
}
if ("iterator".equals(test)) {
for (int it=0; it<iter; it++) {
for (int i=0; i<numSets; i++) {
if (impl=="open") {
final OpenBitSet set = osets[i];
final OpenBitSetIterator iterator = new OpenBitSetIterator(set);
for(int next=iterator.nextDoc(); next>=0; next=iterator.nextDoc()) {
ret += next;
}
} else {
final BitSet set = sets[i];
for(int next=set.nextSetBit(0); next>=0; next=set.nextSetBit(next+1)) {
ret += next;
}
}
}
}