31 package com.google.protobuf;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.HashMap;
36 import java.util.Iterator;
37 import java.util.List;
40 import java.util.TreeSet;
41 import junit.framework.TestCase;
68 V oldValue = this.
value;
73 private static boolean eq(Object
o1, Object o2) {
74 return o1 ==
null ? o2 == null :
o1.equals(o2);
79 if (!(o instanceof
Map.Entry)) {
82 Map.Entry e = (
Map.Entry) o;
88 return ((
key ==
null) ? 0 :
key.hashCode()) ^ ((
value ==
null) ? 0 :
value.hashCode());
102 SmallSortedMap<Integer, Integer> map1 = SmallSortedMap.newInstanceForTest(3);
103 SmallSortedMap<Integer, Integer> map2 = SmallSortedMap.newInstanceForTest(4);
104 SmallSortedMap<Integer, Integer> map3 = SmallSortedMap.newInstanceForTest(3);
105 SmallSortedMap<Integer, Integer> map4 = SmallSortedMap.newInstanceForTest(4);
108 for (
int i = 0;
i < numElements;
i++) {
109 assertNull(map1.put(
i,
i + 1));
110 assertNull(map2.put(
i,
i + 1));
113 for (
int i = numElements - 1;
i >= 0;
i--) {
114 assertNull(map3.put(
i,
i + 1));
115 assertNull(map4.put(
i,
i + 1));
118 assertEquals(Math.min(3, numElements), map1.getNumArrayEntries());
119 assertEquals(Math.min(4, numElements), map2.getNumArrayEntries());
120 assertEquals(Math.min(3, numElements), map3.getNumArrayEntries());
121 assertEquals(Math.min(4, numElements), map4.getNumArrayEntries());
123 List<SmallSortedMap<Integer, Integer>> allMaps =
124 new ArrayList<SmallSortedMap<Integer, Integer>>();
130 for (SmallSortedMap<Integer, Integer>
map : allMaps) {
131 assertEquals(numElements,
map.size());
132 for (
int i = 0;
i < numElements;
i++) {
133 assertEquals(Integer.valueOf(
i + 1),
map.get(
i));
137 assertEquals(map1, map2);
138 assertEquals(map2, map3);
139 assertEquals(map3, map4);
143 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
144 for (
int i = 0;
i < 6;
i++) {
145 assertNull(
map.put(
i,
i + 1));
146 assertNull(
map.remove(
i + 1));
148 for (
int i = 0;
i < 6;
i++) {
149 assertEquals(Integer.valueOf(
i + 1),
map.put(
i,
i + 2));
154 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
155 for (
int i = 0;
i < 6;
i++) {
156 assertNull(
map.put(
i,
i + 1));
157 assertNull(
map.remove(
i + 1));
160 assertEquals(3,
map.getNumArrayEntries());
161 assertEquals(3,
map.getNumOverflowEntries());
162 assertEquals(6,
map.size());
165 assertEquals(Integer.valueOf(2),
map.remove(1));
166 assertEquals(3,
map.getNumArrayEntries());
167 assertEquals(2,
map.getNumOverflowEntries());
168 assertEquals(5,
map.size());
171 assertEquals(Integer.valueOf(5),
map.remove(4));
172 assertEquals(3,
map.getNumArrayEntries());
173 assertEquals(1,
map.getNumOverflowEntries());
174 assertEquals(4,
map.size());
177 assertEquals(Integer.valueOf(4),
map.remove(3));
178 assertEquals(3,
map.getNumArrayEntries());
179 assertEquals(0,
map.getNumOverflowEntries());
180 assertEquals(3,
map.size());
183 assertNull(
map.remove(3));
184 assertEquals(3,
map.getNumArrayEntries());
185 assertEquals(0,
map.getNumOverflowEntries());
186 assertEquals(3,
map.size());
188 assertEquals(Integer.valueOf(1),
map.remove(0));
189 assertEquals(2,
map.getNumArrayEntries());
190 assertEquals(0,
map.getNumOverflowEntries());
191 assertEquals(2,
map.size());
195 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
196 for (
int i = 0;
i < 6;
i++) {
197 assertNull(
map.put(
i,
i + 1));
200 assertEquals(0,
map.getNumArrayEntries());
201 assertEquals(0,
map.getNumOverflowEntries());
202 assertEquals(0,
map.size());
206 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
207 for (
int i = 0;
i < 6;
i++) {
208 assertNull(
map.put(
i,
i + 1));
210 assertEquals(3,
map.getNumArrayEntries());
211 for (
int i = 0;
i < 3;
i++) {
212 Map.Entry<Integer, Integer> entry =
map.getArrayEntryAt(
i);
213 assertEquals(Integer.valueOf(
i), entry.getKey());
214 assertEquals(Integer.valueOf(
i + 1), entry.getValue());
216 Iterator<
Map.Entry<Integer, Integer>>
it =
map.getOverflowEntries().iterator();
217 for (
int i = 3;
i < 6;
i++) {
218 assertTrue(
it.hasNext());
219 Map.Entry<Integer, Integer> entry =
it.next();
220 assertEquals(Integer.valueOf(
i), entry.getKey());
221 assertEquals(Integer.valueOf(
i + 1), entry.getValue());
223 assertFalse(
it.hasNext());
227 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
228 for (
int i = 0;
i < 6;
i++) {
229 assertNull(
map.put(
i,
i + 1));
231 Set<
Map.Entry<Integer, Integer>> entrySet =
map.entrySet();
232 for (
int i = 0;
i < 6;
i++) {
239 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
240 Set<
Map.Entry<Integer, Integer>> entrySet =
map.entrySet();
241 for (
int i = 0;
i < 6;
i++) {
243 assertTrue(entrySet.add(entry));
244 assertFalse(entrySet.add(entry));
246 for (
int i = 0;
i < 6;
i++) {
247 assertEquals(Integer.valueOf(
i + 1),
map.get(
i));
249 assertEquals(3,
map.getNumArrayEntries());
250 assertEquals(3,
map.getNumOverflowEntries());
251 assertEquals(6,
map.size());
255 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
256 Set<
Map.Entry<Integer, Integer>> entrySet =
map.entrySet();
257 for (
int i = 0;
i < 6;
i++) {
258 assertNull(
map.put(
i,
i + 1));
260 for (
int i = 0;
i < 6;
i++) {
262 assertTrue(entrySet.remove(entry));
263 assertFalse(entrySet.remove(entry));
265 assertTrue(
map.isEmpty());
266 assertEquals(0,
map.getNumArrayEntries());
267 assertEquals(0,
map.getNumOverflowEntries());
268 assertEquals(0,
map.size());
272 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
273 for (
int i = 0;
i < 6;
i++) {
274 assertNull(
map.put(
i,
i + 1));
277 assertTrue(
map.isEmpty());
278 assertEquals(0,
map.getNumArrayEntries());
279 assertEquals(0,
map.getNumOverflowEntries());
280 assertEquals(0,
map.size());
284 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
285 for (
int i = 0;
i < 6;
i++) {
286 assertNull(
map.put(
i,
i + 1));
288 Iterator<
Map.Entry<Integer, Integer>>
it =
map.entrySet().iterator();
289 for (
int i = 0;
i < 6;
i++) {
290 assertTrue(
it.hasNext());
291 Map.Entry<Integer, Integer> entry =
it.next();
292 assertEquals(Integer.valueOf(
i), entry.getKey());
293 assertEquals(Integer.valueOf(
i + 1), entry.getValue());
295 assertFalse(
it.hasNext());
299 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
300 for (
int i = 0;
i < 6;
i++) {
301 assertNull(
map.put(
i,
i + 1));
303 Iterator<
Map.Entry<Integer, Integer>>
it =
map.entrySet().iterator();
304 for (
int i = 0;
i < 6;
i++) {
305 assertTrue(
map.containsKey(
i));
308 assertFalse(
map.containsKey(
i));
309 assertEquals(6 -
i - 1,
map.size());
314 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
315 for (
int i = 0;
i < 6;
i++) {
316 assertNull(
map.put(
i,
i + 1));
318 Iterator<
Map.Entry<Integer, Integer>>
it =
map.entrySet().iterator();
319 for (
int i = 0;
i < 6;
i++) {
320 Map.Entry<Integer, Integer> entry =
it.next();
321 entry.setValue(
i + 23);
323 for (
int i = 0;
i < 6;
i++) {
324 assertEquals(Integer.valueOf(
i + 23),
map.get(
i));
329 SmallSortedMap<Integer, Integer>
map = SmallSortedMap.newInstanceForTest(3);
330 for (
int i = 0;
i < 6;
i++) {
331 assertNull(
map.put(
i,
i + 1));
334 assertEquals(Integer.valueOf(1),
map.get(0));
335 assertEquals(6,
map.size());
339 fail(
"Expected UnsupportedOperationException");
340 }
catch (UnsupportedOperationException expected) {
343 Map<Integer, Integer> other =
new HashMap<Integer, Integer>();
347 fail(
"Expected UnsupportedOperationException");
348 }
catch (UnsupportedOperationException expected) {
353 fail(
"Expected UnsupportedOperationException");
354 }
catch (UnsupportedOperationException expected) {
359 fail(
"Expected UnsupportedOperationException");
360 }
catch (UnsupportedOperationException expected) {
363 Set<
Map.Entry<Integer, Integer>> entrySet =
map.entrySet();
366 fail(
"Expected UnsupportedOperationException");
367 }
catch (UnsupportedOperationException expected) {
370 Iterator<
Map.Entry<Integer, Integer>>
it = entrySet.iterator();
371 while (
it.hasNext()) {
372 Map.Entry<Integer, Integer> entry =
it.next();
375 fail(
"Expected UnsupportedOperationException");
376 }
catch (UnsupportedOperationException expected) {
380 fail(
"Expected UnsupportedOperationException");
381 }
catch (UnsupportedOperationException expected) {
385 Set<Integer> keySet =
map.keySet();
388 fail(
"Expected UnsupportedOperationException");
389 }
catch (UnsupportedOperationException expected) {
392 Iterator<Integer> keys = keySet.iterator();
393 while (keys.hasNext()) {
394 Integer
key = keys.next();
397 fail(
"Expected UnsupportedOperationException");
398 }
catch (UnsupportedOperationException expected) {
402 fail(
"Expected UnsupportedOperationException");
403 }
catch (UnsupportedOperationException expected) {
409 return new TreeSet<Integer>(Arrays.<Integer>asList(keys));