package it.unimi.dsi.bits; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import it.unimi.dsi.bits.BitVector; import it.unimi.dsi.bits.BitVectors; import it.unimi.dsi.bits.LongArrayBitVector; import it.unimi.dsi.fastutil.io.FastByteArrayInputStream; import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream; import it.unimi.dsi.io.OfflineIterable; import junit.framework.TestCase; public class BitVectorsTest extends TestCase { public void testReadWriteFast() throws IOException { final FastByteArrayOutputStream fbaos = new FastByteArrayOutputStream(); final DataOutputStream dos = new DataOutputStream( fbaos ); final LongArrayBitVector labv = LongArrayBitVector.getInstance(); final BitVector[] a = new BitVector[] { BitVectors.ZERO, BitVectors.ONE, BitVectors.EMPTY_VECTOR, LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAAL }, 64 ), LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAL }, 60 ), LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAAL }, 128 ), LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAL }, 124 ) }; for( BitVector bv: a ) { BitVectors.writeFast( bv, dos ); dos.close(); assertEquals( bv, BitVectors.readFast( new DataInputStream( new FastByteArrayInputStream( fbaos.array ) ) ) ); fbaos.reset(); } for( BitVector bv: a ) { BitVectors.writeFast( bv, dos ); dos.close(); assertEquals( bv, BitVectors.readFast( new DataInputStream( new FastByteArrayInputStream( fbaos.array ) ), labv ) ); fbaos.reset(); } } public void testMakeOffline() throws IOException { final BitVector[] a = new BitVector[] { BitVectors.ZERO, BitVectors.ONE, BitVectors.EMPTY_VECTOR, LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAAL }, 64 ), LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAL }, 60 ), LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAAL }, 128 ), LongArrayBitVector.wrap( new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAL }, 124 ) }; OfflineIterable<BitVector,LongArrayBitVector> iterable = new OfflineIterable<BitVector, LongArrayBitVector>( BitVectors.OFFLINE_SERIALIZER, LongArrayBitVector.getInstance() ); iterable.addAll( Arrays.asList( a ) ); Iterator<LongArrayBitVector> iterator = iterable.iterator(); for( int i = 0; i < a.length; i++ ) assertEquals( a[ i ], iterator.next() ); assertFalse( iterator.hasNext() ); } }