package it.unimi.dsi.util; import it.unimi.dsi.fastutil.Hash; import it.unimi.dsi.fastutil.io.BinIO; import it.unimi.dsi.fastutil.objects.Object2LongOpenCustomHashMap; import it.unimi.dsi.lang.MutableString; import it.unimi.dsi.util.FrontCodedStringList; import it.unimi.dsi.util.LiterallySignedStringMap; import java.io.File; import java.io.IOException; import java.io.Serializable; import java.util.Arrays; import java.util.Collections; import junit.framework.TestCase; public class LiterallySignedStringMapTest extends TestCase { private final static class CharSequenceStrategy implements Hash.Strategy<CharSequence>, Serializable { private static final long serialVersionUID = 1L; public boolean equals( CharSequence a, CharSequence b ) { return a.toString().equals( b.toString() ); } public int hashCode( CharSequence o ) { return o.toString().hashCode(); } } @SuppressWarnings("unchecked") public void testNumbers() throws IOException, ClassNotFoundException { for( int n = 10; n < 10000; n *= 10 ) { String[] s = new String[ n ]; for( int i = s.length; i-- != 0; ) s[ i ] = Integer.toString( i ); Collections.shuffle( Arrays.asList( s ) ); FrontCodedStringList fcl = new FrontCodedStringList( Arrays.asList( s ), 8, true ); // Test with mph Object2LongOpenCustomHashMap<CharSequence> mph = new Object2LongOpenCustomHashMap<CharSequence>( new CharSequenceStrategy()); mph.defaultReturnValue( -1 ); for( int i = 0; i < s.length; i++ ) mph.put( new MutableString( s[ i ] ), i ); LiterallySignedStringMap map = new LiterallySignedStringMap( mph, fcl ); for( int i = s.length; i-- != 0; ) assertEquals( i, map.getLong( s[ i ] ) ); for( int i = s.length + n; i-- != s.length; ) assertEquals( -1, map.getLong( Integer.toString( i ) ) ); File temp = File.createTempFile( getClass().getSimpleName(), "test" ); temp.deleteOnExit(); BinIO.storeObject( map, temp ); map = (LiterallySignedStringMap)BinIO.loadObject( temp ); for( int i = s.length; i-- != 0; ) assertEquals( i, map.getLong( s[ i ] ) ); for( int i = s.length + n; i-- != s.length; ) assertEquals( -1, map.getLong( Integer.toString( i ) ) ); } } }