1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.apache.log4j.helpers;
26
27 import org.apache.log4j.spi.LoggingEvent;
28 import org.apache.log4j.Logger;
29 import org.apache.log4j.Level;
30
31
32 import junit.framework.TestCase;
33 import junit.framework.TestSuite;
34 import junit.framework.Test;
35
36
37
38
39
40
41
42
43 public class BoundedFIFOTestCase extends TestCase {
44 static Logger cat = Logger.getLogger("x");
45
46 static int MAX = 1000;
47
48 static LoggingEvent[] e = new LoggingEvent[MAX];
49
50 {
51 for (int i = 0; i < MAX; i++) {
52 e[i] = new LoggingEvent("", cat, Level.DEBUG, "e"+i, null);
53 }
54 }
55
56
57 public BoundedFIFOTestCase(String name) {
58 super(name);
59 }
60
61
62 public
63 void setUp() {
64
65 }
66
67
68
69
70
71 public
72 void test1() {
73 for(int size = 1; size <= 128; size *=2) {
74 BoundedFIFO bf = new BoundedFIFO(size);
75
76 assertEquals(bf.getMaxSize(), size);
77 assertNull(bf.get());
78
79 int i;
80 int j;
81 int k;
82
83 for(i = 1; i < 2*size; i++) {
84 for(j = 0; j < i; j++) {
85
86 bf.put(e[j]); assertEquals(bf.length(), j < size ? j+1 : size);
87 }
88 int max = size < j ? size : j;
89 j--;
90 for(k = 0; k <= j; k++) {
91
92 assertEquals(bf.length(), max - k > 0 ? max - k : 0);
93 Object r = bf.get();
94
95 if(k >= size)
96 assertNull(r);
97 else
98 assertEquals(r, e[k]);
99 }
100 }
101
102 }
103 }
104
105
106
107
108
109 public
110 void test2() {
111 int size = 3;
112 BoundedFIFO bf = new BoundedFIFO(size);
113
114 bf.put(e[0]);
115 assertEquals(bf.get(), e[0]);
116 assertNull(bf.get());
117
118 bf.put(e[1]); assertEquals(bf.length(), 1);
119 bf.put(e[2]); assertEquals(bf.length(), 2);
120 bf.put(e[3]); assertEquals(bf.length(), 3);
121 assertEquals(bf.get(), e[1]); assertEquals(bf.length(), 2);
122 assertEquals(bf.get(), e[2]); assertEquals(bf.length(), 1);
123 assertEquals(bf.get(), e[3]); assertEquals(bf.length(), 0);
124 assertNull(bf.get()); assertEquals(bf.length(), 0);
125 }
126
127 int min(int a, int b) {
128 return a < b ? a : b;
129 }
130
131
132
133
134
135 public
136 void testResize1() {
137 int size = 10;
138
139 for(int n = 1; n < size*2; n++) {
140 for(int i = 0; i < size*2; i++) {
141
142 BoundedFIFO bf = new BoundedFIFO(size);
143 for(int f = 0; f < i; f++) {
144 bf.put(e[f]);
145 }
146
147 bf.resize(n);
148 int expectedSize = min(n, min(i, size));
149 assertEquals(bf.length(), expectedSize);
150 for(int c = 0; c < expectedSize; c++) {
151 assertEquals(bf.get(), e[c]);
152 }
153 }
154 }
155 }
156
157
158
159
160
161
162 public
163 void testResize2() {
164 int size = 10;
165
166 for(int n = 1; n < size*2; n++) {
167 for(int i = 0; i < size*2; i++) {
168 for(int d = 0; d < min(i,size); d++) {
169
170 BoundedFIFO bf = new BoundedFIFO(size);
171 for(int p = 0; p < i; p++) {
172 bf.put(e[p]);
173 }
174
175 for(int g = 0; g < d; g++) {
176 bf.get();
177 }
178
179
180 int x = bf.length();
181
182 bf.resize(n);
183
184 int expectedSize = min(n, x);
185 assertEquals(bf.length(), expectedSize);
186
187 for(int c = 0; c < expectedSize; c++) {
188 assertEquals(bf.get(), e[c+d]);
189 }
190 assertNull(bf.get());
191 }
192 }
193 }
194 }
195
196
197
198
199
200 public
201 void testResize3() {
202 int size = 10;
203
204 for(int n = 1; n < size*2; n++) {
205 for(int i = 0; i < size; i++) {
206 for(int d = 0; d < i; d++) {
207 for(int r = 0; r < d; r++) {
208
209 BoundedFIFO bf = new BoundedFIFO(size);
210 for(int p0 = 0; p0 < i; p0++)
211 bf.put(e[p0]);
212
213 for(int g = 0; g < d; g++)
214 bf.get();
215 for(int p1 = 0; p1 < r; p1++)
216 bf.put(e[i+p1]);
217
218
219
220 int x = bf.length();
221
222 bf.resize(n);
223
224
225 int expectedSize = min(n, x);
226 assertEquals(bf.length(), expectedSize);
227
228 for(int c = 0; c < expectedSize; c++) {
229 assertEquals(bf.get(), e[c+d]);
230 }
231
232 }
233 }
234 }
235 }
236 }
237
238
239 public
240 static
241 Test suite() {
242 TestSuite suite = new TestSuite();
243 suite.addTest(new BoundedFIFOTestCase("test1"));
244 suite.addTest(new BoundedFIFOTestCase("test2"));
245 suite.addTest(new BoundedFIFOTestCase("testResize1"));
246 suite.addTest(new BoundedFIFOTestCase("testResize2"));
247 suite.addTest(new BoundedFIFOTestCase("testResize3"));
248 return suite;
249 }
250 }