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