package it.unimi.dsi.util; import it.unimi.dsi.bits.BitVector; import it.unimi.dsi.bits.LongArrayBitVector; import it.unimi.dsi.bits.TransformationStrategies; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectLists; import it.unimi.dsi.util.ImmutableBinaryTrie; import java.util.List; import junit.framework.TestCase; public class ImmutableBinaryTrieTest extends TestCase { public void testImmutableBinaryTrie( List<String> strings ) { ObjectArrayList<BitVector> vectors = new ObjectArrayList<BitVector>(); for( int i = 0; i < strings.size(); i++ ) { BitVector v = LongArrayBitVector.ofLength( strings.get( i ).length() ); for( int j = 0; j < strings.get( i ).length(); j++ ) if ( strings.get( i ).charAt( j ) == '1' ) v.set( j ); vectors.add( v ); } ImmutableBinaryTrie<BitVector> t = new ImmutableBinaryTrie<BitVector>( vectors, TransformationStrategies.identity() ); assertEquals( vectors.size(), t.size() ); for( int i = 0; i < vectors.size(); i++ ) assertEquals( vectors.get( i ).toString(), i, t.getLong( vectors.get( i ) ) ); } @SuppressWarnings("unchecked") public void testEmptyImmutableBinaryTrie() { testImmutableBinaryTrie( ObjectLists.EMPTY_LIST ); } public void testSingletonImmutableBinaryTrie() { testImmutableBinaryTrie( ObjectLists.singleton( STRINGS[ 0 ] ) ); } public void testEmptyStringSingletonImmutableBinaryTrie() { testImmutableBinaryTrie( ObjectLists.singleton( "" ) ); } public void testDoubletonImmutableBinaryTrie() { testImmutableBinaryTrie( ObjectArrayList.wrap( STRINGS, 2 ) ); } public void testImmutableBinaryTrie() { testImmutableBinaryTrie( ObjectArrayList.wrap( STRINGS ) ); } public final static String[] STRINGS = { "000000", "000011100001100", "000110001010011000110010100011001", "000111001100011111110011", "00100000100101011", "0010001111011110111101100011", "001010001100111111110101010010100", "0010101001100001010001", "0010110101000011000010100010110000111101010", "0010110101100101101010", "001101001101011001101001100011", "00110111111100100110011100100100111100100", "0100000111011111110111101100011101", "010011111010101000011111011111110011101010010100", "0101001110000101001101", "0101100001100001100001010011000110001", "01011001111110110111100001", "010111111101000110101100", "0111001111001001100100101001110", "1000010001110111101000101110011111011100100", "1000011111110110010110101101", "100010100110111011010", "1000111110100001111001111010100110011111001111111110011", "1001010011111100110110000101001110111001001100", "1010111011100111000101111111110111111100001", "10110010011001101101010010001100001011111111101111111000011110011", "10110101010000101100101111111011", "1011011000100111110011110101110101001011", "101101111000100001001000010110010101111100001", "110001000010101001001110101110101001011", "110001111010100110011111000011110011", "11010010101001000011110011", "11010100110010110010010011110011", "11011001000110000010100", "110111100001100110011010", "11011111010101001011", "11100100110111100001", "111011110111011101010", "11111001001000011010001010100100010100100111100100", "111110101010000111100001", }; }