1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.util;
21
22 import static org.junit.Assert.*;
23
24 import java.util.Arrays;
25 import java.util.Iterator;
26
27 import com.google.common.collect.Lists;
28 import org.apache.hadoop.hbase.SmallTests;
29 import org.junit.Test;
30 import org.junit.experimental.categories.Category;
31
32 @Category(SmallTests.class)
33 public class TestSortedCopyOnWriteSet {
34
35 @Test
36 public void testSorting() throws Exception {
37 SortedCopyOnWriteSet<String> set = new SortedCopyOnWriteSet<String>();
38 set.add("c");
39 set.add("d");
40 set.add("a");
41 set.add("b");
42
43 String[] expected = new String[]{"a", "b", "c", "d"};
44 String[] stored = set.toArray(new String[4]);
45 assertArrayEquals(expected, stored);
46
47 set.add("c");
48 assertEquals(4, set.size());
49 stored = set.toArray(new String[4]);
50 assertArrayEquals(expected, stored);
51 }
52
53 @Test
54 public void testIteratorIsolation() throws Exception {
55 SortedCopyOnWriteSet<String> set = new SortedCopyOnWriteSet<String>(
56 Lists.newArrayList("a", "b", "c", "d", "e"));
57
58
59 Iterator<String> iter = set.iterator();
60 set.remove("c");
61 boolean found = false;
62 while (iter.hasNext() && !found) {
63 found = "c".equals(iter.next());
64 }
65 assertTrue(found);
66
67 iter = set.iterator();
68 found = false;
69 while (iter.hasNext() && !found) {
70 found = "c".equals(iter.next());
71 }
72 assertFalse(found);
73
74
75 iter = set.iterator();
76 set.add("f");
77 found = false;
78 while (iter.hasNext() && !found) {
79 String next = iter.next();
80 found = "f".equals(next);
81 }
82 assertFalse(found);
83
84
85 iter = set.iterator();
86 set.addAll(Lists.newArrayList("g", "h", "i"));
87 found = false;
88 while (iter.hasNext() && !found) {
89 String next = iter.next();
90 found = "g".equals(next) || "h".equals(next) || "i".equals(next);
91 }
92 assertFalse(found);
93
94
95 iter = set.iterator();
96 set.clear();
97 assertEquals(0, set.size());
98 int size = 0;
99 while (iter.hasNext()) {
100 iter.next();
101 size++;
102 }
103 assertTrue(size > 0);
104 }
105
106 }
107