1 package jalview.datamodel.features;
3 import static org.testng.Assert.assertEquals;
5 import java.util.ArrayList;
6 import java.util.Collections;
9 import org.testng.annotations.Test;
11 public class NCListTest
13 class Range implements ContiguousI
38 public String toString() {
39 return String.valueOf(start) + "-" + String.valueOf(end);
44 * A basic sanity test of the constructor
46 @Test(groups = "Functional")
47 public void testConstructor()
49 List<Range> ranges = new ArrayList<Range>();
50 ranges.add(new Range(20, 20));
51 ranges.add(new Range(10, 20));
52 ranges.add(new Range(15, 30));
53 ranges.add(new Range(10, 30));
54 ranges.add(new Range(11, 19));
55 ranges.add(new Range(10, 20));
56 ranges.add(new Range(1, 100));
58 NCList<Range> ncl = new NCList<Range>(ranges);
59 String expected = "[1-100 [10-30 [10-20 [10-20 [11-19]]]], 15-30 [20-20]]";
60 assertEquals(ncl.toString(), expected);
62 Collections.reverse(ranges);
63 ncl = new NCList<Range>(ranges);
64 assertEquals(ncl.toString(), expected);
67 @Test(groups = "Functional")
68 public void testFindOverlaps()
70 List<Range> ranges = new ArrayList<Range>();
71 ranges.add(new Range(20, 50));
72 ranges.add(new Range(30, 70));
73 ranges.add(new Range(1, 100));
74 ranges.add(new Range(70, 120));
76 NCList<Range> ncl = new NCList<Range>(ranges);
78 List<Range> overlaps = ncl.findOverlaps(121, 122);
79 assertEquals(overlaps.size(), 0);
81 overlaps = ncl.findOverlaps(21, 22);
82 assertEquals(overlaps.size(), 2);
83 assertEquals(((ContiguousI) overlaps.get(0)).getBegin(), 1);
84 assertEquals(((ContiguousI) overlaps.get(0)).getEnd(), 100);
85 assertEquals(((ContiguousI) overlaps.get(1)).getBegin(), 20);
86 assertEquals(((ContiguousI) overlaps.get(1)).getEnd(), 50);
88 overlaps = ncl.findOverlaps(110, 110);
89 assertEquals(overlaps.size(), 1);
90 assertEquals(((ContiguousI) overlaps.get(0)).getBegin(), 70);
91 assertEquals(((ContiguousI) overlaps.get(0)).getEnd(), 120);
94 @Test(groups = "Functional")
95 public void testAdd_onTheEnd()
97 List<Range> ranges = new ArrayList<Range>();
98 ranges.add(new Range(20, 50));
99 NCList<Range> ncl = new NCList<Range>(ranges);
100 assertEquals(ncl.toString(), "[20-50]");
102 ncl.add(new Range(60, 70));
103 assertEquals(ncl.toString(), "[20-50, 60-70]");
106 @Test(groups = "Functional")
107 public void testAdd_inside()
109 List<Range> ranges = new ArrayList<Range>();
110 ranges.add(new Range(20, 50));
111 NCList<Range> ncl = new NCList<Range>(ranges);
112 assertEquals(ncl.toString(), "[20-50]");
114 ncl.add(new Range(30, 40));
115 assertEquals(ncl.toString(), "[20-50 [30-40]]");
118 @Test(groups = "Functional")
119 public void testAdd_onTheFront()
121 List<Range> ranges = new ArrayList<Range>();
122 ranges.add(new Range(20, 50));
123 NCList<Range> ncl = new NCList<Range>(ranges);
124 assertEquals(ncl.toString(), "[20-50]");
126 ncl.add(new Range(5, 15));
127 assertEquals(ncl.toString(), "[5-15, 20-50]");
130 @Test(groups = "Functional")
131 public void testAdd_enclosing()
133 List<Range> ranges = new ArrayList<Range>();
134 ranges.add(new Range(20, 50));
135 ranges.add(new Range(30, 60));
136 NCList<Range> ncl = new NCList<Range>(ranges);
137 assertEquals(ncl.toString(), "[20-50, 30-60]");
139 ncl.add(new Range(10, 70));
140 assertEquals(ncl.toString(), "[10-70 [20-50, 30-60]");
143 @Test(groups = "Functional")
144 public void testAdd_spanning()
146 List<Range> ranges = new ArrayList<Range>();
147 ranges.add(new Range(20, 40));
148 ranges.add(new Range(60, 70));
149 NCList<Range> ncl = new NCList<Range>(ranges);
150 assertEquals(ncl.toString(), "[20-40, 60-70]");
152 ncl.add(new Range(30, 50));
153 assertEquals(ncl.toString(), "[20-40, 30-50, 60-70]");
155 ncl.add(new Range(40, 65));
156 assertEquals(ncl.toString(), "[20-40, 30-50, 40-65, 60-70]");