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