package it.unimi.dsi.bits;
import it.unimi.dsi.bits.BitVectors;
import it.unimi.dsi.bits.BooleanListBitVector;
import it.unimi.dsi.bits.LongArrayBitVector;
import it.unimi.dsi.util.LongBigList;
import java.io.IOException;
import java.util.Random;
import junit.framework.TestCase;
public class LongArrayBitVectorTest extends TestCase {
public void testSetClearFlip() {
LongArrayBitVector v = LongArrayBitVector.getInstance();
v.size( 1 );
BitVectorTestCase.testSetClearFlip( v );
v.size( 64 );
BitVectorTestCase.testSetClearFlip( v );
v.size( 80 );
BitVectorTestCase.testSetClearFlip( v );
v.size( 150 );
BitVectorTestCase.testSetClearFlip( v );
BitVectorTestCase.testSetClearFlip( v.subVector( 0, 90 ) );
BitVectorTestCase.testSetClearFlip( v.subVector( 5, 90 ) );
}
public void testFillFlip() {
LongArrayBitVector v = LongArrayBitVector.getInstance();
v.size( 100 );
BitVectorTestCase.testFillFlip( v );
BitVectorTestCase.testFillFlip( v.subVector( 0, 90 ) );
BitVectorTestCase.testFillFlip( v.subVector( 5, 90 ) );
}
public void testRemove() {
BitVectorTestCase.testRemove( LongArrayBitVector.getInstance() );
LongArrayBitVector v = LongArrayBitVector.getInstance();
v.clear();
v.size( 65 );
v.set( 64 );
v.removeBoolean( 0 );
assertEquals( 0, v.bits()[ 1 ] );
v.clear();
}
public void testAdd() {
BitVectorTestCase.testAdd( LongArrayBitVector.getInstance() );
}
public void testCopy() {
BitVectorTestCase.testCopy( LongArrayBitVector.getInstance() );
}
public void its() {
BitVectorTestCase.its( LongArrayBitVector.getInstance() );
}
public void testLongBigListView() {
BitVectorTestCase.testLongBigListView( LongArrayBitVector.getInstance() );
}
public void testLongSetView() {
BitVectorTestCase.testLongSetView( LongArrayBitVector.getInstance() );
}
public void testFirstLastPrefix() {
BitVectorTestCase.testFirstLastPrefix( LongArrayBitVector.getInstance() );
}
public void testLogicOperators() {
BitVectorTestCase.testLogicOperators( LongArrayBitVector.getInstance() );
}
public void testCount() {
BitVectorTestCase.testCount( LongArrayBitVector.getInstance() );
}
public void testSerialisation() throws IOException, ClassNotFoundException {
BitVectorTestCase.testSerialisation( LongArrayBitVector.getInstance() );
}
public void testReplace() {
BitVectorTestCase.testReplace( LongArrayBitVector.getInstance() );
}
public void testGarbageInReplace() {
LongArrayBitVector b = LongArrayBitVector.ofLength( 128 );
b.set( 64 );
b.replace( BooleanListBitVector.getInstance().length( 64 ) );
assertEquals( 0, b.bits()[ 1 ] );
}
public void testHashCodeConsistency() {
LongArrayBitVector b = LongArrayBitVector.of( 0, 1, 1, 0, 0, 1 );
assertEquals( BooleanListBitVector.getInstance().replace( b ).hashCode(), b.hashCode() );
b = LongArrayBitVector.wrap( new long[]{ 0x234598729872983L, 0x234598729872983L, 0x234598729872983L, 0xFFFF }, 222 );
assertEquals( BooleanListBitVector.getInstance().replace( b ).hashCode(), b.hashCode() );
assertEquals( BitVectors.EMPTY_VECTOR.hashCode(), b.length( 0 ).hashCode() );
}
public void testAppend() {
BitVectorTestCase.testAppend( LongArrayBitVector.getInstance() );
}
public void testTrim() {
assertTrue( LongArrayBitVector.getInstance( 100 ).trim() );
assertFalse( LongArrayBitVector.getInstance( 100 ).length( 65 ).trim() );
assertFalse( LongArrayBitVector.getInstance( 0 ).trim() );
}
public void testClone() throws CloneNotSupportedException {
LongArrayBitVector v = LongArrayBitVector.getInstance().length( 100 );
for( int i = 0; i < 50; i++ ) v.set( i * 2 );
assertEquals( v, v.clone() );
}
public void testEquals() {
LongArrayBitVector v = LongArrayBitVector.getInstance().length( 100 );
for( int i = 0; i < 50; i++ ) v.set( i * 2 );
LongArrayBitVector w = v.copy();
assertEquals( v, w );
w.length( 101 );
assertFalse( v.equals( w ) );
w.length( 100 );
w.set( 3 );
assertFalse( v.equals( w ) );
}
public void testConstructor() {
final long bits[] = { 0, 1, 0 };
boolean ok = false;
try {
LongArrayBitVector.wrap( bits, 64 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
LongArrayBitVector.wrap( bits, 65 );
LongArrayBitVector.wrap( bits, 128 );
ok = false;
try {
LongArrayBitVector.wrap( bits, 193 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
bits[ 0 ] = 10;
bits[ 1 ] = 0;
ok = false;
try {
LongArrayBitVector.wrap( bits, 3 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
LongArrayBitVector.wrap( bits, 4 );
bits[ 2 ] = 1;
ok = false;
try {
LongArrayBitVector.wrap( bits, 4 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
}
public void testLongBig() {
LongArrayBitVector v = LongArrayBitVector.getInstance( 16 * 1024 );
LongBigList l = v.asLongBigList( Short.SIZE );
l.set( 0, 511 );
assertEquals( 511, v.bits()[ 0 ] );
}
public void testCopyAnotherVector() {
Random r = new Random( 1 );
LongArrayBitVector bv = LongArrayBitVector.getInstance( 200 );
for( int i = 0; i < 100; i++ ) bv.add( r.nextBoolean() );
assertEquals( LongArrayBitVector.copy( bv ), bv );
bv = LongArrayBitVector.getInstance( 256 );
for( int i = 0; i < 256; i++ ) bv.add( r.nextBoolean() );
assertEquals( LongArrayBitVector.copy( bv ), bv );
bv = LongArrayBitVector.getInstance( 10 );
for( int i = 0; i < 10; i++ ) bv.add( r.nextBoolean() );
assertEquals( LongArrayBitVector.copy( bv ), bv );
BooleanListBitVector bbv = BooleanListBitVector.getInstance( 200 );
for( int i = 0; i < 100; i++ ) bbv.add( r.nextBoolean() );
assertEquals( LongArrayBitVector.copy( bbv ), bbv );
bbv = BooleanListBitVector.getInstance( 256 );
for( int i = 0; i < 256; i++ ) bbv.add( r.nextBoolean() );
assertEquals( LongArrayBitVector.copy( bbv ), bbv );
bbv = BooleanListBitVector.getInstance( 10 );
for( int i = 0; i < 10; i++ ) bbv.add( r.nextBoolean() );
assertEquals( LongArrayBitVector.copy( bbv ), bbv );
}
public void testReplaceLongArrayBitVector() {
LongArrayBitVector b = LongArrayBitVector.of( 0, 1, 1 );
assertEquals( b, LongArrayBitVector.getInstance().replace( b ) );
}
public void testLengthClearsBits() {
LongArrayBitVector bv = LongArrayBitVector.getInstance().length( 100 );
bv.fill( true );
bv.length( 0 );
bv.append( 0, 1 );
assertFalse( bv.getBoolean( 0 ) );
}
}