package org.jgroups.tests;
import org.jgroups.Global;
import org.jgroups.util.FixedSizeBitSet;
import org.jgroups.util.Util;
import org.testng.annotations.Test;
import java.util.Set;
import java.util.TreeSet;
/**
* @author Bela Ban
*/
@Test(groups=Global.FUNCTIONAL,sequential=false)
public class FixedSizeBitSetTest {
public static void testConstructor() {
FixedSizeBitSet set=new FixedSizeBitSet(10);
assert set.cardinality() == 0;
assert set.size() == 10;
}
@Test(expectedExceptions=IndexOutOfBoundsException.class)
public static void testSetWithIndexOutOfBounds() {
FixedSizeBitSet set=new FixedSizeBitSet(10);
set.set(0);
set.set(10);
}
@Test(expectedExceptions=IndexOutOfBoundsException.class)
public static void testClearWithIndexOutOfBounds() {
FixedSizeBitSet set=new FixedSizeBitSet(10);
set.clear(10);
}
@Test(expectedExceptions=IndexOutOfBoundsException.class)
public static void testGetWithIndexOutOfBounds() {
FixedSizeBitSet set=new FixedSizeBitSet(10);
set.get(10);
}
public static void testToString() {
FixedSizeBitSet set=new FixedSizeBitSet(10);
System.out.println("set = " + set);
set.set(0);
set.set(9);
System.out.println("set = " + set);
}
public static void testNextSetBit() {
FixedSizeBitSet set=new FixedSizeBitSet(64);
int index=set.nextSetBit(10);
assert index == -1 : "expected -1 but got " + index;
index=set.nextSetBit(63);
assert index == -1 : "expected -1 but got " + index;
set.set(62);
index=set.nextSetBit(62);
assert index == 62 : "expected 62 but got " + index;
index=set.nextSetBit(63);
assert index == -1 : "expected -1 but got " + index;
set.set(63);
index=set.nextSetBit(63);
assert index == 63 : "expected 63 but got " + index;
}
public static void testNextSetBit2() {
FixedSizeBitSet set=new FixedSizeBitSet(64);
set.set(0);
int index=set.nextSetBit(0);
assert index == 0 : "expected 0 but got " + index;
}
public static void testNextClearBit() {
FixedSizeBitSet set=new FixedSizeBitSet(64);
int index=set.nextClearBit(0);
assert index == 0 : "expected 0 but got " + index;
set.set(62); set.set(63);
index=set.nextClearBit(62);
assert index == -1;
}
public static void testNextSetAndClearBitOutOfRangeIndex() {
FixedSizeBitSet set=new FixedSizeBitSet(64);
for(int num: new int[]{64, 120}) {
int index=set.nextSetBit(num);
assert index == -1;
index=set.nextClearBit(num);
assert index == -1;
}
}
public static void testLargeSet() {
FixedSizeBitSet set=new FixedSizeBitSet(1500);
Set<Integer> sorted_set=new TreeSet<Integer>();
for(int i=0; i < 500; i++) {
int num=(int)Util.random(1499);
sorted_set.add(num);
}
for(int num: sorted_set)
set.set(num);
int num_set=sorted_set.size();
System.out.println("set " + num_set + " bits");
assert set.cardinality() == num_set;
}
}