JAL-2591 More refactoring (incomplete)
[jalview.git] / test / jalview / datamodel / HiddenColumnsTest.java
index b767cf7..5b92677 100644 (file)
@@ -29,7 +29,9 @@ import jalview.analysis.AlignmentGenerator;
 import jalview.gui.JvOptionPane;
 
 import java.util.Arrays;
+import java.util.BitSet;
 import java.util.List;
+import java.util.Random;
 
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -517,4 +519,127 @@ public class HiddenColumnsTest
     assertEquals("[60, 70]", Arrays.toString(hidden.get(1)));
   }
 
+  @Test(groups = { "Functional" })
+  public void testHideBitset()
+  {
+    HiddenColumns cs;
+
+    BitSet one = new BitSet();
+
+    // one hidden range
+    one.set(1);
+    cs = new HiddenColumns();
+    cs.hideMarkedBits(one);
+    assertEquals(1, cs.getHiddenRegions().size());
+
+    one.set(2);
+    cs = new HiddenColumns();
+    cs.hideMarkedBits(one);
+    assertEquals(1, cs.getHiddenRegions().size());
+
+    one.set(3);
+    cs = new HiddenColumns();
+    cs.hideMarkedBits(one);
+    assertEquals(1, cs.getHiddenRegions().size());
+
+    // split
+    one.clear(2);
+    cs = new HiddenColumns();
+    cs.hideMarkedBits(one);
+    assertEquals(2, cs.getHiddenRegions().size());
+
+    assertEquals(0, cs.adjustForHiddenColumns(0));
+    assertEquals(2, cs.adjustForHiddenColumns(1));
+    assertEquals(4, cs.adjustForHiddenColumns(2));
+
+    // one again
+    one.clear(1);
+    cs = new HiddenColumns();
+    cs.hideMarkedBits(one);
+
+    assertEquals(1, cs.getHiddenRegions().size());
+
+    assertEquals(0, cs.adjustForHiddenColumns(0));
+    assertEquals(1, cs.adjustForHiddenColumns(1));
+    assertEquals(2, cs.adjustForHiddenColumns(2));
+    assertEquals(4, cs.adjustForHiddenColumns(3));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testGetBitset()
+  {
+    BitSet toMark, fromMark;
+    long seed = -3241532;
+    Random number = new Random(seed);
+    for (int n = 0; n < 1000; n++)
+    {
+      // create a random bitfield
+      toMark = BitSet.valueOf(new long[] { number.nextLong(),
+          number.nextLong(), number.nextLong() });
+      toMark.set(n * number.nextInt(10), n * (25 + number.nextInt(25)));
+      HiddenColumns hc = new HiddenColumns();
+      hc.hideMarkedBits(toMark);
+
+      // see if we can recover bitfield
+      hc.markHiddenRegions(fromMark = new BitSet());
+      assertEquals(toMark, fromMark);
+    }
+  }
+
+  @Test(groups = { "Functional" })
+  public void testFindHiddenRegionPositions()
+  {
+    HiddenColumns hc = new HiddenColumns();
+    hc.hideColumns(3, 7);
+    hc.hideColumns(10, 10);
+    hc.hideColumns(14, 15);
+
+    List<Integer> positions = hc.findHiddenRegionPositions();
+    assertEquals(3, positions.size());
+    assertEquals(3, positions.get(0).intValue());
+    assertEquals(5, positions.get(1).intValue());
+    assertEquals(8, positions.get(2).intValue());
+  }
+
+  @Test(groups = { "Functional" })
+  public void testRegionsToString()
+  {
+    HiddenColumns hc = new HiddenColumns();
+    hc.hideColumns(3, 7);
+    hc.hideColumns(10, 10);
+    hc.hideColumns(14, 15);
+
+    String result = hc.regionsToString(",", "--");
+    assertEquals("3--7,10--10,14--15", result);
+  }
+
+  @Test(groups = "Functional")
+  public void getVisibleStartAndEndIndexTest()
+  {
+    Sequence seq = new Sequence("testSeq", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+    AlignmentI align = new Alignment(new SequenceI[] { seq });
+    HiddenColumns hc = new HiddenColumns();
+
+    int[] startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
+    assertEquals(0, startEnd[0]);
+    assertEquals(25, startEnd[1]);
+
+    hc.hideColumns(0, 0);
+    startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
+    assertEquals(1, startEnd[0]);
+    assertEquals(25, startEnd[1]);
+
+    hc.hideColumns(6, 9);
+    hc.hideColumns(11, 12);
+    startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
+    assertEquals(1, startEnd[0]);
+    assertEquals(25, startEnd[1]);
+
+    hc.hideColumns(24, 25);
+    startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
+    System.out.println(startEnd[0] + " : " + startEnd[1]);
+    assertEquals(1, startEnd[0]);
+    assertEquals(23, startEnd[1]);
+  }
+
 }