1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.dx.util._tests;
18
19import com.android.dx.util.BitIntSet;
20import com.android.dx.util.ListIntSet;
21import com.android.dx.util.IntIterator;
22
23import junit.framework.TestCase;
24
25import java.util.NoSuchElementException;
26
27public class _ListIntSet extends TestCase {
28    public void test_basic() {
29        ListIntSet set = new ListIntSet();
30
31        assertEquals(0, set.elements());
32
33        set.add(31);
34        set.add(0);
35        set.add(1);
36
37        assertTrue(set.has(0));
38        assertTrue(set.has(1));
39        assertTrue(set.has(31));
40
41        assertEquals(3, set.elements());
42
43        assertFalse(set.has(2));
44        assertFalse(set.has(7));
45        assertFalse(set.has(30));
46    }
47
48    public void test_iterator() {
49        ListIntSet set = new ListIntSet();
50
51        set.add(0);
52        set.add(0);
53        set.add(1);
54        set.add(1);
55        set.add(31);
56        set.add(31);
57
58        IntIterator iter = set.iterator();
59
60        assertTrue(iter.hasNext());
61        assertEquals(iter.next(), 0);
62        assertTrue(iter.hasNext());
63        assertEquals(iter.next(), 1);
64        assertTrue(iter.hasNext());
65        assertEquals(iter.next(), 31);
66
67        assertFalse(iter.hasNext());
68
69        try {
70            iter.next();
71            fail();
72        } catch (NoSuchElementException ex) {
73            // exception excepted
74        }
75    }
76
77    public void test_empty() {
78        ListIntSet set = new ListIntSet();
79
80        IntIterator iter = set.iterator();
81
82        assertFalse(iter.hasNext());
83    }
84
85    public void test_remove() {
86        ListIntSet set = new ListIntSet();
87
88        set.add(0);
89        set.add(1);
90        set.add(31);
91
92        assertTrue(set.has(0));
93        assertTrue(set.has(1));
94        assertTrue(set.has(31));
95
96        assertFalse(set.has(2));
97        assertFalse(set.has(7));
98        assertFalse(set.has(30));
99
100        set.remove(0);
101
102        assertFalse(set.has(0));
103
104        assertTrue(set.has(1));
105        assertTrue(set.has(31));
106    }
107
108    public void test_mergeA() {
109        ListIntSet setA = new ListIntSet();
110        int[] valuesA = {0, 1, 31};
111
112        for (int i = 0; i < valuesA.length; i++) {
113            setA.add(valuesA[i]);
114        }
115
116        ListIntSet setB = new ListIntSet();
117        int[] valuesB = {0, 5, 6, 32, 127, 128};
118
119        for (int i = 0; i < valuesB.length; i++) {
120            setB.add(valuesB[i]);
121        }
122
123        setA.merge(setB);
124
125        for (int i = 0; i < valuesA.length; i++) {
126            assertTrue(setA.has(valuesA[i]));
127        }
128
129        for (int i = 0; i < valuesB.length; i++) {
130            assertTrue(setA.has(valuesB[i]));
131        }
132
133    }
134
135    public void test_mergeB() {
136        ListIntSet setA = new ListIntSet();
137        int[] valuesA = {0, 1, 31, 129, 130};
138
139        for (int i = 0; i < valuesA.length; i++) {
140            setA.add(valuesA[i]);
141        }
142
143        ListIntSet setB = new ListIntSet();
144        int[] valuesB = {0, 5, 6, 32, 127,128};
145
146        for (int i = 0; i < valuesB.length; i++) {
147            setB.add(valuesB[i]);
148        }
149
150        setA.merge(setB);
151
152        for (int i = 0; i < valuesA.length; i++) {
153            assertTrue(setA.has(valuesA[i]));
154        }
155
156        for (int i = 0; i < valuesB.length; i++) {
157            assertTrue(setA.has(valuesB[i]));
158        }
159
160    }
161
162    public void test_mergeWithBitIntSet() {
163        ListIntSet setA = new ListIntSet();
164        int[] valuesA = {0, 1, 31, 129, 130};
165
166        for (int i = 0; i < valuesA.length; i++) {
167            setA.add(valuesA[i]);
168        }
169
170        BitIntSet setB = new BitIntSet(129);
171        int[] valuesB = {0, 5, 6, 32, 127,128};
172
173        for (int i = 0; i < valuesB.length; i++) {
174            setB.add(valuesB[i]);
175        }
176
177        setA.merge(setB);
178
179        for (int i = 0; i < valuesA.length; i++) {
180            assertTrue(setA.has(valuesA[i]));
181        }
182
183        for (int i = 0; i < valuesB.length; i++) {
184            assertTrue(setA.has(valuesB[i]));
185        }
186
187    }
188
189    public void test_toString() {
190        ListIntSet set = new ListIntSet();
191
192        assertEquals(set.toString(), "{}");
193
194        set.add(1);
195
196        assertEquals(set.toString(), "{1}");
197
198        set.add(2);
199
200        assertEquals(set.toString(), "{1, 2}");
201    }
202
203}
204