package mil.nga.giat.geowave.core.index.lexicoder; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.junit.Assert; import org.junit.Test; public abstract class AbstractLexicoderTest<T extends Number & Comparable<T>> { private NumberLexicoder<T> lexicoder; private T expectedMin; private T expectedMax; private T[] unsortedVals; private Comparator<byte[]> comparator; public AbstractLexicoderTest( final NumberLexicoder<T> lexicoder, final T expectedMin, final T expectedMax, final T[] unsortedVals, final Comparator<byte[]> comparator ) { super(); this.lexicoder = lexicoder; this.expectedMin = expectedMin; this.expectedMax = expectedMax; this.unsortedVals = unsortedVals; this.comparator = comparator; } @Test public void testRanges() { Assert.assertTrue(lexicoder.getMinimumValue().equals( expectedMin)); Assert.assertTrue(lexicoder.getMaximumValue().equals( expectedMax)); } @Test public void testSortOrder() { final List<T> list = Arrays.asList(unsortedVals); final Map<byte[], T> sortedByteArrayToRawTypeMappings = new TreeMap<>( comparator); for (final T d : list) { sortedByteArrayToRawTypeMappings.put( lexicoder.toByteArray(d), d); } Collections.sort(list); int idx = 0; final Set<byte[]> sortedByteArrays = sortedByteArrayToRawTypeMappings.keySet(); for (final byte[] byteArray : sortedByteArrays) { final T value = sortedByteArrayToRawTypeMappings.get(byteArray); Assert.assertTrue(value.equals(list.get(idx++))); } } }