JAL-1270 test suits import order refactor
[jalview.git] / test / jalview / analysis / AAFrequencyTest.java
1
2 package jalview.analysis;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertNull;
5
6 import jalview.datamodel.Sequence;
7 import jalview.datamodel.SequenceI;
8
9 import java.util.Hashtable;
10
11 import org.testng.annotations.Test;
12
13 public class AAFrequencyTest
14 {
15   private static final String C = AAFrequency.MAXCOUNT;
16
17   private static final String R = AAFrequency.MAXRESIDUE;
18
19   private static final String G = AAFrequency.PID_GAPS;
20
21   private static final String N = AAFrequency.PID_NOGAPS;
22
23   private static final String P = AAFrequency.PROFILE;
24
25   @Test
26   public void testCalculate_noProfile()
27   {
28     SequenceI seq1 = new Sequence("Seq1", "CAGT");
29     SequenceI seq2 = new Sequence("Seq2", "CACT");
30     SequenceI seq3 = new Sequence("Seq3", "C--G");
31     SequenceI seq4 = new Sequence("Seq4", "CA-t");
32     SequenceI[] seqs = new SequenceI[]
33     { seq1, seq2, seq3, seq4 };
34     Hashtable[] result = new Hashtable[seq1.getLength()];
35     
36     AAFrequency.calculate(seqs, 0, seq1.getLength(), result, false);
37
38     // col 0 is 100% C
39     Hashtable col = result[0];
40     assertEquals(100f, (Float) col.get(G), 0.0001f);
41     assertEquals(100f, (Float) col.get(N), 0.0001f);
42     assertEquals(4, col.get(C));
43     assertEquals("C", col.get(R));
44     assertNull(col.get(P));
45
46     // col 1 is 75% A
47     col = result[1];
48     assertEquals(75f, (Float) col.get(G), 0.0001f);
49     assertEquals(100f, (Float) col.get(N), 0.0001f);
50     assertEquals(3, col.get(C));
51     assertEquals("A", col.get(R));
52
53     // col 2 is 50% G 50% C or 25/25 counting gaps
54     col = result[2];
55     assertEquals(25f, (Float) col.get(G), 0.0001f);
56     assertEquals(50f, (Float) col.get(N), 0.0001f);
57     assertEquals(1, col.get(C));
58     assertEquals("CG", col.get(R));
59
60     // col 3 is 75% T 25% G
61     col = result[3];
62     assertEquals(75f, (Float) col.get(G), 0.0001f);
63     assertEquals(75f, (Float) col.get(N), 0.0001f);
64     assertEquals(3, col.get(C));
65     assertEquals("T", col.get(R));
66   }
67
68   @Test
69   public void testCalculate_withProfile()
70   {
71     SequenceI seq1 = new Sequence("Seq1", "CAGT");
72     SequenceI seq2 = new Sequence("Seq2", "CACT");
73     SequenceI seq3 = new Sequence("Seq3", "C--G");
74     SequenceI seq4 = new Sequence("Seq4", "CA-t");
75     SequenceI[] seqs = new SequenceI[]
76     { seq1, seq2, seq3, seq4 };
77     Hashtable[] result = new Hashtable[seq1.getLength()];
78
79     AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true);
80     int[][] profile = (int[][]) result[0].get(P);
81     assertEquals(4, profile[0]['C']);
82     assertEquals(4, profile[1][0]); // no of seqs
83     assertEquals(4, profile[1][1]); // nongapped in column
84
85     profile = (int[][]) result[1].get(P);
86     assertEquals(3, profile[0]['A']);
87     assertEquals(4, profile[1][0]);
88     assertEquals(3, profile[1][1]);
89
90     profile = (int[][]) result[2].get(P);
91     assertEquals(1, profile[0]['G']);
92     assertEquals(1, profile[0]['C']);
93     assertEquals(4, profile[1][0]);
94     assertEquals(2, profile[1][1]);
95
96     profile = (int[][]) result[3].get(P);
97     assertEquals(3, profile[0]['T']);
98     assertEquals(1, profile[0]['G']);
99     assertEquals(4, profile[1][0]);
100     assertEquals(4, profile[1][1]);
101   }
102
103   @Test
104   public void testCalculate_withProfileTiming()
105   {
106     SequenceI seq1 = new Sequence("Seq1", "CAGT");
107     SequenceI seq2 = new Sequence("Seq2", "CACT");
108     SequenceI seq3 = new Sequence("Seq3", "C--G");
109     SequenceI seq4 = new Sequence("Seq4", "CA-t");
110     SequenceI[] seqs = new SequenceI[]
111     { seq1, seq2, seq3, seq4 };
112     Hashtable[] result = new Hashtable[seq1.getLength()];
113
114     // ensure class loaded and initialized
115     AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true);
116     int reps = 100000;
117     long start = System.currentTimeMillis();
118     for (int i = 0; i < reps; i++)
119     {
120       AAFrequency.calculate(seqs, 0, seq1.getLength(), result, true);
121     }
122     System.out.println(System.currentTimeMillis() - start);
123   }
124
125   @Test
126   public void testGetPercentageFormat()
127   {
128     assertNull(AAFrequency.getPercentageFormat(0));
129     assertNull(AAFrequency.getPercentageFormat(99));
130     assertEquals("%3.1f", AAFrequency.getPercentageFormat(100).toString());
131     assertEquals("%3.1f", AAFrequency.getPercentageFormat(999).toString());
132     assertEquals("%3.2f", AAFrequency.getPercentageFormat(1000).toString());
133     assertEquals("%3.2f", AAFrequency.getPercentageFormat(9999).toString());
134   }
135 }