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