package mikera.vectorz;
import static org.junit.Assert.*;
import org.junit.Test;
public class BitVectorTest {
@Test
public void testSet() {
BitVector b=new BitVector(3);
assertEquals(BitVector.of(0,0,0),b);
b.set(0,-0.2);
b.set(1,0.5);
b.set(2,0.9);
assertEquals(BitVector.of(0,1,1),b);
}
@Test
public void testSubVector() {
BitVector b=BitVector.of(0,1,0);
AVector sb=b.subVector(1, 1);
assertEquals(Vector.of(1),sb);
assertTrue(sb.isView());
}
@Test
public void testConstruct() {
BitVector b=new BitVector(3);
assertEquals(BitVector.of(0,0,0),b);
assertEquals(Vector.of(0,0,0),b);
assertEquals(Vector.of(1,0,1,0,1,1),BitVector.of(1,0,2,-3,0.51,0.49));
}
@Test
public void testElementSum() {
assertEquals(3,Long.bitCount(7));
assertEquals(1.0,BitVector.of(1).elementSum(),0.00001);
assertEquals(2.0,BitVector.of(0,1,0,1).elementSum(),0.00001);
assertEquals(0.0,BitVector.of(0,0,0).elementSum(),0.00001);
assertEquals(1.0,BitVector.of(0,1,0).elementSum(),0.00001);
}
@Test
public void testBigBitVector() {
AVector rv=Vectorz.createUniformRandomVector(1000);
rv.sub(0.5);
BitVector b=BitVector.create(rv);
AVector v=b.clone();
AVector v2=BitVector.create(b).clone();
assertEquals(v,v2);
b.set(v2);
assertEquals(v,b);
// should have fully mutable vectors after clone
v.add(b);
v2.multiply(2.0);
assertEquals(v,v2);
assertEquals(2.0,Vectorz.maxValue(v),0.0);
assertEquals(0.0,Vectorz.minValue(v),0.0);
assertEquals(b.dotProduct(b),b.elementSquaredSum(),0.0);
}
}