package jalview.util; import java.util.Arrays; import org.junit.Assert; import org.junit.Test; public class MapListTest { @Test public void testSomething() { MapList ml = new MapList(new int[] { 1, 5, 10, 15, 25, 20 }, new int[] { 51, 1 }, 1, 3); MapList ml1 = new MapList(new int[] { 1, 3, 17, 4 }, new int[] { 51, 1 }, 1, 3); MapList ml2 = new MapList(new int[] { 1, 60 }, new int[] { 1, 20 }, 3, 1); // test internal consistency int to[] = new int[51]; testMap(ml, 1, 60); MapList mldna = new MapList(new int[] { 2, 2, 6, 8, 12, 16 }, new int[] { 1, 3 }, 3, 1); int[] frm = mldna.locateInFrom(1, 1); testLocateFrom(mldna, 1, 1, new int[] { 2, 2, 6, 7 }); testMap(mldna, 1, 3); /* * for (int from=1; from<=51; from++) { int[] too=ml.shiftTo(from); int[] * toofrom=ml.shiftFrom(too[0]); * System.out.println("ShiftFrom("+from+")=="+too[0]+" % * "+too[1]+"\t+-+\tShiftTo("+too[0]+")=="+toofrom[0]+" % "+toofrom[1]); } */ } private static void testLocateFrom(MapList mldna, int i, int j, int[] ks) { int[] frm = mldna.locateInFrom(i, j); Assert.assertEquals("Failed test locate from " + i + " to " + j, Arrays.toString(frm), Arrays.toString(ks)); } /** * test routine. not incremental. * * @param ml * @param fromS * @param fromE */ private void testMap(MapList ml, int fromS, int fromE) { // todo convert to JUnit style tests for (int from = 1; from <= 25; from++) { int[] too = ml.shiftFrom(from); System.out.print("ShiftFrom(" + from + ")=="); if (too == null) { System.out.print("NaN\n"); } else { System.out.print(too[0] + " % " + too[1] + " (" + too[2] + ")"); System.out.print("\t+--+\t"); int[] toofrom = ml.shiftTo(too[0]); if (toofrom != null) { if (toofrom[0] != from) { System.err.println("Mapping not reflexive:" + from + " " + too[0] + "->" + toofrom[0]); } System.out.println("ShiftTo(" + too[0] + ")==" + toofrom[0] + " % " + toofrom[1] + " (" + toofrom[2] + ")"); } else { System.out.println("ShiftTo(" + too[0] + ")==" + "NaN! - not Bijective Mapping!"); } } } int mmap[][] = ml.makeFromMap(); System.out.println("FromMap : (" + mmap[0][0] + " " + mmap[0][1] + " " + mmap[0][2] + " " + mmap[0][3] + " "); for (int i = 1; i <= mmap[1].length; i++) { if (mmap[1][i - 1] == -1) { System.out.print(i + "=XXX"); } else { System.out.print(i + "=" + (mmap[0][2] + mmap[1][i - 1])); } if (i % 20 == 0) { System.out.print("\n"); } else { System.out.print(","); } } // test range function System.out.print("\nTest locateInFrom\n"); { int f = mmap[0][2], t = mmap[0][3]; while (f <= t) { System.out.println("Range " + f + " to " + t); int rng[] = ml.locateInFrom(f, t); if (rng != null) { for (int i = 0; i < rng.length; i++) { System.out.print(rng[i] + ((i % 2 == 0) ? "," : ";")); } } else { System.out.println("No range!"); } System.out.print("\nReversed\n"); rng = ml.locateInFrom(t, f); if (rng != null) { for (int i = 0; i < rng.length; i++) { System.out.print(rng[i] + ((i % 2 == 0) ? "," : ";")); } } else { System.out.println("No range!"); } System.out.print("\n"); f++; t--; } } System.out.print("\n"); mmap = ml.makeToMap(); System.out.println("ToMap : (" + mmap[0][0] + " " + mmap[0][1] + " " + mmap[0][2] + " " + mmap[0][3] + " "); for (int i = 1; i <= mmap[1].length; i++) { if (mmap[1][i - 1] == -1) { System.out.print(i + "=XXX"); } else { System.out.print(i + "=" + (mmap[0][2] + mmap[1][i - 1])); } if (i % 20 == 0) { System.out.print("\n"); } else { System.out.print(","); } } System.out.print("\n"); // test range function System.out.print("\nTest locateInTo\n"); { int f = mmap[0][2], t = mmap[0][3]; while (f <= t) { System.out.println("Range " + f + " to " + t); int rng[] = ml.locateInTo(f, t); if (rng != null) { for (int i = 0; i < rng.length; i++) { System.out.print(rng[i] + ((i % 2 == 0) ? "," : ";")); } } else { System.out.println("No range!"); } System.out.print("\nReversed\n"); rng = ml.locateInTo(t, f); if (rng != null) { for (int i = 0; i < rng.length; i++) { System.out.print(rng[i] + ((i % 2 == 0) ? "," : ";")); } } else { System.out.println("No range!"); } f++; t--; System.out.print("\n"); } } } }