ab6e9fdd1253da1dcfcb656fdf01dc9db969a0fe
[yangtools.git] / third-party / triemap / src / test / java / org / opendaylight / yangtools / triemap / TestMapIterator.java
1 /*
2  * (C) Copyright 2016 Pantheon Technologies, s.r.o. and others.
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 package org.opendaylight.yangtools.triemap;
17
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertNull;
21 import static org.junit.Assert.assertSame;
22 import static org.junit.Assert.assertTrue;
23
24 import java.util.HashSet;
25 import java.util.Iterator;
26 import java.util.Map;
27 import java.util.Map.Entry;
28 import java.util.NoSuchElementException;
29 import java.util.Random;
30 import java.util.Set;
31 import org.junit.Test;
32
33 public class TestMapIterator {
34     @Test
35     public void testMapIterator () {
36         final Random random = new Random();
37
38         for (int i = 0; i < 60 * 1000; i+= 400 + random.nextInt(400)) {
39             final Map<Integer, Integer> bt = TrieMap.create();
40             for (int j = 0; j < i; j++) {
41                 assertNull(bt.put(Integer.valueOf(j), Integer.valueOf(j)));
42             }
43             int count = 0;
44             final Set<Integer> set = new HashSet<>();
45             for (final Entry<Integer, Integer> e : bt.entrySet()) {
46                 set.add(e.getKey());
47                 count++;
48             }
49             for (final Integer j : set) {
50                 assertTrue(bt.containsKey(j));
51             }
52             for (final Integer j : bt.keySet()) {
53                 assertTrue(set.contains(j));
54             }
55
56             assertEquals(i, count);
57             assertEquals(i, bt.size());
58
59             for (Entry<Integer, Integer> e : bt.entrySet()) {
60                 assertSame(e.getValue(), bt.get(e.getKey()));
61                 e.setValue(e.getValue() + 1);
62                 assertEquals((Object)e.getValue(), e.getKey () + 1);
63                 assertEquals(e.getValue(), bt.get(e.getKey()));
64                 e.setValue(e.getValue() - 1);
65             }
66
67             final Iterator<Integer> it = bt.keySet().iterator();
68             while(it.hasNext()) {
69                 final Integer k = it.next ();
70                 assertTrue(bt.containsKey(k));
71                 it.remove();
72                 assertFalse(bt.containsKey(k));
73             }
74
75             assertEquals(0, bt.size ());
76             assertTrue(bt.isEmpty ());
77         }
78     }
79
80     private static void failAdvance(final Iterator<?> it) {
81         assertFalse(it.hasNext());
82         it.next();
83     }
84
85     @Test(expected = NoSuchElementException.class)
86     public void testEmptyIterator() {
87         failAdvance(TrieMap.create().iterator());
88     }
89
90     @Test(expected = NoSuchElementException.class)
91     public void testEmptyReadOnlyIterator() {
92         failAdvance(TrieMap.create().immutableIterator());
93     }
94
95     @Test(expected = NoSuchElementException.class)
96     public void testEmptyReadOnlySnapshotIterator() {
97         failAdvance( TrieMap.create().immutableSnapshot().iterator());
98     }
99 }