package net.varkhan.base.containers.array;
import junit.framework.TestCase;
/**
* @author varkhan
* @date Mar 12, 2009
* @time 6:19:14 PM
*/
public class BitArraysBmrk extends TestCase {
private static int csb(int b) {
if(b==0) return 0;
int c=0;
while(b!=0) {
c+=b&0x1;
b>>>=1;
}
return c;
}
public void testCsbByte() {
int n=100000000;
long t0=System.nanoTime();
for(int j=0;j<n;j++) {
for(int i=0;i<256;i++) {
BitArrays.csb((byte) i);
}
}
long t1=System.nanoTime();
System.out.println("BitArrays.csb(byte) "+((t1-t0)/(double) n)+"ns");
}
public void testCsbShort() {
int n=1000000;
long t0=System.nanoTime();
for(int j=0;j<n;j++) {
for(int i=0;i<256*256;i++) {
BitArrays.csb((short) i);
}
}
long t1=System.nanoTime();
System.out.println("BitArrays.csb(short) "+((t1-t0)/(double) n)+"ns");
}
public void testCsbInt() {
int n=1000000;
long t0=System.nanoTime();
for(int j=0;j<n;j++) {
for(int i=0;i<256*256;i++) {
BitArrays.csb(i);
}
}
long t1=System.nanoTime();
System.out.println("BitArrays.csb(int) "+((t1-t0)/(double) n)+"ns");
}
public void testCsbLong() {
int n=1000000;
long t0=System.nanoTime();
for(int j=0;j<n;j++) {
for(int i=0;i<256*256;i++) {
BitArrays.csb((long) i);
}
}
long t1=System.nanoTime();
System.out.println("BitArrays.csb(long) "+((t1-t0)/(double) n)+"ns");
}
private static int lsb(int b) {
if(b==0) return 0;
int c=0;
while((b>>>c)!=0) c++;
return c;
}
public void testLsbByte() {
for(int i=0;i<256;i++) {
assertEquals("lsb("+Integer.toBinaryString(i)+")", lsb(i), BitArrays.lsb((byte) i));
}
}
public void testLsbShort() {
for(int i=0;i<256*256;i++) {
assertEquals("lsb("+Integer.toBinaryString(i)+")", lsb(i), BitArrays.lsb((short) i));
}
}
private static int rsb(int b) {
if(b==0) return -1;
int c=0;
while((b&(1<<c))==0) c++;
return c;
}
public void testRsbByte() {
for(int i=0;i<256;i++) {
assertEquals("rsb("+Integer.toBinaryString(i)+")", rsb(i), BitArrays.rsb((byte) i));
}
}
public void testRsbShort() {
for(int i=0;i<256*256;i++) {
assertEquals("rsb("+Integer.toBinaryString(i)+")", rsb(i), BitArrays.rsb((short) i));
}
}
private static long mp2(int b) {
long c=0;
for(int p=0;p<32;p++) {
// Compute the 2*p bit of c as the p-th bit i
c|=(b&(1<<p))<<p;
}
return c;
}
public void testMp2Byte() {
for(int i=0;i<256;i++) {
assertEquals("mp2("+Integer.toBinaryString(i)+")", mp2(i), BitArrays.mp2((byte) i));
}
}
public void testMp2Short() {
for(int i=0;i<256*256;i++) {
assertEquals("mp2("+Integer.toBinaryString(i)+")", mp2(i), BitArrays.mp2((short) i));
}
}
}