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;
18
19import java.util.NoSuchElementException;
20import junit.framework.TestCase;
21
22public final class ListIntSetTest extends TestCase {
23    public void test_basic() {
24        ListIntSet set = new ListIntSet();
25
26        assertEquals(0, set.elements());
27
28        set.add(31);
29        set.add(0);
30        set.add(1);
31
32        assertTrue(set.has(0));
33        assertTrue(set.has(1));
34        assertTrue(set.has(31));
35
36        assertEquals(3, set.elements());
37
38        assertFalse(set.has(2));
39        assertFalse(set.has(7));
40        assertFalse(set.has(30));
41    }
42
43    public void test_iterator() {
44        ListIntSet set = new ListIntSet();
45
46        set.add(0);
47        set.add(0);
48        set.add(1);
49        set.add(1);
50        set.add(31);
51        set.add(31);
52
53        IntIterator iter = set.iterator();
54
55        assertTrue(iter.hasNext());
56        assertEquals(iter.next(), 0);
57        assertTrue(iter.hasNext());
58        assertEquals(iter.next(), 1);
59        assertTrue(iter.hasNext());
60        assertEquals(iter.next(), 31);
61
62        assertFalse(iter.hasNext());
63
64        try {
65            iter.next();
66            fail();
67        } catch (NoSuchElementException ex) {
68            // exception excepted
69        }
70    }
71
72    public void test_empty() {
73        ListIntSet set = new ListIntSet();
74
75        IntIterator iter = set.iterator();
76
77        assertFalse(iter.hasNext());
78    }
79
80    public void test_remove() {
81        ListIntSet set = new ListIntSet();
82
83        set.add(0);
84        set.add(1);
85        set.add(31);
86
87        assertTrue(set.has(0));
88        assertTrue(set.has(1));
89        assertTrue(set.has(31));
90
91        assertFalse(set.has(2));
92        assertFalse(set.has(7));
93        assertFalse(set.has(30));
94
95        set.remove(0);
96
97        assertFalse(set.has(0));
98
99        assertTrue(set.has(1));
100        assertTrue(set.has(31));
101    }
102
103    public void test_mergeA() {
104        ListIntSet setA = new ListIntSet();
105        int[] valuesA = {0, 1, 31};
106
107        for (int i = 0; i < valuesA.length; i++) {
108            setA.add(valuesA[i]);
109        }
110
111        ListIntSet setB = new ListIntSet();
112        int[] valuesB = {0, 5, 6, 32, 127, 128};
113
114        for (int i = 0; i < valuesB.length; i++) {
115            setB.add(valuesB[i]);
116        }
117
118        setA.merge(setB);
119
120        for (int i = 0; i < valuesA.length; i++) {
121            assertTrue(setA.has(valuesA[i]));
122        }
123
124        for (int i = 0; i < valuesB.length; i++) {
125            assertTrue(setA.has(valuesB[i]));
126        }
127
128    }
129
130    public void test_mergeB() {
131        ListIntSet setA = new ListIntSet();
132        int[] valuesA = {0, 1, 31, 129, 130};
133
134        for (int i = 0; i < valuesA.length; i++) {
135            setA.add(valuesA[i]);
136        }
137
138        ListIntSet setB = new ListIntSet();
139        int[] valuesB = {0, 5, 6, 32, 127,128};
140
141        for (int i = 0; i < valuesB.length; i++) {
142            setB.add(valuesB[i]);
143        }
144
145        setA.merge(setB);
146
147        for (int i = 0; i < valuesA.length; i++) {
148            assertTrue(setA.has(valuesA[i]));
149        }
150
151        for (int i = 0; i < valuesB.length; i++) {
152            assertTrue(setA.has(valuesB[i]));
153        }
154
155    }
156
157    public void test_mergeWithBitIntSet() {
158        ListIntSet setA = new ListIntSet();
159        int[] valuesA = {0, 1, 31, 129, 130};
160
161        for (int i = 0; i < valuesA.length; i++) {
162            setA.add(valuesA[i]);
163        }
164
165        BitIntSet setB = new BitIntSet(129);
166        int[] valuesB = {0, 5, 6, 32, 127,128};
167
168        for (int i = 0; i < valuesB.length; i++) {
169            setB.add(valuesB[i]);
170        }
171
172        setA.merge(setB);
173
174        for (int i = 0; i < valuesA.length; i++) {
175            assertTrue(setA.has(valuesA[i]));
176        }
177
178        for (int i = 0; i < valuesB.length; i++) {
179            assertTrue(setA.has(valuesB[i]));
180        }
181
182    }
183
184    public void test_toString() {
185        ListIntSet set = new ListIntSet();
186
187        assertEquals(set.toString(), "{}");
188
189        set.add(1);
190
191        assertEquals(set.toString(), "{1}");
192
193        set.add(2);
194
195        assertEquals(set.toString(), "{1, 2}");
196    }
197
198}
199