Merge branch 'features/JAL-845splitPaneMergeDevelop' into develop
[jalview.git] / test / jalview / util / ComparisonTest.java
diff --git a/test/jalview/util/ComparisonTest.java b/test/jalview/util/ComparisonTest.java
new file mode 100644 (file)
index 0000000..bfc2610
--- /dev/null
@@ -0,0 +1,89 @@
+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";
+  }
+}