2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.datamodel;
23 import static org.testng.Assert.assertNull;
24 import static org.testng.AssertJUnit.assertEquals;
25 import static org.testng.AssertJUnit.assertFalse;
26 import static org.testng.AssertJUnit.assertTrue;
28 import jalview.analysis.AlignmentGenerator;
30 import java.util.Arrays;
31 import java.util.BitSet;
32 import java.util.Iterator;
34 import org.testng.annotations.Test;
36 public class HiddenColumnsTest
39 * Test the method which counts the number of hidden columns
41 @Test(groups = { "Functional" })
42 public void testGetSize()
44 HiddenColumns hidden = new HiddenColumns();
45 assertEquals(0, hidden.getSize());
47 hidden.hideColumns(3, 5);
48 assertEquals(3, hidden.getSize());
50 hidden.hideColumns(8, 8);
51 assertEquals(4, hidden.getSize());
53 hidden.hideColumns(9, 14);
54 assertEquals(10, hidden.getSize());
56 ColumnSelection cs = new ColumnSelection();
57 hidden.revealAllHiddenColumns(cs);
58 assertEquals(0, hidden.getSize());
62 * Test the method that finds the visible column position of an alignment
63 * column, allowing for hidden columns.
65 @Test(groups = { "Functional" })
66 public void testFindColumnPosition()
68 HiddenColumns cs = new HiddenColumns();
69 assertEquals(5, cs.absoluteToVisibleColumn(5));
71 // hiding column 6 makes no difference
73 assertEquals(5, cs.absoluteToVisibleColumn(5));
75 // hiding column 4 moves column 5 to column 4
77 assertEquals(4, cs.absoluteToVisibleColumn(5));
79 // hiding column 4 moves column 4 to position 3
80 assertEquals(3, cs.absoluteToVisibleColumn(4));
82 // hiding columns 1 and 2 moves column 5 to column 2
84 assertEquals(2, cs.absoluteToVisibleColumn(5));
86 // check with > 1 hidden column regions
87 // where some columns are in the hidden regions
88 HiddenColumns cs2 = new HiddenColumns();
89 cs2.hideColumns(5, 10);
90 cs2.hideColumns(20, 27);
91 cs2.hideColumns(40, 44);
93 // hiding columns 5-10 and 20-27 moves column 8 to column 4
94 assertEquals(4, cs2.absoluteToVisibleColumn(8));
96 // and moves column 24 to 13
97 assertEquals(13, cs2.absoluteToVisibleColumn(24));
99 // and moves column 28 to 14
100 assertEquals(14, cs2.absoluteToVisibleColumn(28));
102 // and moves column 40 to 25
103 assertEquals(25, cs2.absoluteToVisibleColumn(40));
105 // check when hidden columns start at 0 that the visible column
107 HiddenColumns cs3 = new HiddenColumns();
108 cs3.hideColumns(0, 4);
109 assertEquals(0, cs3.absoluteToVisibleColumn(2));
111 // check that column after the last hidden region doesn't crash
112 assertEquals(46, cs2.absoluteToVisibleColumn(65));
115 @Test(groups = { "Functional" })
116 public void testVisibleContigsIterator()
118 HiddenColumns cs = new HiddenColumns();
120 Iterator<int[]> visible = cs.getVisContigsIterator(3, 10, false);
121 int[] region = visible.next();
122 assertEquals("[3, 9]", Arrays.toString(region));
123 assertFalse(visible.hasNext());
125 cs.hideColumns(3, 6);
126 cs.hideColumns(8, 9);
127 cs.hideColumns(12, 12);
129 // Test both ends visible region
131 // start position is inclusive, end position exclusive
132 visible = cs.getVisContigsIterator(1, 13, false);
133 region = visible.next();
134 assertEquals("[1, 2]", Arrays.toString(region));
135 region = visible.next();
136 assertEquals("[7, 7]", Arrays.toString(region));
137 region = visible.next();
138 assertEquals("[10, 11]", Arrays.toString(region));
139 assertFalse(visible.hasNext());
141 // Test start hidden, end visible
142 visible = cs.getVisContigsIterator(4, 14, false);
143 region = visible.next();
144 assertEquals("[7, 7]", Arrays.toString(region));
145 region = visible.next();
146 assertEquals("[10, 11]", Arrays.toString(region));
147 region = visible.next();
148 assertEquals("[13, 13]", Arrays.toString(region));
149 assertFalse(visible.hasNext());
151 // Test start hidden, end hidden
152 visible = cs.getVisContigsIterator(3, 10, false);
153 region = visible.next();
154 assertEquals("[7, 7]", Arrays.toString(region));
155 assertFalse(visible.hasNext());
157 // Test start visible, end hidden
158 visible = cs.getVisContigsIterator(0, 13, false);
159 region = visible.next();
160 assertEquals("[0, 2]", Arrays.toString(region));
161 region = visible.next();
162 assertEquals("[7, 7]", Arrays.toString(region));
163 region = visible.next();
164 assertEquals("[10, 11]", Arrays.toString(region));
165 assertFalse(visible.hasNext());
168 visible = cs.getVisContigsIterator(4, 6, false);
169 assertFalse(visible.hasNext());
172 @Test(groups = { "Functional" })
173 public void testEquals()
175 HiddenColumns cs = new HiddenColumns();
176 cs.hideColumns(5, 9);
178 // a different set of hidden columns
179 HiddenColumns cs2 = new HiddenColumns();
181 // with no hidden columns
182 assertFalse(cs.equals(cs2));
183 assertFalse(cs2.equals(cs));
185 // with the wrong kind of object
186 assertFalse(cs.equals(new HiddenColumnsCursor()));
188 // with a different hiddenColumns object - by size
189 HiddenColumns cs3 = new HiddenColumns();
190 cs3.hideColumns(2, 3);
191 assertFalse(cs.equals(cs3));
193 // with hidden columns added in a different order
194 cs2.hideColumns(6, 9);
195 assertFalse(cs.equals(cs2));
196 assertFalse(cs2.equals(cs));
198 cs2.hideColumns(5, 8);
200 assertTrue(cs.equals(cs2));
201 assertTrue(cs.equals(cs));
202 assertTrue(cs2.equals(cs));
203 assertTrue(cs2.equals(cs2));
205 // different ranges, same size
206 cs.hideColumns(10, 12);
207 cs2.hideColumns(10, 15);
208 assertFalse(cs.equals(cs2));
212 @Test(groups = "Functional")
213 public void testCopyConstructor()
215 HiddenColumns cs = new HiddenColumns();
216 cs.hideColumns(10, 11);
217 cs.hideColumns(5, 7);
218 Iterator<int[]> regions = cs.iterator();
219 assertEquals("[5, 7]",
220 Arrays.toString(regions.next()));
222 HiddenColumns cs2 = new HiddenColumns(cs);
223 regions = cs2.iterator();
224 assertTrue(cs2.hasHiddenColumns());
225 assertEquals(2, cs2.getNumberOfRegions());
226 // hidden columns are held in column order
227 assertEquals("[5, 7]",
228 Arrays.toString(regions.next()));
229 assertEquals("[10, 11]",
230 Arrays.toString(regions.next()));
233 @Test(groups = "Functional")
234 public void testCopyConstructor2()
236 HiddenColumns cs = new HiddenColumns();
237 cs.hideColumns(10, 11);
238 cs.hideColumns(5, 7);
240 HiddenColumns cs2 = new HiddenColumns(cs, 3, 9, 1);
241 assertTrue(cs2.hasHiddenColumns());
242 Iterator<int[]> regions = cs2.iterator();
244 // only [5,7] returned, offset by 1
245 assertEquals("[4, 6]",
246 Arrays.toString(regions.next()));
247 assertEquals(3, cs2.getSize());
249 cs2 = new HiddenColumns(cs, 8, 15, 4);
250 regions = cs2.iterator();
251 assertTrue(cs2.hasHiddenColumns());
253 // only [10,11] returned, offset by 4
254 assertEquals("[6, 7]",
255 Arrays.toString(regions.next()));
256 assertEquals(2, cs2.getSize());
258 cs2 = new HiddenColumns(cs, 6, 10, 4);
259 assertFalse(cs2.hasHiddenColumns());
263 * Test the code used to locate the reference sequence ruler origin
265 @Test(groups = { "Functional" })
266 public void testLocateVisibleStartofSequence()
268 // create random alignment
269 AlignmentGenerator gen = new AlignmentGenerator(false);
270 AlignmentI al = gen.generate(50, 20, 123, 5, 5);
272 HiddenColumns cs = al.getHiddenColumns();
273 ColumnSelection colsel = new ColumnSelection();
275 SequenceI seq = new Sequence("RefSeq", "-A-SD-ASD--E---");
276 assertEquals(2, seq.findIndex(seq.getStart()));
279 assertEquals(seq.findIndex(seq.getStart()) - 1, cs.locateVisibleStartOfSequence(seq));
281 // hidden column on gap after end of sequence - should not affect bounds
282 colsel.hideSelectedColumns(13, al.getHiddenColumns());
283 assertEquals(seq.findIndex(seq.getStart()) - 1,cs.locateVisibleStartOfSequence(seq));
285 cs.revealAllHiddenColumns(colsel);
286 // hidden column on gap before beginning of sequence - should vis bounds by
288 colsel.hideSelectedColumns(0, al.getHiddenColumns());
289 assertEquals(seq.findIndex(seq.getStart()) - 2,cs.locateVisibleStartOfSequence(seq));
291 cs.revealAllHiddenColumns(colsel);
292 // hide columns around most of sequence - leave one residue remaining
293 cs.hideColumns(1, 3);
294 cs.hideColumns(6, 11);
296 Iterator<int[]> it = cs.getVisContigsIterator(0, 6, false);
298 assertEquals("-D", seq.getSequenceStringFromIterator(it));
299 // cs.getVisibleSequenceStrings(0, 5, new SequenceI[]
302 assertEquals(1, cs.locateVisibleStartOfSequence(seq));
303 cs.revealAllHiddenColumns(colsel);
305 // hide whole sequence - should just get location of hidden region
306 // containing sequence
307 cs.hideColumns(1, 11);
308 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
310 cs.revealAllHiddenColumns(colsel);
311 cs.hideColumns(0, 15);
312 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
314 SequenceI seq2 = new Sequence("RefSeq2", "-------A-SD-ASD--E---");
316 cs.revealAllHiddenColumns(colsel);
317 cs.hideColumns(7, 17);
318 assertEquals(0,cs.locateVisibleStartOfSequence(seq2));
320 cs.revealAllHiddenColumns(colsel);
321 cs.hideColumns(3, 17);
322 assertEquals(0,cs.locateVisibleStartOfSequence(seq2));
324 cs.revealAllHiddenColumns(colsel);
325 cs.hideColumns(3, 19);
326 assertEquals(0,cs.locateVisibleStartOfSequence(seq2));
328 cs.revealAllHiddenColumns(colsel);
329 cs.hideColumns(0, 0);
330 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
332 cs.revealAllHiddenColumns(colsel);
333 cs.hideColumns(0, 1);
334 assertEquals(1,cs.locateVisibleStartOfSequence(seq));
336 cs.revealAllHiddenColumns(colsel);
337 cs.hideColumns(0, 2);
338 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
340 cs.revealAllHiddenColumns(colsel);
341 cs.hideColumns(1, 1);
342 assertEquals(2,cs.locateVisibleStartOfSequence(seq));
344 cs.revealAllHiddenColumns(colsel);
345 cs.hideColumns(1, 2);
346 assertEquals(1,cs.locateVisibleStartOfSequence(seq));
348 cs.revealAllHiddenColumns(colsel);
349 cs.hideColumns(1, 3);
350 assertEquals(1,cs.locateVisibleStartOfSequence(seq));
352 cs.revealAllHiddenColumns(colsel);
353 cs.hideColumns(0, 2);
354 cs.hideColumns(5, 6);
355 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
357 cs.revealAllHiddenColumns(colsel);
358 cs.hideColumns(0, 2);
359 cs.hideColumns(5, 6);
360 cs.hideColumns(9, 10);
361 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
363 cs.revealAllHiddenColumns(colsel);
364 cs.hideColumns(0, 2);
365 cs.hideColumns(7, 11);
366 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
368 cs.revealAllHiddenColumns(colsel);
369 cs.hideColumns(2, 4);
370 cs.hideColumns(7, 11);
371 assertEquals(1,cs.locateVisibleStartOfSequence(seq));
373 cs.revealAllHiddenColumns(colsel);
374 cs.hideColumns(2, 4);
375 cs.hideColumns(7, 12);
376 assertEquals(1,cs.locateVisibleStartOfSequence(seq));
378 cs.revealAllHiddenColumns(colsel);
379 cs.hideColumns(1, 11);
380 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
382 cs.revealAllHiddenColumns(colsel);
383 cs.hideColumns(0, 12);
384 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
386 cs.revealAllHiddenColumns(colsel);
387 cs.hideColumns(0, 4);
388 cs.hideColumns(6, 12);
389 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
391 cs.revealAllHiddenColumns(colsel);
392 cs.hideColumns(0, 1);
393 cs.hideColumns(3, 12);
394 assertEquals(0,cs.locateVisibleStartOfSequence(seq));
396 cs.revealAllHiddenColumns(colsel);
397 cs.hideColumns(3, 14);
398 cs.hideColumns(17, 19);
399 assertEquals(3,cs.locateVisibleStartOfSequence(seq2));
401 cs.revealAllHiddenColumns(colsel);
402 cs.hideColumns(3, 7);
403 cs.hideColumns(9, 14);
404 cs.hideColumns(17, 19);
405 assertEquals(9,cs.locateVisibleStartOfSequence(seq2));
407 cs.revealAllHiddenColumns(colsel);
408 cs.hideColumns(0, 1);
409 cs.hideColumns(3, 4);
410 cs.hideColumns(6, 8);
411 cs.hideColumns(10, 12);
412 assertEquals(6, cs.locateVisibleStartOfSequence(seq));
416 @Test(groups = { "Functional" })
417 public void testLocateVisibleStartPathologicals()
419 // test some pathological cases we missed
420 AlignmentI al = new Alignment(
422 { new Sequence("refseqGaptest", "KTDVTI----------NFI-----G----L") });
423 HiddenColumns cs = new HiddenColumns();
424 cs.hideList(al.getSequenceAt(0).getInsertions());
426 + al.getSequenceAt(0).getCharAt(cs.visibleToAbsoluteColumn(9)));
428 // KM: no idea what this is meant to be testing... seems to be an unfinished
432 @Test(groups = { "Functional" })
433 public void testHideColumns()
435 // create random alignment
436 AlignmentGenerator gen = new AlignmentGenerator(false);
437 AlignmentI al = gen.generate(50, 20, 123, 5, 5);
439 ColumnSelection colsel = new ColumnSelection();
440 HiddenColumns cs = al.getHiddenColumns();
441 colsel.hideSelectedColumns(5, al.getHiddenColumns());
442 Iterator<int[]> regions = cs.iterator();
443 assertEquals(1, cs.getNumberOfRegions());
444 assertEquals("[5, 5]", Arrays.toString(regions.next()));
446 colsel.hideSelectedColumns(3, al.getHiddenColumns());
447 regions = cs.iterator();
448 assertEquals(2, cs.getNumberOfRegions());
449 // two hidden ranges, in order:
450 assertEquals("[3, 3]", Arrays.toString(regions.next()));
451 assertEquals("[5, 5]", Arrays.toString(regions.next()));
453 // hiding column 4 expands [3, 3] to [3, 4]
454 // and merges to [5, 5] to make [3, 5]
455 colsel.hideSelectedColumns(4, al.getHiddenColumns());
456 regions = cs.iterator();
457 assertEquals(1, cs.getNumberOfRegions());
458 assertEquals("[3, 5]", Arrays.toString(regions.next()));
460 // clear hidden columns (note they are added to selected)
461 cs.revealAllHiddenColumns(colsel);
462 // it is now actually null but getter returns an empty list
463 assertEquals(0, cs.getNumberOfRegions());
465 cs.hideColumns(3, 6);
466 regions = cs.iterator();
467 int[] firstHiddenRange = regions.next();
468 assertEquals("[3, 6]", Arrays.toString(firstHiddenRange));
470 // adding a subrange of already hidden should do nothing
471 cs.hideColumns(4, 5);
472 regions = cs.iterator();
473 assertEquals(1, cs.getNumberOfRegions());
474 assertEquals("[3, 6]",
475 Arrays.toString(regions.next()));
476 cs.hideColumns(3, 5);
477 regions = cs.iterator();
478 assertEquals(1, cs.getNumberOfRegions());
479 assertEquals("[3, 6]",
480 Arrays.toString(regions.next()));
481 cs.hideColumns(4, 6);
482 regions = cs.iterator();
483 assertEquals(1, cs.getNumberOfRegions());
484 assertEquals("[3, 6]",
485 Arrays.toString(regions.next()));
486 cs.hideColumns(3, 6);
487 regions = cs.iterator();
488 assertEquals(1, cs.getNumberOfRegions());
489 assertEquals("[3, 6]",
490 Arrays.toString(regions.next()));
492 cs.revealAllHiddenColumns(colsel);
493 cs.hideColumns(2, 4);
494 regions = cs.iterator();
495 assertEquals(1, cs.getNumberOfRegions());
496 assertEquals("[2, 4]", Arrays.toString(regions.next()));
498 // extend contiguous with 2 positions overlap
499 cs.hideColumns(3, 5);
500 regions = cs.iterator();
501 assertEquals(1, cs.getNumberOfRegions());
502 assertEquals("[2, 5]", Arrays.toString(regions.next()));
504 // extend contiguous with 1 position overlap
505 cs.hideColumns(5, 6);
506 regions = cs.iterator();
507 assertEquals(1, cs.getNumberOfRegions());
508 assertEquals("[2, 6]", Arrays.toString(regions.next()));
510 // extend contiguous with overlap both ends:
511 cs.hideColumns(1, 7);
512 regions = cs.iterator();
513 assertEquals(1, cs.getNumberOfRegions());
514 assertEquals("[1, 7]", Arrays.toString(regions.next()));
516 cs.revealAllHiddenColumns(colsel);
517 cs.hideColumns(15, 18);
518 cs.hideColumns(2, 4);
519 cs.hideColumns(7, 9);
520 regions = cs.iterator();
521 assertEquals(3, cs.getNumberOfRegions());
522 assertEquals("[2, 4]", Arrays.toString(regions.next()));
523 assertEquals("[7, 9]", Arrays.toString(regions.next()));
524 assertEquals("[15, 18]", Arrays.toString(regions.next()));
528 * Test the method that reveals a range of hidden columns given the start
529 * column of the range
531 @Test(groups = { "Functional" })
532 public void testRevealHiddenColumns()
534 ColumnSelection colsel = new ColumnSelection();
535 HiddenColumns cs = new HiddenColumns();
537 // test with null hidden columns
538 cs.revealHiddenColumns(5, colsel);
539 assertTrue(colsel.getSelected().isEmpty());
541 cs.hideColumns(5, 8);
542 colsel.addElement(10);
543 cs.revealHiddenColumns(5, colsel);
545 // hiddenColumns now empty
546 assertEquals(0, cs.getSize());
548 // revealed columns are marked as selected (added to selection):
549 assertEquals("[10, 5, 6, 7, 8]", colsel.getSelected().toString());
551 // calling with a column other than the range start does nothing:
552 colsel = new ColumnSelection();
553 cs = new HiddenColumns();
554 cs.hideColumns(5, 8);
556 int prevSize = cs.getSize();
557 cs.revealHiddenColumns(6, colsel);
558 assertEquals(prevSize, cs.getSize());
559 assertTrue(colsel.getSelected().isEmpty());
561 // reveal hidden columns when there is more than one region
562 cs.hideColumns(20, 23);
563 // now there are 2 hidden regions
564 assertEquals(2, cs.getNumberOfRegions());
566 cs.revealHiddenColumns(20, colsel);
568 // hiddenColumns now has one region
569 assertEquals(1, cs.getNumberOfRegions());
571 // revealed columns are marked as selected (added to selection):
572 assertEquals("[20, 21, 22, 23]", colsel.getSelected().toString());
574 // call with a column past the end of the hidden column ranges
576 cs.revealHiddenColumns(20, colsel);
577 // hiddenColumns still has 1 region
578 assertEquals(1, cs.getNumberOfRegions());
579 assertTrue(colsel.getSelected().isEmpty());
582 @Test(groups = { "Functional" })
583 public void testRevealAllHiddenColumns()
585 HiddenColumns hidden = new HiddenColumns();
586 ColumnSelection colsel = new ColumnSelection();
588 // test with null hidden columns
589 hidden.revealAllHiddenColumns(colsel);
590 assertTrue(colsel.getSelected().isEmpty());
592 hidden.hideColumns(5, 8);
593 hidden.hideColumns(2, 3);
594 colsel.addElement(11);
595 colsel.addElement(1);
596 hidden.revealAllHiddenColumns(colsel);
599 * revealing hidden columns adds them (in order) to the (unordered)
603 // hiddenColumns now empty
604 assertEquals(0, hidden.getSize());
606 assertEquals("[11, 1, 2, 3, 5, 6, 7, 8]",
607 colsel.getSelected().toString());
610 @Test(groups = { "Functional" })
611 public void testIsVisible()
613 HiddenColumns cs = new HiddenColumns();
614 cs.hideColumns(2, 4);
615 cs.hideColumns(6, 7);
616 assertTrue(cs.isVisible(0));
617 assertTrue(cs.isVisible(-99));
618 assertTrue(cs.isVisible(1));
619 assertFalse(cs.isVisible(2));
620 assertFalse(cs.isVisible(3));
621 assertFalse(cs.isVisible(4));
622 assertTrue(cs.isVisible(5));
623 assertFalse(cs.isVisible(6));
624 assertFalse(cs.isVisible(7));
625 assertTrue(cs.isVisible(8));
629 * Test for the case when a hidden range encloses more one already hidden
632 @Test(groups = { "Functional" })
633 public void testHideColumns_subsumingHidden()
636 * JAL-2370 bug scenario:
637 * two hidden ranges subsumed by a third
639 HiddenColumns cs = new HiddenColumns();
640 cs.hideColumns(49, 59);
641 cs.hideColumns(69, 79);
642 Iterator<int[]> regions = cs.iterator();
643 assertEquals(2, cs.getNumberOfRegions());
644 assertEquals("[49, 59]", Arrays.toString(regions.next()));
645 assertEquals("[69, 79]", Arrays.toString(regions.next()));
647 cs.hideColumns(48, 80);
648 regions = cs.iterator();
649 assertEquals(1, cs.getNumberOfRegions());
650 assertEquals("[48, 80]", Arrays.toString(regions.next()));
653 * another...joining hidden ranges
655 cs = new HiddenColumns();
656 cs.hideColumns(10, 20);
657 cs.hideColumns(30, 40);
658 cs.hideColumns(50, 60);
659 // hiding 21-49 should merge to one range
660 cs.hideColumns(21, 49);
661 regions = cs.iterator();
662 assertEquals(1, cs.getNumberOfRegions());
663 assertEquals("[10, 60]", Arrays.toString(regions.next()));
666 * another...left overlap, subsumption, right overlap,
667 * no overlap of existing hidden ranges
669 cs = new HiddenColumns();
670 cs.hideColumns(10, 20);
671 cs.hideColumns(10, 20);
672 cs.hideColumns(30, 35);
673 cs.hideColumns(40, 50);
674 cs.hideColumns(60, 70);
676 cs.hideColumns(15, 45);
677 regions = cs.iterator();
678 assertEquals(2, cs.getNumberOfRegions());
679 assertEquals("[10, 50]", Arrays.toString(regions.next()));
680 assertEquals("[60, 70]", Arrays.toString(regions.next()));
683 @Test(groups = { "Functional" })
684 public void testHideColumns_BitSet()
688 BitSet one = new BitSet();
692 cs = new HiddenColumns();
694 assertEquals(1, cs.getNumberOfRegions());
697 cs = new HiddenColumns();
699 assertEquals(1, cs.getNumberOfRegions());
702 cs = new HiddenColumns();
704 assertEquals(1, cs.getNumberOfRegions());
708 cs = new HiddenColumns();
710 assertEquals(2, cs.getNumberOfRegions());
712 assertEquals(0, cs.visibleToAbsoluteColumn(0));
713 assertEquals(2, cs.visibleToAbsoluteColumn(1));
714 assertEquals(4, cs.visibleToAbsoluteColumn(2));
718 cs = new HiddenColumns();
721 assertEquals(1, cs.getNumberOfRegions());
723 assertEquals(0, cs.visibleToAbsoluteColumn(0));
724 assertEquals(1, cs.visibleToAbsoluteColumn(1));
725 assertEquals(2, cs.visibleToAbsoluteColumn(2));
726 assertEquals(4, cs.visibleToAbsoluteColumn(3));
729 @Test(groups = { "Functional" })
730 public void hideColumns_BitSetAndRange()
732 HiddenColumns hc = new HiddenColumns();
733 hc.hideColumns(3, 5);
734 hc.hideColumns(15, 20);
735 hc.hideColumns(45, 60);
737 BitSet tohide = new BitSet();
739 // all unhidden if tohide is empty and range covers hidden
740 hc.hideColumns(tohide, 1, 70);
741 assertTrue(!hc.hasHiddenColumns());
743 hc.hideColumns(3, 5);
744 hc.hideColumns(15, 20);
745 hc.hideColumns(45, 60);
747 // but not if range does not cover hidden
748 hc.hideColumns(tohide, 23, 40);
749 assertTrue(hc.hasHiddenColumns());
751 // and partial unhide if range partially covers
752 hc.hideColumns(tohide, 1, 17);
753 Iterator<int[]> it = hc.iterator();
754 assertTrue(it.hasNext());
755 int[] region = it.next();
757 assertEquals(18, region[0]);
758 assertEquals(20, region[1]);
760 assertTrue(it.hasNext());
763 assertEquals(45, region[0]);
764 assertEquals(60, region[1]);
766 assertFalse(it.hasNext());
769 @Test(groups = { "Functional" })
770 public void testRegionsToString()
772 HiddenColumns hc = new HiddenColumns();
774 String result = hc.regionsToString(",", "--");
775 assertEquals("", result);
777 hc.hideColumns(3, 7);
778 hc.hideColumns(10, 10);
779 hc.hideColumns(14, 15);
781 result = hc.regionsToString(",", "--");
782 assertEquals("3--7,10--10,14--15", result);
785 @Test(groups = "Functional")
786 public void testGetVisibleStartAndEndIndex()
788 Sequence seq = new Sequence("testSeq", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
789 AlignmentI align = new Alignment(new SequenceI[] { seq });
790 HiddenColumns hc = new HiddenColumns();
792 int[] startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
793 assertEquals(0, startEnd[0]);
794 assertEquals(25, startEnd[1]);
796 hc.hideColumns(0, 0);
797 startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
798 assertEquals(1, startEnd[0]);
799 assertEquals(25, startEnd[1]);
801 hc.hideColumns(6, 9);
802 hc.hideColumns(11, 12);
803 startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
804 assertEquals(1, startEnd[0]);
805 assertEquals(25, startEnd[1]);
807 hc.hideColumns(24, 25);
808 startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
809 System.out.println(startEnd[0] + " : " + startEnd[1]);
810 assertEquals(1, startEnd[0]);
811 assertEquals(23, startEnd[1]);
813 // force lowest range to start of alignment
814 hc = new HiddenColumns();
815 hc.hideColumns(3, 4);
816 startEnd = hc.getVisibleStartAndEndIndex(align.getWidth());
817 assertEquals(0, startEnd[0]);
818 assertEquals(25, startEnd[1]);
821 @Test(groups = "Functional")
822 public void testGetRegionWithEdgeAtRes()
824 HiddenColumns hc = new HiddenColumns();
826 int[] result = hc.getRegionWithEdgeAtRes(5);
829 hc.hideColumns(3, 7);
830 hc.hideColumns(10, 10);
831 hc.hideColumns(14, 15);
833 result = hc.getRegionWithEdgeAtRes(2);
834 assertEquals(3, result[0]);
835 assertEquals(7, result[1]);
837 result = hc.getRegionWithEdgeAtRes(4);
838 assertEquals(10, result[0]);
839 assertEquals(10, result[1]);
841 result = hc.getRegionWithEdgeAtRes(5);
842 assertEquals(10, result[0]);
843 assertEquals(10, result[1]);
845 result = hc.getRegionWithEdgeAtRes(6);
848 result = hc.getRegionWithEdgeAtRes(0);
851 result = hc.getRegionWithEdgeAtRes(7);
852 assertEquals(14, result[0]);
853 assertEquals(15, result[1]);
855 result = hc.getRegionWithEdgeAtRes(8);
856 assertEquals(14, result[0]);
857 assertEquals(15, result[1]);
859 result = hc.getRegionWithEdgeAtRes(16);
863 @Test(groups = "Functional")
864 public void testHasHiddenColumns()
866 HiddenColumns h = new HiddenColumns();
868 // new HiddenColumns2 has no hidden cols
869 assertFalse(h.hasHiddenColumns());
871 // some columns hidden, returns true
872 h.hideColumns(5, 10);
873 assertTrue(h.hasHiddenColumns());
875 // reveal columns, no hidden cols again
876 ColumnSelection sel = new ColumnSelection();
877 h.revealAllHiddenColumns(sel);
878 assertFalse(h.hasHiddenColumns());
881 @Test(groups = "Functional")
882 public void testHasManyHiddenColumns()
884 HiddenColumns h = new HiddenColumns();
886 // h has no hidden cols
887 assertFalse(h.hasMultiHiddenColumnRegions());
889 // one set of columns hidden, returns false
890 h.hideColumns(5, 10);
891 assertFalse(h.hasMultiHiddenColumnRegions());
893 // two sets hidden, returns true
894 h.hideColumns(15, 17);
895 assertTrue(h.hasMultiHiddenColumnRegions());
897 // back to one block, asserts false
898 h.hideColumns(11, 14);
899 assertFalse(h.hasMultiHiddenColumnRegions());
902 @Test(groups = "Functional")
903 public void testAdjustForHiddenColumns()
905 HiddenColumns h = new HiddenColumns();
906 // returns input value when there are no hidden columns
907 assertEquals(10, h.visibleToAbsoluteColumn(10));
909 h.hideColumns(20, 30);
910 assertEquals(10, h.visibleToAbsoluteColumn(10));
911 assertEquals(20 + 11, h.visibleToAbsoluteColumn(20));
912 assertEquals(35 + 11, h.visibleToAbsoluteColumn(35));
915 assertEquals(10 + 3, h.visibleToAbsoluteColumn(10));
916 assertEquals(20 + 14, h.visibleToAbsoluteColumn(20));
917 assertEquals(35 + 14, h.visibleToAbsoluteColumn(35));
919 ColumnSelection sel = new ColumnSelection();
920 h.revealAllHiddenColumns(sel);
922 assertEquals(4, h.visibleToAbsoluteColumn(2));
925 @Test(groups = "Functional")
926 public void testGetHiddenBoundaryLeft()
928 HiddenColumns h = new HiddenColumns();
930 // returns same value if no hidden cols
931 assertEquals(3, h.getNextHiddenBoundary(true, 3));
933 h.hideColumns(5, 10);
934 assertEquals(10, h.getNextHiddenBoundary(true, 15));
935 assertEquals(3, h.getNextHiddenBoundary(true, 3));
936 assertEquals(7, h.getNextHiddenBoundary(true, 7));
938 h.hideColumns(15, 20);
939 assertEquals(10, h.getNextHiddenBoundary(true, 15));
940 assertEquals(20, h.getNextHiddenBoundary(true, 21));
943 @Test(groups = "Functional")
944 public void testGetNextHiddenBoundary()
946 HiddenColumns h = new HiddenColumns();
948 // returns same value if no hidden cols
949 assertEquals(3, h.getNextHiddenBoundary(false, 3));
951 h.hideColumns(5, 10);
952 assertEquals(5, h.getNextHiddenBoundary(false, 3));
953 assertEquals(15, h.getNextHiddenBoundary(false, 15));
954 assertEquals(7, h.getNextHiddenBoundary(false, 7));
956 h.hideColumns(15, 20);
957 assertEquals(15, h.getNextHiddenBoundary(false, 7));
958 assertEquals(15, h.getNextHiddenBoundary(false, 14));
960 // returns same value if there is no next hidden column
961 assertEquals(22, h.getNextHiddenBoundary(false, 22));
964 @Test(groups = "Functional")
965 public void testIterator()
967 HiddenColumns h = new HiddenColumns();
968 Iterator<int[]> result = h.iterator();
969 assertFalse(result.hasNext());
971 h.hideColumns(5, 10);
972 result = h.iterator();
973 int[] next = result.next();
974 assertEquals(5, next[0]);
975 assertEquals(10, next[1]);
976 assertFalse(result.hasNext());
978 h.hideColumns(22, 23);
979 result = h.iterator();
980 next = result.next();
981 assertEquals(5, next[0]);
982 assertEquals(10, next[1]);
983 next = result.next();
984 assertEquals(22, next[0]);
985 assertEquals(23, next[1]);
986 assertFalse(result.hasNext());
988 // test for only one hidden region at start of alignment
989 ColumnSelection sel = new ColumnSelection();
990 h.revealAllHiddenColumns(sel);
992 result = h.iterator();
993 next = result.next();
994 assertEquals(0, next[0]);
995 assertEquals(1, next[1]);
996 assertFalse(result.hasNext());
999 /* @Test(groups = "Functional")
1000 public void testGetVisibleSequenceStrings()
1002 HiddenColumns h = new HiddenColumns();
1003 SequenceI seq1 = new Sequence("TEST1", "GALMFWKQESPVICYHRNDT");
1004 SequenceI seq2 = new Sequence("TEST2", "VICYHRNDTGA");
1005 SequenceI[] seqs = new SequenceI[2];
1008 String[] result = h.getVisibleSequenceStrings(5, 10, seqs);
1009 assertEquals(2, result.length);
1010 assertEquals("WKQES", result[0]);
1011 assertEquals("RNDTG", result[1]);
1013 h.hideColumns(6, 8);
1014 result = h.getVisibleSequenceStrings(5, 10, seqs);
1015 assertEquals(2, result.length);
1016 assertEquals("WS", result[0]);
1017 assertEquals("RG", result[1]);
1019 SequenceI seq = new Sequence("RefSeq", "-A-SD-ASD--E---");
1020 ColumnSelection sel = new ColumnSelection();
1021 h.revealAllHiddenColumns(sel);
1022 h.hideColumns(1, 3);
1023 h.hideColumns(6, 11);
1025 h.getVisibleSequenceStrings(0, 5, new SequenceI[]
1029 @Test(groups = "Functional")
1030 public void testHideInsertionsFor()
1032 HiddenColumns h = new HiddenColumns();
1033 HiddenColumns h2 = new HiddenColumns();
1034 SequenceI seq1 = new Sequence("TEST1", "GAL---MFW-KQESPVICY--HRNDT");
1035 SequenceI seq2 = new Sequence("TEST1", "GALMFWKQESPVICYHRNDT");
1037 h.hideList(seq2.getInsertions());
1038 assertTrue(h.equals(h2));
1040 h.hideList(seq1.getInsertions());
1041 h2.hideColumns(3, 5);
1042 h2.hideColumns(9, 9);
1043 h2.hideColumns(19, 20);
1044 assertTrue(h.equals(h2));
1047 @Test(groups = "Functional")
1048 public void testHideColumns_BitSet_range()
1050 HiddenColumns h = new HiddenColumns();
1051 HiddenColumns h2 = new HiddenColumns();
1053 BitSet tohide = new BitSet(21);
1054 h.hideColumns(tohide);
1055 assertTrue(h.equals(h2));
1057 // when setting bitset, first param is invlusive, second exclusive
1061 h.hideColumns(tohide, 5, 23);
1063 h2.hideColumns(5, 5);
1064 h2.hideColumns(9, 9);
1065 h2.hideColumns(15, 20);
1066 assertTrue(h.equals(h2));
1070 h.hideColumns(tohide, 23, 30);
1071 assertTrue(h.equals(h2));
1074 h.hideColumns(tohide, 30, 45);
1075 h2.hideColumns(41, 41);
1076 assertTrue(h.equals(h2));
1080 h.hideColumns(tohide, 17, 50);
1081 h2 = new HiddenColumns();
1082 h2.hideColumns(17, 20);
1083 h2.hideColumns(25, 27);
1084 h2.hideColumns(41, 41);
1087 @Test(groups = "Functional")
1088 public void testOffsetByVisibleColumns()
1090 HiddenColumns h = new HiddenColumns();
1091 int result = h.offsetByVisibleColumns(-1, 10);
1092 assertEquals(9, result);
1094 h.hideColumns(7, 9);
1095 result = h.offsetByVisibleColumns(-4, 10);
1096 assertEquals(3, result);
1098 h.hideColumns(14, 15);
1099 result = h.offsetByVisibleColumns(-4, 10);
1100 assertEquals(3, result);
1102 result = h.offsetByVisibleColumns(-10, 17);
1103 assertEquals(2, result);
1105 result = h.offsetByVisibleColumns(-1, 7);
1106 assertEquals(5, result);
1108 result = h.offsetByVisibleColumns(-1, 8);
1109 assertEquals(5, result);
1111 result = h.offsetByVisibleColumns(-3, 15);
1112 assertEquals(10, result);
1114 ColumnSelection sel = new ColumnSelection();
1115 h.revealAllHiddenColumns(sel);
1116 h.hideColumns(0, 30);
1117 result = h.offsetByVisibleColumns(-31, 0);
1118 assertEquals(-31, result);
1120 HiddenColumns cs = new HiddenColumns();
1122 // test that without hidden columns, offsetByVisibleColumns returns
1123 // position n to left of provided position
1124 long pos = cs.offsetByVisibleColumns(-3, 10);
1125 assertEquals(7, pos);
1127 // 0 returns same position
1128 pos = cs.offsetByVisibleColumns(0, 10);
1129 assertEquals(10, pos);
1131 // overflow to left returns negative number
1132 pos = cs.offsetByVisibleColumns(-3, 0);
1133 assertEquals(-3, pos);
1135 // test that with hidden columns to left of result column
1136 // behaviour is the same as above
1137 cs.hideColumns(1, 3);
1139 // position n to left of provided position
1140 pos = cs.offsetByVisibleColumns(-3, 10);
1141 assertEquals(7, pos);
1143 // 0 returns same position
1144 pos = cs.offsetByVisibleColumns(0, 10);
1145 assertEquals(10, pos);
1147 // test with one set of hidden columns between start and required position
1148 cs.hideColumns(12, 15);
1149 pos = cs.offsetByVisibleColumns(-8, 17);
1150 assertEquals(5, pos);
1152 // test with two sets of hidden columns between start and required position
1153 cs.hideColumns(20, 21);
1154 pos = cs.offsetByVisibleColumns(-8, 23);
1155 assertEquals(9, pos);
1157 // repeat last 2 tests with no hidden columns to left of required position
1158 ColumnSelection colsel = new ColumnSelection();
1159 cs.revealAllHiddenColumns(colsel);
1161 // test with one set of hidden columns between start and required position
1162 cs.hideColumns(12, 15);
1163 pos = cs.offsetByVisibleColumns(-8, 17);
1164 assertEquals(5, pos);
1166 // test with two sets of hidden columns between start and required position
1167 cs.hideColumns(20, 21);
1168 pos = cs.offsetByVisibleColumns(-8, 23);
1169 assertEquals(9, pos);
1171 // test with right (positive) offsets
1173 // test that without hidden columns, offsetByVisibleColumns returns
1174 // position n to right of provided position
1175 pos = cs.offsetByVisibleColumns(3, 7);
1176 assertEquals(10, pos);
1178 // test that with hidden columns to left of result column
1179 // behaviour is the same as above
1180 cs.hideColumns(1, 3);
1182 // test with one set of hidden columns between start and required position
1183 cs.hideColumns(12, 15);
1184 pos = cs.offsetByVisibleColumns(8, 5);
1185 assertEquals(17, pos);
1187 // test with two sets of hidden columns between start and required position
1188 cs.hideColumns(20, 21);
1189 pos = cs.offsetByVisibleColumns(8, 9);
1190 assertEquals(23, pos);
1192 // repeat last 2 tests with no hidden columns to left of required position
1193 colsel = new ColumnSelection();
1194 cs.revealAllHiddenColumns(colsel);
1196 // test with one set of hidden columns between start and required position
1197 cs.hideColumns(12, 15);
1198 pos = cs.offsetByVisibleColumns(8, 5);
1199 assertEquals(17, pos);
1201 // test with two sets of hidden columns between start and required position
1202 cs.hideColumns(20, 21);
1203 pos = cs.offsetByVisibleColumns(8, 9);
1204 assertEquals(23, pos);
1207 @Test(groups = "Functional")
1208 public void testBoundedIterator()
1210 HiddenColumns h = new HiddenColumns();
1211 Iterator<int[]> it = h.getBoundedIterator(0, 10);
1213 // no hidden columns = nothing to iterate over
1214 assertFalse(it.hasNext());
1216 // [start,end] contains all hidden columns
1217 // all regions are returned
1218 h.hideColumns(3, 10);
1219 h.hideColumns(14, 16);
1220 it = h.getBoundedIterator(0, 20);
1221 assertTrue(it.hasNext());
1222 int[] next = it.next();
1223 assertEquals(3, next[0]);
1224 assertEquals(10, next[1]);
1226 assertEquals(14, next[0]);
1227 assertEquals(16, next[1]);
1228 assertFalse(it.hasNext());
1230 // [start,end] overlaps a region
1231 // 1 region returned
1232 it = h.getBoundedIterator(5, 7);
1233 assertTrue(it.hasNext());
1235 assertEquals(3, next[0]);
1236 assertEquals(10, next[1]);
1237 assertFalse(it.hasNext());
1239 // [start,end] fully contains 1 region and start of last
1240 // - 2 regions returned
1241 it = h.getBoundedIterator(3, 15);
1242 assertTrue(it.hasNext());
1244 assertEquals(3, next[0]);
1245 assertEquals(10, next[1]);
1247 assertEquals(14, next[0]);
1248 assertEquals(16, next[1]);
1249 assertFalse(it.hasNext());
1251 // [start,end] contains end of first region and whole of last region
1252 // - 2 regions returned
1253 it = h.getBoundedIterator(4, 20);
1254 assertTrue(it.hasNext());
1256 assertEquals(3, next[0]);
1257 assertEquals(10, next[1]);
1259 assertEquals(14, next[0]);
1260 assertEquals(16, next[1]);
1261 assertFalse(it.hasNext());
1264 @Test(groups = "Functional")
1265 public void testBoundedStartIterator()
1267 HiddenColumns h = new HiddenColumns();
1268 Iterator<Integer> it = h.getBoundedStartIterator(0, 10);
1270 // no hidden columns = nothing to iterate over
1271 assertFalse(it.hasNext());
1273 // [start,end] contains all hidden columns
1274 // all regions are returned
1275 h.hideColumns(3, 10);
1276 h.hideColumns(14, 16);
1277 it = h.getBoundedStartIterator(0, 20);
1278 assertTrue(it.hasNext());
1279 int next = it.next();
1280 assertEquals(3, next);
1282 assertEquals(6, next);
1283 assertFalse(it.hasNext());
1285 // [start,end] does not contain a start of a region
1286 // no regions to iterate over
1287 it = h.getBoundedStartIterator(4, 5);
1288 assertFalse(it.hasNext());
1290 // [start,end] fully contains 1 region and start of last
1291 // - 2 regions returned
1292 it = h.getBoundedStartIterator(3, 7);
1293 assertTrue(it.hasNext());
1295 assertEquals(3, next);
1297 assertEquals(6, next);
1298 assertFalse(it.hasNext());
1300 // [start,end] contains whole of last region
1301 // - 1 region returned
1302 it = h.getBoundedStartIterator(4, 20);
1303 assertTrue(it.hasNext());
1305 assertEquals(6, next);
1306 assertFalse(it.hasNext());
1309 @Test(groups = "Functional")
1310 public void testVisibleBlocksVisBoundsIterator()
1312 HiddenColumns h = new HiddenColumns();
1313 Iterator<int[]> regions = h.getVisContigsIterator(0, 31, true);
1315 // only 1 visible region spanning 0-30 if nothing is hidden
1316 assertTrue(regions.hasNext());
1317 int[] region = regions.next();
1318 assertEquals(0, region[0]);
1319 assertEquals(30, region[1]);
1320 assertFalse(regions.hasNext());
1322 // hide 1 region in middle
1323 // 2 regions one on either side
1324 // second region boundary accounts for hidden columns
1325 h.hideColumns(10, 15);
1326 regions = h.getVisContigsIterator(0, 31, true);
1328 assertTrue(regions.hasNext());
1329 region = regions.next();
1330 assertEquals(0, region[0]);
1331 assertEquals(9, region[1]);
1332 region = regions.next();
1333 assertEquals(16, region[0]);
1334 assertEquals(36, region[1]);
1335 assertFalse(regions.hasNext());
1337 // single hidden region at left
1338 h = new HiddenColumns();
1339 h.hideColumns(0, 5);
1340 regions = h.getVisContigsIterator(0, 31, true);
1342 assertTrue(regions.hasNext());
1343 region = regions.next();
1344 assertEquals(6, region[0]);
1345 assertEquals(36, region[1]);
1346 assertFalse(regions.hasNext());
1348 // single hidden region at right
1349 h = new HiddenColumns();
1350 h.hideColumns(27, 30);
1351 regions = h.getVisContigsIterator(0, 31, true);
1353 assertTrue(regions.hasNext());
1354 region = regions.next();
1355 assertEquals(0, region[0]);
1356 assertEquals(26, region[1]);
1357 region = regions.next();
1358 assertEquals(31, region[0]);
1359 assertEquals(34, region[1]);
1360 assertFalse(regions.hasNext());
1362 // hidden region at left + hidden region in middle
1363 h = new HiddenColumns();
1364 h.hideColumns(0, 5);
1365 h.hideColumns(23, 25);
1366 regions = h.getVisContigsIterator(0, 31, true);
1368 assertTrue(regions.hasNext());
1369 region = regions.next();
1370 assertEquals(6, region[0]);
1371 assertEquals(22, region[1]);
1372 region = regions.next();
1373 assertEquals(26, region[0]);
1374 assertEquals(39, region[1]);
1375 assertFalse(regions.hasNext());
1377 // hidden region at right + hidden region in middle
1378 h = new HiddenColumns();
1379 h.hideColumns(27, 30);
1380 h.hideColumns(11, 14);
1381 regions = h.getVisContigsIterator(0, 31, true);
1383 assertTrue(regions.hasNext());
1384 region = regions.next();
1385 assertEquals(0, region[0]);
1386 assertEquals(10, region[1]);
1387 region = regions.next();
1388 assertEquals(15, region[0]);
1389 assertEquals(26, region[1]);
1390 region = regions.next();
1391 assertEquals(31, region[0]);
1392 assertEquals(38, region[1]);
1393 assertFalse(regions.hasNext());
1395 // hidden region at left and right
1396 h = new HiddenColumns();
1397 h.hideColumns(27, 35);
1398 h.hideColumns(0, 4);
1399 regions = h.getVisContigsIterator(0, 31, true);
1401 assertTrue(regions.hasNext());
1402 region = regions.next();
1403 assertEquals(5, region[0]);
1404 assertEquals(26, region[1]);
1405 region = regions.next();
1406 assertEquals(36, region[0]);
1407 assertEquals(44, region[1]);
1408 assertFalse(regions.hasNext());
1410 // multiple hidden regions
1411 h = new HiddenColumns();
1412 h.hideColumns(1, 1);
1413 h.hideColumns(3, 5);
1414 h.hideColumns(9, 11);
1415 h.hideColumns(22, 26);
1417 regions = h.getVisContigsIterator(0, 31, true);
1419 assertTrue(regions.hasNext());
1420 region = regions.next();
1421 assertEquals(0, region[0]);
1422 assertEquals(0, region[1]);
1423 region = regions.next();
1424 assertEquals(2, region[0]);
1425 assertEquals(2, region[1]);
1426 region = regions.next();
1427 assertEquals(6, region[0]);
1428 assertEquals(8, region[1]);
1429 region = regions.next();
1430 assertEquals(12, region[0]);
1431 assertEquals(21, region[1]);
1432 region = regions.next();
1433 assertEquals(27, region[0]);
1434 assertEquals(42, region[1]);
1435 assertFalse(regions.hasNext());
1439 * the VisibleColsIterator is tested elsewhere, this just tests that
1440 * it can be retrieved from HiddenColumns
1442 @Test(groups = "Functional")
1443 public void testGetVisibleColsIterator()
1445 HiddenColumns h = new HiddenColumns();
1446 Iterator<Integer> it = h.getVisibleColsIterator(0, 10);
1448 assertTrue(it instanceof VisibleColsIterator);
1451 @Test(groups = "Functional")
1452 public void testHashCode()
1454 HiddenColumns h = new HiddenColumns();
1455 h.hideColumns(0, 25);
1457 int result = h.hashCode();
1458 assertTrue(result > 0);
1460 h.hideColumns(30, 50);
1461 assertTrue(h.hashCode() > 0);
1462 assertTrue(result != h.hashCode());