JAL-2759 Additional tests and tweaks to numColumns update
[jalview.git] / test / jalview / datamodel / HiddenColumnsTest.java
index 316b003..e4aa8e2 100644 (file)
@@ -259,175 +259,6 @@ public class HiddenColumnsTest
     assertFalse(cs2.hasHiddenColumns());
   }
 
-  /**
-   * Test the code used to locate the reference sequence ruler origin
-   */
-  @Test(groups = { "Functional" })
-  public void testLocateVisibleStartofSequence()
-  {
-    // create random alignment
-    AlignmentGenerator gen = new AlignmentGenerator(false);
-    AlignmentI al = gen.generate(50, 20, 123, 5, 5);
-
-    HiddenColumns cs = al.getHiddenColumns();
-    ColumnSelection colsel = new ColumnSelection();
-
-    SequenceI seq = new Sequence("RefSeq", "-A-SD-ASD--E---");
-    assertEquals(2, seq.findIndex(seq.getStart()));
-
-    // no hidden columns
-    assertEquals(seq.findIndex(seq.getStart()) - 1, cs.locateVisibleStartOfSequence(seq));
-
-    // hidden column on gap after end of sequence - should not affect bounds
-    colsel.hideSelectedColumns(13, al.getHiddenColumns());
-    assertEquals(seq.findIndex(seq.getStart()) - 1,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    // hidden column on gap before beginning of sequence - should vis bounds by
-    // one
-    colsel.hideSelectedColumns(0, al.getHiddenColumns());
-    assertEquals(seq.findIndex(seq.getStart()) - 2,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    // hide columns around most of sequence - leave one residue remaining
-    cs.hideColumns(1, 3);
-    cs.hideColumns(6, 11);
-
-    Iterator<int[]> it = cs.getVisContigsIterator(0, 6, false);
-
-    assertEquals("-D", seq.getSequenceStringFromIterator(it));
-    // cs.getVisibleSequenceStrings(0, 5, new SequenceI[]
-    // { seq })[0]);
-
-    assertEquals(1, cs.locateVisibleStartOfSequence(seq));
-    cs.revealAllHiddenColumns(colsel);
-
-    // hide whole sequence - should just get location of hidden region
-    // containing sequence
-    cs.hideColumns(1, 11);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 15);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    SequenceI seq2 = new Sequence("RefSeq2", "-------A-SD-ASD--E---");
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(7, 17);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq2));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(3, 17);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq2));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(3, 19);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq2));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 0);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 1);
-    assertEquals(1,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 2);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(1, 1);
-    assertEquals(2,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(1, 2);
-    assertEquals(1,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(1, 3);
-    assertEquals(1,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 2);
-    cs.hideColumns(5, 6);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 2);
-    cs.hideColumns(5, 6);
-    cs.hideColumns(9, 10);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 2);
-    cs.hideColumns(7, 11);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(2, 4);
-    cs.hideColumns(7, 11);
-    assertEquals(1,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(2, 4);
-    cs.hideColumns(7, 12);
-    assertEquals(1,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(1, 11);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 12);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 4);
-    cs.hideColumns(6, 12);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 1);
-    cs.hideColumns(3, 12);
-    assertEquals(0,cs.locateVisibleStartOfSequence(seq));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(3, 14);
-    cs.hideColumns(17, 19);
-    assertEquals(3,cs.locateVisibleStartOfSequence(seq2));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(3, 7);
-    cs.hideColumns(9, 14);
-    cs.hideColumns(17, 19);
-    assertEquals(9,cs.locateVisibleStartOfSequence(seq2));
-
-    cs.revealAllHiddenColumns(colsel);
-    cs.hideColumns(0, 1);
-    cs.hideColumns(3, 4);
-    cs.hideColumns(6, 8);
-    cs.hideColumns(10, 12);
-    assertEquals(6, cs.locateVisibleStartOfSequence(seq));
-
-  }
-
-  @Test(groups = { "Functional" })
-  public void testLocateVisibleStartPathologicals()
-  {
-    // test some pathological cases we missed
-    AlignmentI al = new Alignment(
-            new SequenceI[]
-    { new Sequence("refseqGaptest", "KTDVTI----------NFI-----G----L") });
-    HiddenColumns cs = new HiddenColumns();
-    cs.hideList(al.getSequenceAt(0).getInsertions());
-    assertEquals("G", ""
-            + al.getSequenceAt(0).getCharAt(cs.visibleToAbsoluteColumn(9)));
-
-    // KM: no idea what this is meant to be testing... seems to be an unfinished
-    // test
-  }
 
   @Test(groups = { "Functional" })
   public void testHideColumns()
@@ -442,6 +273,7 @@ public class HiddenColumnsTest
     Iterator<int[]> regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[5, 5]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 1);
 
     colsel.hideSelectedColumns(3, al.getHiddenColumns());
     regions = cs.iterator();
