Merge remote-tracking branch 'origin/develop' into
[jalview.git] / test / jalview / util / ComparisonTest.java
1 package jalview.util;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6 import jalview.datamodel.Sequence;
7 import jalview.datamodel.SequenceI;
8
9 import org.junit.Test;
10
11 public class ComparisonTest
12 {
13
14   @Test
15   public void testIsGap()
16   {
17     assertTrue(Comparison.isGap('-'));
18     assertTrue(Comparison.isGap('.'));
19     assertTrue(Comparison.isGap(' '));
20     assertFalse(Comparison.isGap('X'));
21     assertFalse(Comparison.isGap('x'));
22     assertFalse(Comparison.isGap('*'));
23     assertFalse(Comparison.isGap('G'));
24   }
25
26   /**
27    * Test for isNucleotide is that sequences in a dataset are more than 85%
28    * AGCTU. Test is not case-sensitive and ignores gaps.
29    */
30   @Test
31   public void testIsNucleotide() {
32     SequenceI seq = new Sequence("eightypercent", "agctuAGCPV");
33     assertFalse(Comparison.isNucleotide(new SequenceI[]
34     { seq }));
35
36     seq = new Sequence("eightyfivepercent", "agctuAGCPVagctuAGCUV");
37     assertFalse(Comparison.isNucleotide(new SequenceI[]
38     { seq }));
39
40     seq = new Sequence("nineypercent", "agctuAGCgVagctuAGCUV");
41     assertTrue(Comparison.isNucleotide(new SequenceI[]
42     { seq }));
43
44     seq = new Sequence("eightyfivepercentgapped",
45             "--agc--tuA--GCPV-a---gct-uA-GC---UV");
46     assertFalse(Comparison.isNucleotide(new SequenceI[]
47     { seq }));
48
49     seq = new Sequence("nineypercentgapped",
50             "ag--ct-u-A---GC---g----Vag--c---tuAGCUV");
51     assertTrue(Comparison.isNucleotide(new SequenceI[]
52     { seq }));
53
54     seq = new Sequence("allgap", "---------");
55     assertFalse(Comparison.isNucleotide(new SequenceI[]
56     { seq }));
57
58     seq = new Sequence("DNA", "ACTugGCCAG");
59     SequenceI seq2 = new Sequence("Protein", "FLIMVSPTYW");
60     assertTrue(Comparison.isNucleotide(new SequenceI[]
61     { seq, seq, seq, seq, seq, seq, seq, seq, seq, seq2 })); // 90% DNA
62     assertFalse(Comparison.isNucleotide(new SequenceI[]
63     { seq, seq, seq, seq, seq, seq, seq, seq, seq2, seq2 })); // 80% DNA
64
65     seq = new Sequence("ProteinThatLooksLikeDNA", "WYATGCCTGAgtcgt");
66     // 12/14 = 85.7%
67     assertTrue(Comparison.isNucleotide(new SequenceI[]
68     { seq }));
69
70     assertFalse(Comparison.isNucleotide(null));
71   }
72
73   /**
74    * Test percentage identity calculation for two sequences.
75    */
76   @Test
77   public void testPID_matchGaps()
78   {
79     String seq1 = "ABCDEF";
80     String seq2 = "abcdef";
81     assertEquals("identical", 100f, Comparison.PID(seq1, seq2), 0.001f);
82
83     // comparison range defaults to length of first sequence
84     seq2 = "abcdefghijklmnopqrstuvwxyz";
85     assertEquals("identical", 100f, Comparison.PID(seq1, seq2), 0.001f);
86
87     seq2 = "a---bcdef";
88   }
89 }