package jalview.analysis; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; import org.testng.annotations.Test; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import java.util.Hashtable; public class AAFrequencyTest { private static final String C = AAFrequency.MAXCOUNT; private static final String R = AAFrequency.MAXRESIDUE; private static final String G = AAFrequency.PID_GAPS; private static final String N = AAFrequency.PID_NOGAPS; private static final String P = AAFrequency.PROFILE; @Test public void testCalculate_noProfile() { SequenceI seq1 = new Sequence("Seq1", "CAGT"); SequenceI seq2 = new Sequence("Seq2", "CACT"); SequenceI seq3 = new Sequence("Seq3", "C--G"); SequenceI seq4 = new Sequence("Seq4", "CA-t"); SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 }; Hashtable[] result = new Hashtable[seq1.getLength()]; AAFrequency.calculate(seqs, 0, seq1.getLength(), result, false); // col 0 is 100% C Hashtable col = result[0]; assertEquals(100f, (Float) col.get(G), 0.0001f); assertEquals(100f, (Float) col.get(N), 0.0001f); assertEquals(4, col.get(C)); assertEquals("C", col.get(R)); assertNull(col.get(P)); // col 1 is 75% A col = result[1]; assertEquals(75f, (Float) col.get(G), 0.0001f); assertEquals(100f, (Float) col.get(N), 0.0001f); assertEquals(3, col.get(C)); assertEquals("A", col.get(R)); // col 2 is 50% G 50% C or 25/25 counting gaps col = result[2]; assertEquals(25f, (Float) col.get(G), 0.0001f); assertEquals(50f, (Float) col.get(N), 0.0001f); assertEquals(1, col.get(C)); assertEquals("CG", col.get(R)); // col 3 is 75% T 25% G col = result[3]; assertEquals(75f, (Float) col.get(G), 0.0001f); assertEquals(75f, (Float) col.get(N), 0.0001f); assertEquals(3, col.get(C)); assertEquals("T", col.get(R)); } @Test public void testCalculate_withProfile() { SequenceI seq1 = new Sequence("Seq1", "CAGT"); SequenceI seq2 = new Sequence("Seq2", "CACT"); SequenceI seq3 = new Sequence("Seq3", "C--G"); SequenceI seq4 = new Sequence("Seq4", "CA-t"); SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 }; Hashtable[] result = new Hashtable[seq1.getLength()]; AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true); int[][] profile = (int[][]) result[0].get(P); assertEquals(4, profile[0]['C']); assertEquals(4, profile[1][0]); // no of seqs assertEquals(4, profile[1][1]); // nongapped in column profile = (int[][]) result[1].get(P); assertEquals(3, profile[0]['A']); assertEquals(4, profile[1][0]); assertEquals(3, profile[1][1]); profile = (int[][]) result[2].get(P); assertEquals(1, profile[0]['G']); assertEquals(1, profile[0]['C']); assertEquals(4, profile[1][0]); assertEquals(2, profile[1][1]); profile = (int[][]) result[3].get(P); assertEquals(3, profile[0]['T']); assertEquals(1, profile[0]['G']); assertEquals(4, profile[1][0]); assertEquals(4, profile[1][1]); } @Test public void testCalculate_withProfileTiming() { SequenceI seq1 = new Sequence("Seq1", "CAGT"); SequenceI seq2 = new Sequence("Seq2", "CACT"); SequenceI seq3 = new Sequence("Seq3", "C--G"); SequenceI seq4 = new Sequence("Seq4", "CA-t"); SequenceI[] seqs = new SequenceI[] { seq1, seq2, seq3, seq4 }; Hashtable[] result = new Hashtable[seq1.getLength()]; // ensure class loaded and initialized AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true); int reps = 100000; long start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true); } System.out.println(System.currentTimeMillis() - start); } @Test public void testGetPercentageFormat() { assertNull(AAFrequency.getPercentageFormat(0)); assertNull(AAFrequency.getPercentageFormat(99)); assertEquals("%3.1f", AAFrequency.getPercentageFormat(100).toString()); assertEquals("%3.1f", AAFrequency.getPercentageFormat(999).toString()); assertEquals("%3.2f", AAFrequency.getPercentageFormat(1000).toString()); assertEquals("%3.2f", AAFrequency.getPercentageFormat(9999).toString()); } }