@@ -449,6 +281,7 @@ public class HiddenColumnsTest
     // two hidden ranges, in order:
     assertEquals("[3, 3]", Arrays.toString(regions.next()));
     assertEquals("[5, 5]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 2);
 
     // hiding column 4 expands [3, 3] to [3, 4]
     // and merges to [5, 5] to make [3, 5]
@@ -456,16 +289,19 @@ public class HiddenColumnsTest
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[3, 5]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 3);
 
     // clear hidden columns (note they are added to selected)
     cs.revealAllHiddenColumns(colsel);
     // it is now actually null but getter returns an empty list
     assertEquals(0, cs.getNumberOfRegions());
+    assertEquals(cs.getSize(), 0);
 
     cs.hideColumns(3, 6);
     regions = cs.iterator();
     int[] firstHiddenRange = regions.next();
     assertEquals("[3, 6]", Arrays.toString(firstHiddenRange));
+    assertEquals(cs.getSize(), 4);
 
     // adding a subrange of already hidden should do nothing
     cs.hideColumns(4, 5);
@@ -473,45 +309,53 @@ public class HiddenColumnsTest
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[3, 6]",
             Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 4);
     cs.hideColumns(3, 5);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[3, 6]",
             Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 4);
     cs.hideColumns(4, 6);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[3, 6]",
             Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 4);
     cs.hideColumns(3, 6);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[3, 6]",
             Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 4);
 
     cs.revealAllHiddenColumns(colsel);
     cs.hideColumns(2, 4);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[2, 4]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 3);
 
     // extend contiguous with 2 positions overlap
     cs.hideColumns(3, 5);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[2, 5]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 4);
 
     // extend contiguous with 1 position overlap
     cs.hideColumns(5, 6);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[2, 6]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 5);
 
     // extend contiguous with overlap both ends:
     cs.hideColumns(1, 7);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[1, 7]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 7);
 
     cs.revealAllHiddenColumns(colsel);
     cs.hideColumns(15, 18);
@@ -522,6 +366,7 @@ public class HiddenColumnsTest
     assertEquals("[2, 4]", Arrays.toString(regions.next()));
     assertEquals("[7, 9]", Arrays.toString(regions.next()));
     assertEquals("[15, 18]", Arrays.toString(regions.next()));
