JAL-2446 FeatureStore with NCList - work in progress
[jalview.git] / test / jalview / datamodel / features / NCListTest.java
1 package jalview.datamodel.features;
2
3 import static org.testng.Assert.assertEquals;
4
5 import java.util.ArrayList;
6 import java.util.Collections;
7 import java.util.List;
8
9 import org.testng.annotations.Test;
10
11 public class NCListTest
12 {
13   class Range implements ContiguousI
14   {
15     int start;
16
17     int end;
18
19     @Override
20     public int getBegin()
21     {
22       return start;
23     }
24
25     @Override
26     public int getEnd()
27     {
28       return end;
29     }
30
31     Range(int i, int j)
32     {
33       start = i;
34       end = j;
35     }
36
37     @Override
38     public String toString() {
39       return String.valueOf(start) + "-" + String.valueOf(end);
40     }
41   }
42
43   /**
44    * A basic sanity test of the constructor
45    */
46   @Test(groups = "Functional")
47   public void testConstructor()
48   {
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));
57
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);
61
62     Collections.reverse(ranges);
63     ncl = new NCList<Range>(ranges);
64     assertEquals(ncl.toString(), expected);
65   }
66
67   @Test(groups = "Functional")
68   public void testFindOverlaps()
69   {
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));
75   
76     NCList<Range> ncl = new NCList<Range>(ranges);
77
78     List<Range> overlaps = ncl.findOverlaps(121, 122);
79     assertEquals(overlaps.size(), 0);
80
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);
87
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);
92   }
93
94   @Test(groups = "Functional")
95   public void testAdd_onTheEnd()
96   {
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]");
101
102     ncl.add(new Range(60, 70));
103     assertEquals(ncl.toString(), "[20-50, 60-70]");
104   }
105
106   @Test(groups = "Functional")
107   public void testAdd_inside()
108   {
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]");
113
114     ncl.add(new Range(30, 40));
115     assertEquals(ncl.toString(), "[20-50 [30-40]]");
116   }
117
118   @Test(groups = "Functional")
119   public void testAdd_onTheFront()
120   {
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]");
125
126     ncl.add(new Range(5, 15));
127     assertEquals(ncl.toString(), "[5-15, 20-50]");
128   }
129
130   @Test(groups = "Functional")
131   public void testAdd_enclosing()
132   {
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]");
138
139     ncl.add(new Range(10, 70));
140     assertEquals(ncl.toString(), "[10-70 [20-50, 30-60]");
141   }
142
143   @Test(groups = "Functional")
144   public void testAdd_spanning()
145   {
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]");
151
152     ncl.add(new Range(30, 50));
153     assertEquals(ncl.toString(), "[20-40, 30-50, 60-70]");
154
155     ncl.add(new Range(40, 65));
156     assertEquals(ncl.toString(), "[20-40, 30-50, 40-65, 60-70]");
157   }
158 }