--- /dev/null
+package jalview.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+
+import org.junit.Test;
+
+public class ComparisonTest
+{
+
+ @Test
+ public void testIsGap()
+ {
+ assertTrue(Comparison.isGap('-'));
+ assertTrue(Comparison.isGap('.'));
+ assertTrue(Comparison.isGap(' '));
+ assertFalse(Comparison.isGap('X'));
+ assertFalse(Comparison.isGap('x'));
+ assertFalse(Comparison.isGap('*'));
+ assertFalse(Comparison.isGap('G'));
+ }
+
+ /**
+ * Test for isNucleotide is that sequences in a dataset are more than 85%
+ * AGCTU. Test is not case-sensitive and ignores gaps.
+ */
+ @Test
+ public void testIsNucleotide() {
+ SequenceI seq = new Sequence("eightypercent", "agctuAGCPV");
+ assertFalse(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ seq = new Sequence("eightyfivepercent", "agctuAGCPVagctuAGCUV");
+ assertFalse(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ seq = new Sequence("nineypercent", "agctuAGCgVagctuAGCUV");
+ assertTrue(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ seq = new Sequence("eightyfivepercentgapped",
+ "--agc--tuA--GCPV-a---gct-uA-GC---UV");
+ assertFalse(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ seq = new Sequence("nineypercentgapped",
+ "ag--ct-u-A---GC---g----Vag--c---tuAGCUV");
+ assertTrue(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ seq = new Sequence("allgap", "---------");
+ assertFalse(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ seq = new Sequence("DNA", "ACTugGCCAG");
+ SequenceI seq2 = new Sequence("Protein", "FLIMVSPTYW");
+ assertTrue(Comparison.isNucleotide(new SequenceI[]
+ { seq, seq, seq, seq, seq, seq, seq, seq, seq, seq2 })); // 90% DNA
+ assertFalse(Comparison.isNucleotide(new SequenceI[]
+ { seq, seq, seq, seq, seq, seq, seq, seq, seq2, seq2 })); // 80% DNA
+
+ seq = new Sequence("ProteinThatLooksLikeDNA", "WYATGCCTGAgtcgt");
+ // 12/14 = 85.7%
+ assertTrue(Comparison.isNucleotide(new SequenceI[]
+ { seq }));
+
+ assertFalse(Comparison.isNucleotide(null));
+ }
+
+ /**
+ * Test percentage identity calculation for two sequences.
+ */
+ @Test
+ public void testPID_matchGaps()
+ {
+ String seq1 = "ABCDEF";
+ String seq2 = "abcdef";
+ assertEquals("identical", 100f, Comparison.PID(seq1, seq2), 0.001f);
+
+ // comparison range defaults to length of first sequence
+ seq2 = "abcdefghijklmnopqrstuvwxyz";
+ assertEquals("identical", 100f, Comparison.PID(seq1, seq2), 0.001f);
+
+ seq2 = "a---bcdef";
+ }
+}