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