JAL-4241 add SeqsetUtils.filterSequence function
[jalview.git] / test / jalview / analysis / SeqsetUtilsTest.java
index 9839ba0..fbd5812 100644 (file)
@@ -27,10 +27,16 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.gui.JvOptionPane;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+
+import java.util.BitSet;
 import java.util.Hashtable;
+import java.util.Map;
 
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 /**
@@ -47,7 +53,6 @@ public class SeqsetUtilsTest
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
 
-
   /**
    * test for JAL-2046 bug - duplication of sequence features on reconstructed
    * alignment
@@ -55,8 +60,7 @@ public class SeqsetUtilsTest
   @Test(groups = { "Functional" })
   public void testSeqFeatureAddition()
   {
-    SequenceI[] sqset = new SequenceI[] {
-        new Sequence("Aseq1", "AREALSEQ"),
+    SequenceI[] sqset = new SequenceI[] { new Sequence("Aseq1", "AREALSEQ"),
         new Sequence("Aseq2", "AREALSEQ") };
 
     AlignmentI al = new Alignment(sqset);
@@ -65,7 +69,7 @@ public class SeqsetUtilsTest
     SequenceFeature sf1 = new SequenceFeature("f1", "foo", 2, 3, "far");
     SequenceFeature sf2 = new SequenceFeature("f2", "foo", 2, 3, "far");
     ds.getSequenceAt(0).addSequenceFeature(sf1);
-    Hashtable unq = SeqsetUtils.uniquify(sqset, true);
+    Map<String, SeqsetUtils.SequenceInfo> unq = SeqsetUtils.uniquify(sqset, true);
     SequenceI[] sqset2 = new SequenceI[] {
         new Sequence(sqset[0].getName(), sqset[0].getSequenceAsString()),
         new Sequence(sqset[1].getName(), sqset[1].getSequenceAsString()) };
@@ -78,9 +82,34 @@ public class SeqsetUtilsTest
     // are on the shared dataset sequence
     Assert.assertEquals(sqset[0].getSequenceFeatures().size(), 2);
     Assert.assertEquals(sqset2[0].getSequenceFeatures().size(), 2);
-    Assert.assertSame(sqset[0].getSequenceFeatures().get(0), sqset2[0]
-            .getSequenceFeatures().get(0));
-    Assert.assertSame(sqset[0].getSequenceFeatures().get(1), sqset2[0]
-            .getSequenceFeatures().get(1));
+    Assert.assertSame(sqset[0].getSequenceFeatures().get(0),
+            sqset2[0].getSequenceFeatures().get(0));
+    Assert.assertSame(sqset[0].getSequenceFeatures().get(1),
+            sqset2[0].getSequenceFeatures().get(1));
+  }
+  
+  @DataProvider
+  public Object[][] sequenceAndMask()
+  {
+    return new Object[][] {
+      { "AAAABBBBCCCCDDDD", 0xFFFFL, "AAAABBBBCCCCDDDD" },
+      { "AAAABBBBCCCCDDDD", 0x000FL, "AAAA" },
+      { "---A---B---C---D", 0x8888L, "ABCD" },
+      { "---A---B---C---D", 0x9999L, "-A-B-C-D" },
+      { "ABCDABCDABCDABCD", 0xC5A3L, "ABBDACCD" },
+      { "", 0xFFFFL, "" },
+      { "AAAABBBBCCCCDDDD", 0x0000L, "" },
+      { "AAABBBCCC", 0xFFFF, "AAABBBCCC" },
+      { "AAAABBBB", 0xD000L, "" },
+      { "AAAABBBB", 0xAA0AL, "AA" },
+    };
+  }
+  
+  @Test(groups = {"Functional"}, dataProvider = "sequenceAndMask")
+  public void testFilterSequence(String sequence, long mask, String expected)
+  {
+    BitSet bitMask = BitSet.valueOf(new long[] {mask});
+    var result = SeqsetUtils.filterSequence(sequence.toCharArray(), bitMask);
+    assertThat(result, equalTo(expected.toCharArray()));
   }
 }