package org.opensha2.data; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import org.junit.Test; import com.google.common.primitives.Doubles; import com.google.common.primitives.Ints; import java.util.BitSet; import java.util.List; @SuppressWarnings("javadoc") public final class IndexingTests { @Test public final void testIndices() { // size - also tests from lower than to int[] expect = { 0, 1, 2, 3 }; assertArrayEquals(expect, Indexing.indices(4)); // to lower than from expect = new int[] { 3, 2, 1, 0 }; assertArrayEquals(expect, Indexing.indices(3, 0)); } @Test(expected = IllegalArgumentException.class) public final void testIndicesSizeLo_IAE() { Indexing.indices(0); } @Test(expected = IllegalArgumentException.class) public final void testIndicesSizeHi_IAE() { Indexing.indices(Indexing.INDICES_MAX_SIZE + 1); } @Test(expected = IllegalArgumentException.class) public final void testIndicesFrom_IAE() { Indexing.indices(-1, 10); } @Test(expected = IllegalArgumentException.class) public final void testIndicesTo_IAE() { Indexing.indices(10, -1); } @Test(expected = IllegalArgumentException.class) public final void testIndicesFromToSize_IAE() { Indexing.indices(0, Indexing.INDICES_MAX_SIZE + 1); } @Test public final void testSortedIndices() { List<Double> input = Doubles.asList(5, 2, 4, -1, Double.NaN, 10, Double.NEGATIVE_INFINITY); List<Integer> expectedAscending = Ints.asList(6, 3, 1, 2, 0, 5, 4); List<Integer> expectedDescending = Ints.asList(4, 5, 0, 2, 1, 3, 6); assertEquals(expectedAscending, Indexing.sortedIndices(input, true)); assertEquals(expectedDescending, Indexing.sortedIndices(input, false)); } @Test(expected = IllegalArgumentException.class) public final void testSortedIndices_IAE() { Indexing.sortedIndices(Doubles.asList(), true); } @Test public final void testBitsToIndices() { int[] expect = { 0, 1, 7, 9 }; BitSet bits = new BitSet(10); for (int i : expect) { bits.set(i); } assertArrayEquals(expect, Indexing.bitsToIndices(bits)); } @Test public final void testIndicesToBits() { List<Integer> indices = Ints.asList(0, 1, 7, 9); int capacity = 10; BitSet expect = new BitSet(capacity); for (int i : indices) { expect.set(i); } assertEquals(expect, Indexing.indicesToBits(indices, capacity)); } @Test(expected = IllegalArgumentException.class) public final void testIndicesToBitsSize_IAE() { Indexing.indicesToBits(Ints.asList(), -1); } @Test(expected = IndexOutOfBoundsException.class) public final void testIndicesToBitsBadIndices_IOBE() { Indexing.indicesToBits(Ints.asList(10), 10); } @Test public final void testMinMaxIndex() { // 1D double[] D1_1 = { 4, -1, 33, -8, 33 }; double[] D1_2 = {}; assertEquals(3, Indexing.minIndex(D1_1)); assertEquals(2, Indexing.maxIndex(D1_1)); assertEquals(-1, Indexing.minIndex(D1_2)); assertEquals(-1, Indexing.maxIndex(D1_2)); // 2D double[][] D2_1 = { D1_1, D1_1 }; double[][] D2_2 = { D1_2, D1_2 }; assertArrayEquals(new int[] { 0, 3 }, Indexing.minIndex(D2_1)); assertArrayEquals(new int[] { 0, 2 }, Indexing.maxIndex(D2_1)); assertArrayEquals(new int[] { -1, -1 }, Indexing.minIndex(D2_2)); assertArrayEquals(new int[] { -1, -1 }, Indexing.maxIndex(D2_2)); // 3D double[][][] D3_1 = { D2_1, D2_1 }; double[][][] D3_2 = { D2_2, D2_2 }; assertArrayEquals(new int[] { 0, 0, 3 }, Indexing.minIndex(D3_1)); assertArrayEquals(new int[] { 0, 0, 2 }, Indexing.maxIndex(D3_1)); assertArrayEquals(new int[] { -1, -1, -1 }, Indexing.minIndex(D3_2)); assertArrayEquals(new int[] { -1, -1, -1 }, Indexing.maxIndex(D3_2)); } }