d7e0e0bcde36dbeea1996aa3a4ac8d900af001d2
[jalview.git] / test / jalview / schemes / ResiduePropertiesTest.java
1 package jalview.schemes;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertNull;
5
6 import java.util.Collections;
7 import java.util.List;
8
9 import org.testng.annotations.Test;
10
11 public class ResiduePropertiesTest
12 {
13
14   /**
15    * Test 'standard' codon translations (no ambiguity codes)
16    */
17   @Test
18   public void testCodonTranslate()
19   {
20     // standard translation table order column 1/2/3/4
21     assertEquals("F", ResidueProperties.codonTranslate("TTT"));
22     assertEquals("F", ResidueProperties.codonTranslate("TTC"));
23     assertEquals("L", ResidueProperties.codonTranslate("TTA"));
24     assertEquals("L", ResidueProperties.codonTranslate("TTG"));
25     assertEquals("L", ResidueProperties.codonTranslate("CTT"));
26     assertEquals("L", ResidueProperties.codonTranslate("CTC"));
27     assertEquals("L", ResidueProperties.codonTranslate("CTA"));
28     assertEquals("L", ResidueProperties.codonTranslate("CTG"));
29     assertEquals("I", ResidueProperties.codonTranslate("ATT"));
30     assertEquals("I", ResidueProperties.codonTranslate("ATC"));
31     assertEquals("I", ResidueProperties.codonTranslate("ATA"));
32     assertEquals("M", ResidueProperties.codonTranslate("ATG"));
33     assertEquals("V", ResidueProperties.codonTranslate("GTT"));
34     assertEquals("V", ResidueProperties.codonTranslate("GTC"));
35     assertEquals("V", ResidueProperties.codonTranslate("GTA"));
36     assertEquals("V", ResidueProperties.codonTranslate("GTG"));
37     assertEquals("S", ResidueProperties.codonTranslate("TCT"));
38     assertEquals("S", ResidueProperties.codonTranslate("TCC"));
39     assertEquals("S", ResidueProperties.codonTranslate("TCA"));
40     assertEquals("S", ResidueProperties.codonTranslate("TCG"));
41     assertEquals("P", ResidueProperties.codonTranslate("CCT"));
42     assertEquals("P", ResidueProperties.codonTranslate("CCC"));
43     assertEquals("P", ResidueProperties.codonTranslate("CCA"));
44     assertEquals("P", ResidueProperties.codonTranslate("CCG"));
45     assertEquals("T", ResidueProperties.codonTranslate("ACT"));
46     assertEquals("T", ResidueProperties.codonTranslate("ACC"));
47     assertEquals("T", ResidueProperties.codonTranslate("ACA"));
48     assertEquals("T", ResidueProperties.codonTranslate("ACG"));
49     assertEquals("A", ResidueProperties.codonTranslate("GCT"));
50     assertEquals("A", ResidueProperties.codonTranslate("GCC"));
51     assertEquals("A", ResidueProperties.codonTranslate("GCA"));
52     assertEquals("A", ResidueProperties.codonTranslate("GCG"));
53     assertEquals("Y", ResidueProperties.codonTranslate("TAT"));
54     assertEquals("Y", ResidueProperties.codonTranslate("TAC"));
55     assertEquals("STOP", ResidueProperties.codonTranslate("TAA"));
56     assertEquals("STOP", ResidueProperties.codonTranslate("TAG"));
57     assertEquals("H", ResidueProperties.codonTranslate("CAT"));
58     assertEquals("H", ResidueProperties.codonTranslate("CAC"));
59     assertEquals("Q", ResidueProperties.codonTranslate("CAA"));
60     assertEquals("Q", ResidueProperties.codonTranslate("CAG"));
61     assertEquals("N", ResidueProperties.codonTranslate("AAT"));
62     assertEquals("N", ResidueProperties.codonTranslate("AAC"));
63     assertEquals("K", ResidueProperties.codonTranslate("AAA"));
64     assertEquals("K", ResidueProperties.codonTranslate("AAG"));
65     assertEquals("D", ResidueProperties.codonTranslate("GAT"));
66     assertEquals("D", ResidueProperties.codonTranslate("GAC"));
67     assertEquals("E", ResidueProperties.codonTranslate("GAA"));
68     assertEquals("E", ResidueProperties.codonTranslate("GAG"));
69     assertEquals("C", ResidueProperties.codonTranslate("TGT"));
70     assertEquals("C", ResidueProperties.codonTranslate("TGC"));
71     assertEquals("STOP", ResidueProperties.codonTranslate("TGA"));
72     assertEquals("W", ResidueProperties.codonTranslate("TGG"));
73     assertEquals("R", ResidueProperties.codonTranslate("CGT"));
74     assertEquals("R", ResidueProperties.codonTranslate("CGC"));
75     assertEquals("R", ResidueProperties.codonTranslate("CGA"));
76     assertEquals("R", ResidueProperties.codonTranslate("CGG"));
77     assertEquals("S", ResidueProperties.codonTranslate("AGT"));
78     assertEquals("S", ResidueProperties.codonTranslate("AGC"));
79     assertEquals("R", ResidueProperties.codonTranslate("AGA"));
80     assertEquals("R", ResidueProperties.codonTranslate("AGG"));
81     assertEquals("G", ResidueProperties.codonTranslate("GGT"));
82     assertEquals("G", ResidueProperties.codonTranslate("GGC"));
83     assertEquals("G", ResidueProperties.codonTranslate("GGA"));
84     assertEquals("G", ResidueProperties.codonTranslate("GGG"));
85   }
86
87   /**
88    * Test a sample of codon translations involving ambiguity codes. Should
89    * return a protein value where the ambiguity does not affect the translation.
90    */
91   @Test
92   public void testCodonTranslate_ambiguityCodes()
93   {
94     // Y is C or T
95     assertEquals("C", ResidueProperties.codonTranslate("TGY"));
96     // Phenylalanine first base variation
97     assertEquals("L", ResidueProperties.codonTranslate("YTA"));
98
99     // W is A or T
100     assertEquals("L", ResidueProperties.codonTranslate("CTW"));
101     assertNull(ResidueProperties.codonTranslate("TTW"));
102
103     // S is G or C
104     assertEquals("G", ResidueProperties.codonTranslate("GGS"));
105     assertNull(ResidueProperties.codonTranslate("ATS"));
106
107     // K is T or G
108     assertEquals("S", ResidueProperties.codonTranslate("TCK"));
109     assertNull(ResidueProperties.codonTranslate("ATK"));
110
111     // M is C or A
112     assertEquals("T", ResidueProperties.codonTranslate("ACM"));
113     // Arginine first base variation
114     assertEquals("R", ResidueProperties.codonTranslate("MGA"));
115     assertEquals("R", ResidueProperties.codonTranslate("MGG"));
116     assertNull(ResidueProperties.codonTranslate("TAM"));
117
118     // D is A, G or T
119     assertEquals("P", ResidueProperties.codonTranslate("CCD"));
120     assertNull(ResidueProperties.codonTranslate("AAD"));
121
122     // V is A, C or G
123     assertEquals("V", ResidueProperties.codonTranslate("GTV"));
124     assertNull(ResidueProperties.codonTranslate("TTV"));
125
126     // H is A, C or T
127     assertEquals("A", ResidueProperties.codonTranslate("GCH"));
128     assertEquals("I", ResidueProperties.codonTranslate("ATH"));
129     assertNull(ResidueProperties.codonTranslate("AGH"));
130
131     // B is C, G or T
132     assertEquals("P", ResidueProperties.codonTranslate("CCB"));
133     assertNull(ResidueProperties.codonTranslate("TAB"));
134
135     // R is A or G
136     // additional tests for JAL-1685 (resolved)
137     assertEquals("L", ResidueProperties.codonTranslate("CTR"));
138     assertEquals("V", ResidueProperties.codonTranslate("GTR"));
139     assertEquals("S", ResidueProperties.codonTranslate("TCR"));
140     assertEquals("P", ResidueProperties.codonTranslate("CCR"));
141     assertEquals("T", ResidueProperties.codonTranslate("ACR"));
142     assertEquals("A", ResidueProperties.codonTranslate("GCR"));
143     assertEquals("R", ResidueProperties.codonTranslate("CGR"));
144     assertEquals("G", ResidueProperties.codonTranslate("GGR"));
145     assertEquals("R", ResidueProperties.codonTranslate("AGR"));
146     assertEquals("E", ResidueProperties.codonTranslate("GAR"));
147     assertEquals("K", ResidueProperties.codonTranslate("AAR"));
148     assertEquals("L", ResidueProperties.codonTranslate("TTR"));
149     assertEquals("Q", ResidueProperties.codonTranslate("CAR"));
150     assertEquals("STOP", ResidueProperties.codonTranslate("TAR"));
151     assertEquals("STOP", ResidueProperties.codonTranslate("TRA"));
152     // Arginine first and third base ambiguity
153     assertEquals("R", ResidueProperties.codonTranslate("MGR"));
154     assertNull(ResidueProperties.codonTranslate("ATR"));
155
156     // N is any base; 8 proteins accept any base in 3rd position
157     assertEquals("L", ResidueProperties.codonTranslate("CTN"));
158     assertEquals("V", ResidueProperties.codonTranslate("GTN"));
159     assertEquals("S", ResidueProperties.codonTranslate("TCN"));
160     assertEquals("P", ResidueProperties.codonTranslate("CCN"));
161     assertEquals("T", ResidueProperties.codonTranslate("ACN"));
162     assertEquals("A", ResidueProperties.codonTranslate("GCN"));
163     assertEquals("R", ResidueProperties.codonTranslate("CGN"));
164     assertEquals("G", ResidueProperties.codonTranslate("GGN"));
165     assertNull(ResidueProperties.codonTranslate("ATN"));
166     assertNull(ResidueProperties.codonTranslate("ANT"));
167     assertNull(ResidueProperties.codonTranslate("NAT"));
168     assertNull(ResidueProperties.codonTranslate("ANN"));
169     assertNull(ResidueProperties.codonTranslate("NNA"));
170     assertNull(ResidueProperties.codonTranslate("NNN"));
171
172     // some random stuff
173     assertNull(ResidueProperties.codonTranslate("YWB"));
174     assertNull(ResidueProperties.codonTranslate("VHD"));
175     assertNull(ResidueProperties.codonTranslate("WSK"));
176   }
177
178   @Test
179   public void testGetResidues_nucleotide()
180   {
181     /*
182      * Non-ambiguous only; we don't care about the order of the list, it is just
183      * sorted here to make assertions reliable
184      */
185     List<String> residues = ResidueProperties.getResidues(true, false);
186     Collections.sort(residues);
187     assertEquals("[A, C, G, T, U]", residues.toString());
188
189     /*
190      * Including ambiguity codes I N R X Y
191      */
192     residues = ResidueProperties.getResidues(true, true);
193     Collections.sort(residues);
194     assertEquals("[A, C, G, I, N, R, T, U, X, Y]", residues.toString());
195   }
196
197   @Test
198   public void testGetResidues_peptide()
199   {
200     /*
201      * Non-ambiguous only; we don't care about the order of the list, it is just
202      * sorted here to make assertions reliable
203      */
204     List<String> residues = ResidueProperties.getResidues(false, false);
205     Collections.sort(residues);
206     assertEquals(
207             "[ALA, ARG, ASN, ASP, CYS, GLN, GLU, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL]",
208             residues.toString());
209
210     /*
211      * Including ambiguity codes ASX, GLX, XAA
212      */
213     residues = ResidueProperties.getResidues(false, true);
214     Collections.sort(residues);
215     assertEquals(
216             "[ALA, ARG, ASN, ASP, ASX, CYS, GLN, GLU, GLX, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL, XAA]",
217             residues.toString());
218   }
219 }