+    assertEquals(cs.getSize(), 10);
   }
 
   /**
@@ -643,11 +488,13 @@ public class HiddenColumnsTest
     assertEquals(2, cs.getNumberOfRegions());
     assertEquals("[49, 59]", Arrays.toString(regions.next()));
     assertEquals("[69, 79]", Arrays.toString(regions.next()));
+    assertEquals(22, cs.getSize());
 
     cs.hideColumns(48, 80);
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[48, 80]", Arrays.toString(regions.next()));
+    assertEquals(33, cs.getSize());
 
     /*
      * another...joining hidden ranges
@@ -661,6 +508,7 @@ public class HiddenColumnsTest
     regions = cs.iterator();
     assertEquals(1, cs.getNumberOfRegions());
     assertEquals("[10, 60]", Arrays.toString(regions.next()));
+    assertEquals(51, cs.getSize());
 
     /*
      * another...left overlap, subsumption, right overlap,
@@ -678,6 +526,7 @@ public class HiddenColumnsTest
     assertEquals(2, cs.getNumberOfRegions());
     assertEquals("[10, 50]", Arrays.toString(regions.next()));
     assertEquals("[60, 70]", Arrays.toString(regions.next()));
+    assertEquals(52, cs.getSize());
   }
 
   @Test(groups = { "Functional" })
@@ -692,22 +541,26 @@ public class HiddenColumnsTest
     cs = new HiddenColumns();
     cs.hideColumns(one);
     assertEquals(1, cs.getNumberOfRegions());
+    assertEquals(1, cs.getSize());
 
     one.set(2);
     cs = new HiddenColumns();
     cs.hideColumns(one);
     assertEquals(1, cs.getNumberOfRegions());
+    assertEquals(2, cs.getSize());
 
     one.set(3);
     cs = new HiddenColumns();
     cs.hideColumns(one);
     assertEquals(1, cs.getNumberOfRegions());
+    assertEquals(3, cs.getSize());
 
     // split
     one.clear(2);
     cs = new HiddenColumns();
     cs.hideColumns(one);
     assertEquals(2, cs.getNumberOfRegions());
+    assertEquals(2, cs.getSize());
 
     assertEquals(0, cs.visibleToAbsoluteColumn(0));
     assertEquals(2, cs.visibleToAbsoluteColumn(1));
@@ -717,6 +570,7 @@ public class HiddenColumnsTest
     one.clear(1);
     cs = new HiddenColumns();
     cs.hideColumns(one);
+    assertEquals(1, cs.getSize());
 
     assertEquals(1, cs.getNumberOfRegions());
 
@@ -727,46 +581,6 @@ public class HiddenColumnsTest
   }
 
   @Test(groups = { "Functional" })
-  public void hideColumns_BitSetAndRange()
-  {
-    HiddenColumns hc = new HiddenColumns();
-    hc.hideColumns(3, 5);
-    hc.hideColumns(15, 20);
-    hc.hideColumns(45, 60);
-
-    BitSet tohide = new BitSet();
-
-    // all unhidden if tohide is empty and range covers hidden
-    hc.hideColumns(tohide, 1, 70);
-    assertTrue(!hc.hasHiddenColumns());
-
-    hc.hideColumns(3, 5);
-    hc.hideColumns(15, 20);
-    hc.hideColumns(45, 60);
-
-    // but not if range does not cover hidden
-    hc.hideColumns(tohide, 23, 40);
-    assertTrue(hc.hasHiddenColumns());
-
-    // and partial unhide if range partially covers
-    hc.hideColumns(tohide, 1, 17);
-    Iterator<int[]> it = hc.iterator();
-    assertTrue(it.hasNext());
-    int[] region = it.next();
-
-    assertEquals(18, region[0]);
-    assertEquals(20, region[1]);
-
-    assertTrue(it.hasNext());
-    region = it.next();
-
-    assertEquals(45, region[0]);
-    assertEquals(60, region[1]);
-
-    assertFalse(it.hasNext());
-  }
-
-  @Test(groups = { "Functional" })
   public void testRegionsToString()
   {
     HiddenColumns hc = new HiddenColumns();
@@ -1036,12 +850,14 @@ public class HiddenColumnsTest
 
     h.hideList(seq2.getInsertions());
     assertTrue(h.equals(h2));
+    assertEquals(0, h.getSize());
 
     h.hideList(seq1.getInsertions());
     h2.hideColumns(3, 5);
     h2.hideColumns(9, 9);
     h2.hideColumns(19, 20);
     assertTrue(h.equals(h2));
+    assertEquals(6, h.getSize());
   }
 
   @Test(groups = "Functional")
@@ -1054,7 +870,7 @@ public class HiddenColumnsTest
     h.hideColumns(tohide);
     assertTrue(h.equals(h2));
 
-    // when setting bitset, first param is invlusive, second exclusive
+    // when setting bitset, first param is inclusive, second exclusive
     tohide.set(3, 6);
     tohide.set(9);
     tohide.set(15, 21);
@@ -1064,24 +880,70 @@ public class HiddenColumnsTest
     h2.hideColumns(9, 9);
     h2.hideColumns(15, 20);
     assertTrue(h.equals(h2));
+    assertEquals(h.getSize(), h2.getSize());
 
     tohide.clear();
     tohide.set(41);
     h.hideColumns(tohide, 23, 30);
     assertTrue(h.equals(h2));
+    assertEquals(h.getSize(), h2.getSize());
 
     tohide.set(41);
     h.hideColumns(tohide, 30, 45);
     h2.hideColumns(41, 41);
     assertTrue(h.equals(h2));
+    assertEquals(h.getSize(), h2.getSize());
 
     tohide.clear();
     tohide.set(25, 28);
     h.hideColumns(tohide, 17, 50);
     h2 = new HiddenColumns();
-    h2.hideColumns(17, 20);
+    h2.hideColumns(5, 5);
+    h2.hideColumns(9, 9);
+    h2.hideColumns(15, 16);
     h2.hideColumns(25, 27);
-    h2.hideColumns(41, 41);
+    assertTrue(h.equals(h2));
+    assertEquals(h.getSize(), h2.getSize());
+
+    HiddenColumns hc = new HiddenColumns();
+    hc.hideColumns(3, 5);
+    hc.hideColumns(15, 20);
+    hc.hideColumns(45, 60);
+
+    tohide = new BitSet();
+
+    // all unhidden if tohide is empty and range covers hidden
+    hc.hideColumns(tohide, 1, 70);
+    assertTrue(!hc.hasHiddenColumns());
+    assertEquals(0, hc.getSize());
+
+    hc.hideColumns(3, 5);
+    hc.hideColumns(15, 20);
+    hc.hideColumns(45, 60);
+    assertEquals(25, hc.getSize());
+
+    // but not if range does not cover hidden
+    hc.hideColumns(tohide, 23, 40);
+    assertTrue(hc.hasHiddenColumns());
+    assertEquals(25, hc.getSize());
+
+    // and partial unhide if range partially covers
+    hc.hideColumns(tohide, 1, 17);
+    Iterator<int[]> it = hc.iterator();
+    assertTrue(it.hasNext());
+    int[] region = it.next();
+
+    assertEquals(18, region[0]);
+    assertEquals(20, region[1]);
+
+    assertTrue(it.hasNext());
+    region = it.next();
+
+    assertEquals(45, region[0]);
+    assertEquals(60, region[1]);
+
+    assertFalse(it.hasNext());
+    assertEquals(19, hc.getSize());
   }
 
   @Test(groups = "Functional")