package it.unimi.dsi.bits; import it.unimi.dsi.bits.AbstractBitVector; import it.unimi.dsi.bits.BitVector; import it.unimi.dsi.bits.BooleanListBitVector; import it.unimi.dsi.bits.LongArrayBitVector; import junit.framework.TestCase; public class AbstractBitVectorTest extends TestCase { private final static class MinimalAlternatingBitVector extends AbstractBitVector { private long length = 129; public boolean getBoolean( long index ) { return index % 2 != 0; } public long length() { return length; } public MinimalAlternatingBitVector length( long newLength ) { this.length = newLength; return this; } } public void testUnsupported() { final BitVector v = new MinimalAlternatingBitVector(); v.getBoolean( 0 ); v.length(); boolean ok = false; try { v.removeBoolean( 0 ); } catch( UnsupportedOperationException e ) { ok = true; } assertTrue( ok ); ok = false; try { v.set( 0, 0 ); } catch( UnsupportedOperationException e ) { ok = true; } assertTrue( ok ); ok = false; try { v.add( 0, 0 ); } catch( UnsupportedOperationException e ) { ok = true; } assertTrue( ok ); v.length( 1L<<32 ); ok = false; try { v.size(); } catch( IllegalStateException e ) { ok = true; } assertTrue( ok ); ok = false; try { v.asLongBigList( 1 ).size(); } catch( IllegalStateException e ) { ok = true; } assertTrue( ok ); } public void testCopy() { assertEquals( new MinimalAlternatingBitVector(), new MinimalAlternatingBitVector().copy() ); assertEquals( new MinimalAlternatingBitVector().subVector( 2, 20 ), new MinimalAlternatingBitVector().subVector( 2, 20 ).copy() ); assertEquals( new MinimalAlternatingBitVector().subVector( 5, 12 ), new MinimalAlternatingBitVector().subVector( 2, 20 ).subVector( 3, 10 ) ); assertEquals( new MinimalAlternatingBitVector().subVector( 5, 12 ), new MinimalAlternatingBitVector().subVector( 2, 20 ).subVector( 3, 10 ).copy() ); assertEquals( new MinimalAlternatingBitVector().subList( 2, 20 ), new MinimalAlternatingBitVector().subList( 2, 20 ).copy() ); assertEquals( new MinimalAlternatingBitVector().subList( 5, 12 ), new MinimalAlternatingBitVector().subList( 2, 20 ).subList( 3, 10 ) ); assertEquals( new MinimalAlternatingBitVector().subList( 5, 12 ), new MinimalAlternatingBitVector().subList( 2, 20 ).subList( 3, 10 ).copy() ); } public void testCount() { MinimalAlternatingBitVector v = new MinimalAlternatingBitVector(); assertEquals( v.length() / 2, v.count() ); } public void testRemove() { BitVectorTestCase.testRemove( new AbstractBitVector.SubBitVector( BooleanListBitVector.getInstance().length( 1000 ), 10, 100 ) ); } public void testAdd() { BitVectorTestCase.testAdd( new AbstractBitVector.SubBitVector( BooleanListBitVector.getInstance().length( 1000 ), 10, 100 ) ); } public void testCompareTo() { MinimalAlternatingBitVector v = new MinimalAlternatingBitVector(); LongArrayBitVector w = LongArrayBitVector.copy( v ); assertEquals( 0, w.compareTo( v ) ); assertEquals( 0, v.compareTo( w ) ); w.set( 100 ); assertEquals( 1, w.compareTo( v ) ); assertEquals( -1, v.compareTo( w ) ); w = LongArrayBitVector.ofLength( 10 ); assertEquals( -1, w.compareTo( v ) ); assertEquals( 1, v.compareTo( w ) ); w = LongArrayBitVector.of( 1 ); assertEquals( 1, w.compareTo( v ) ); assertEquals( -1, v.compareTo( w ) ); } }