[DMAAP-48] Initial code import
[dmaap/datarouter.git] / datarouter-prov / src / test / java / datarouter / provisioning / testRLEBitSet.java
1 /*******************************************************************************
2  * ============LICENSE_START==================================================
3  * * org.onap.dmaap
4  * * ===========================================================================
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * * ===========================================================================
7  * * Licensed under the Apache License, Version 2.0 (the "License");
8  * * you may not use this file except in compliance with the License.
9  * * You may obtain a copy of the License at
10  * * 
11  *  *      http://www.apache.org/licenses/LICENSE-2.0
12  * * 
13  *  * Unless required by applicable law or agreed to in writing, software
14  * * distributed under the License is distributed on an "AS IS" BASIS,
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * * See the License for the specific language governing permissions and
17  * * limitations under the License.
18  * * ============LICENSE_END====================================================
19  * *
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21  * *
22  ******************************************************************************/
23
24 package datarouter.provisioning;
25
26 import static org.junit.Assert.fail;
27
28 import java.util.Iterator;
29
30 import org.junit.Test;
31
32 import com.att.research.datarouter.provisioning.utils.RLEBitSet;
33
34 public class testRLEBitSet {
35         @Test
36         public void testBasicConstructor() {
37                 RLEBitSet bs = new RLEBitSet();
38                 if (!bs.isEmpty())
39                         fail("bit set not empty");
40         }
41         @Test
42         public void testStringConstructor() {
43                 RLEBitSet bs = new RLEBitSet("1-10");
44                 if (bs.isEmpty())
45                         fail("bit set is empty");
46                 if (!bs.toString().equals("1-10"))
47                         fail("bad value");
48                 bs = new RLEBitSet("69,70,71");
49                 if (bs.isEmpty())
50                         fail("bit set is empty");
51                 if (!bs.toString().equals("69-71"))
52                         fail("bad value");
53                 bs = new RLEBitSet("555 444    443  442");
54                 if (!bs.toString().equals("442-444,555"))
55                         fail("bad value");
56         }
57         @Test
58         public void testLength() {
59                 RLEBitSet bs = new RLEBitSet();
60                 if (bs.length() != 0)
61                         fail("testLength fail "+bs + " " + bs.length());
62                 bs = new RLEBitSet("1-10");
63                 if (bs.length() != 11)
64                         fail("testLength fail "+bs + " " + bs.length());
65                 bs = new RLEBitSet("1-20,100000000-100000005");
66                 if (bs.length() != 100000006)
67                         fail("testLength fail "+bs + " " + bs.length());
68         }
69         @Test
70         public void testGet() {
71                 RLEBitSet bs = new RLEBitSet("1-10");
72                 if (!bs.get(5))
73                         fail("get");
74                 if (bs.get(69))
75                         fail("get");
76         }
77         @Test
78         public void testSetOneBit() {
79                 RLEBitSet bs = new RLEBitSet();
80                 for (int i = 12; i < 200; i++)
81                         bs.set(i);
82                 bs.set(690);
83                 for (int i = 305; i < 309; i++)
84                         bs.set(i);
85                 bs.set(304);
86                 if (!bs.toString().equals("12-199,304-308,690"))
87                         fail("testSetOneBit fail "+bs);
88         }
89         @Test
90         public void testSetString() {
91                 RLEBitSet bs = new RLEBitSet();
92                 bs.set("1-100");
93                 if (!bs.toString().equals("1-100"))
94                         fail("testSetString fail "+bs);
95         }
96         @Test
97         public void testSetRange() {
98                 RLEBitSet bs = new RLEBitSet();
99                 bs.set(50,60);
100                 if (!bs.toString().equals("50-59"))
101                         fail("testSetRange fail "+bs);
102         }
103         @Test
104         public void testClearOneBit() {
105                 RLEBitSet bs = new RLEBitSet("1-10");
106                 bs.clear(5);
107                 if (!bs.toString().equals("1-4,6-10"))
108                         fail("testClearOneBit fail");
109                 bs = new RLEBitSet("1-10");
110                 bs.clear(11);
111                 if (!bs.toString().equals("1-10"))
112                         fail("testClearOneBit fail "+bs);
113         }
114         @Test
115         public void testClearRangeLeft() {
116                 RLEBitSet bs = new RLEBitSet("100-200");
117                 bs.clear(40,50);
118                 if (!bs.toString().equals("100-200"))
119                         fail("testClearRangeLeft fail "+bs);
120         }
121         @Test
122         public void testClearRangeRight() {
123                 RLEBitSet bs = new RLEBitSet("100-200");
124                 bs.clear(400,500);
125                 if (!bs.toString().equals("100-200"))
126                         fail("testClearRangeRight fail "+bs);
127         }
128         @Test
129         public void testClearRangeMiddle() {
130                 RLEBitSet bs = new RLEBitSet("100-200");
131                 bs.clear(120,130);
132                 if (!bs.toString().equals("100-119,130-200"))
133                         fail("testClearRangeRight fail "+bs);
134         }
135         @Test
136         public void testClearRangeIntersect() {
137                 RLEBitSet bs = new RLEBitSet("100-200");
138                 bs.clear(100,200);
139                 if (!bs.toString().equals("200"))
140                         fail("testClearRangeIntersect fail "+bs);
141         }
142         @Test
143         public void testClearOverlapLeft() {
144                 RLEBitSet bs = new RLEBitSet("100-200");
145                 bs.clear(50,150);
146                 if (!bs.toString().equals("150-200"))
147                         fail("testClearOverlapLeft fail "+bs);
148         }
149         @Test
150         public void testClearOverlapRight() {
151                 RLEBitSet bs = new RLEBitSet("100-200");
152                 bs.clear(150,250);
153                 if (!bs.toString().equals("100-149"))
154                         fail("testClearOverlapRight fail "+bs);
155         }
156         @Test
157         public void testClearOverlapAll() {
158                 RLEBitSet bs = new RLEBitSet("100-200");
159                 bs.clear(50,250);
160                 if (!bs.toString().equals(""))
161                         fail("testClearOverlapAll fail "+bs);
162         }
163         @Test
164         public void testAnd() {
165                 RLEBitSet bs = new RLEBitSet("100-200");
166                 RLEBitSet b2 = new RLEBitSet("150-400");
167                 bs.and(b2);
168                 if (!bs.toString().equals("150-200"))
169                         fail("testAnd fail "+bs);
170                 bs = new RLEBitSet("100-200");
171                 b2 = new RLEBitSet("1500-4000");
172                 bs.and(b2);
173                 if (!bs.isEmpty())
174                         fail("testAnd fail "+bs);
175         }
176         @Test
177         public void testAndNot() {
178                 RLEBitSet bs = new RLEBitSet("100-200");
179                 RLEBitSet b2 = new RLEBitSet("150-159");
180                 bs.andNot(b2);
181                 if (!bs.toString().equals("100-149,160-200"))
182                         fail("testAndNot fail "+bs);
183         }
184         @Test
185         public void testIsEmpty() {
186                 RLEBitSet bs = new RLEBitSet("");
187                 if (!bs.isEmpty())
188                         fail("testIsEmpty fail "+bs);
189                 bs.set(1);
190                 if (bs.isEmpty())
191                         fail("testIsEmpty fail "+bs);
192         }
193         @Test
194         public void testCardinality() {
195                 RLEBitSet bs = new RLEBitSet("1-120,10000000-10000005");
196                 if (bs.cardinality() != 126)
197                         fail("testCardinality fail 1");
198         }
199         @Test
200         public void testIterator() {
201                 RLEBitSet bs = new RLEBitSet("1,5,10-12");
202                 Iterator<Long[]> i = bs.getRangeIterator();
203                 if (!i.hasNext())
204                         fail("iterator fail 1");
205                 Long[] ll = i.next();
206                 if (ll == null || ll[0] != 1 || ll[1] != 1)
207                         fail("iterator fail 2");
208
209                 if (!i.hasNext())
210                         fail("iterator fail 3");
211                 ll = i.next();
212                 if (ll == null || ll[0] != 5 || ll[1] != 5)
213                         fail("iterator fail 4");
214
215                 if (!i.hasNext())
216                         fail("iterator fail 5");
217                 ll = i.next();
218                 if (ll == null || ll[0] != 10 || ll[1] != 12)
219                         fail("iterator fail 6");
220
221                 if (i.hasNext())
222                         fail("iterator fail 7");
223         }
224         @Test
225         public void testClone() {
226                 RLEBitSet bs1 = new RLEBitSet("1,5,10-12");
227                 RLEBitSet bs2 = (RLEBitSet) bs1.clone();
228                 if (!bs1.toString().equals(bs2.toString()))
229                         fail("clone");
230         }
231 }