package it.unimi.dsi.util; import it.unimi.dsi.util.CircularCharArrayBuffer; import java.util.Iterator; import java.util.Random; import junit.framework.TestCase; import org.apache.commons.collections.buffer.CircularFifoBuffer; import org.apache.commons.lang.RandomStringUtils; public class CircularCharArrayBufferTest extends TestCase { static Random r = new Random( 0 ); static int[] sizes = { 1, 5, 10, 100, 500, 1000 }; private static void copyInto( CircularFifoBuffer cfb, char[] c, int offset, int length ) { int howMany = Math.min( length, cfb.size() ); Iterator<?> it = cfb.iterator(); for ( int i = 0; i < howMany; i++ ) c[ offset + i ] = ((Character)it.next()).charValue(); } @SuppressWarnings("boxing") public void testAdd() { for ( int size: sizes ) { System.out.printf( "CIRCULAR BUFFER OF SIZE %d: ", size ); CircularFifoBuffer cfb = new CircularFifoBuffer( size ); CircularCharArrayBuffer ccab = new CircularCharArrayBuffer( size ); int times = r.nextInt( 50 ); System.out.println( times + " times" ); for ( int j = 0; j < times; j++ ) { char[] c = new char[ 1 + r.nextInt( 1 + size * 10 / 2 ) ]; int offset = r.nextInt( c.length ); int len = r.nextInt( c.length - offset ); System.arraycopy( RandomStringUtils.randomAlphanumeric( c.length ).toCharArray(), 0, c, 0, c.length ); for ( int i = offset; i < offset + len; i++ ) cfb.add( new Character( c[ i ] ) ); ccab.add( c, offset, len ); char[] res = new char[ cfb.size() ]; copyInto( cfb, res, 0, cfb.size() ); char[] res2 = new char[ cfb.size() ]; ccab.toCharArray( res2, 0, cfb.size() ); assertEquals( new String( res ), new String( res2 ) ); } } } }