8 |
|
*/ |
9 |
|
|
10 |
|
import junit.framework.*; |
11 |
+ |
import java.util.ArrayList; |
12 |
|
import java.util.Arrays; |
13 |
|
import java.util.Collection; |
14 |
|
import java.util.Queue; |
40 |
|
//---------------------------------------------------------------- |
41 |
|
// Configuration methods |
42 |
|
//---------------------------------------------------------------- |
43 |
< |
|
43 |
> |
|
44 |
|
/** Returns an empty instance of the implementation class. */ |
45 |
|
protected abstract BlockingQueue emptyCollection(); |
46 |
|
|
55 |
|
//---------------------------------------------------------------- |
56 |
|
// Tests |
57 |
|
//---------------------------------------------------------------- |
58 |
< |
|
58 |
> |
|
59 |
|
/** |
60 |
|
* offer(null) throws NullPointerException |
61 |
|
*/ |
181 |
|
} |
182 |
|
|
183 |
|
/** |
184 |
+ |
* drainTo(c, n) returns 0 and does nothing when n <= 0 |
185 |
+ |
*/ |
186 |
+ |
public void testDrainToNonPositiveMaxElements() { |
187 |
+ |
final BlockingQueue q = emptyCollection(); |
188 |
+ |
final int[] ns = { 0, -1, -42, Integer.MIN_VALUE }; |
189 |
+ |
for (int n : ns) |
190 |
+ |
assertEquals(0, q.drainTo(new ArrayList(), n)); |
191 |
+ |
if (q.remainingCapacity() > 0) { |
192 |
+ |
// Not SynchronousQueue, that is |
193 |
+ |
Object one = makeElement(1); |
194 |
+ |
q.add(one); |
195 |
+ |
ArrayList c = new ArrayList(); |
196 |
+ |
for (int n : ns) |
197 |
+ |
assertEquals(0, q.drainTo(new ArrayList(), n)); |
198 |
+ |
assertEquals(1, q.size()); |
199 |
+ |
assertSame(one, q.poll()); |
200 |
+ |
assertTrue(c.isEmpty()); |
201 |
+ |
} |
202 |
+ |
} |
203 |
+ |
|
204 |
+ |
/** |
205 |
|
* timed poll before a delayed offer times out; after offer succeeds; |
206 |
|
* on interruption throws |
207 |
|
*/ |
327 |
|
awaitTermination(t); |
328 |
|
} |
329 |
|
|
330 |
+ |
/** |
331 |
+ |
* remove(x) removes x and returns true if present |
332 |
+ |
* TODO: move to superclass CollectionTest.java |
333 |
+ |
*/ |
334 |
+ |
public void testRemoveElement() { |
335 |
+ |
final BlockingQueue q = emptyCollection(); |
336 |
+ |
final int size = Math.min(q.remainingCapacity(), SIZE); |
337 |
+ |
final Object[] elts = new Object[size]; |
338 |
+ |
assertFalse(q.contains(makeElement(99))); |
339 |
+ |
assertFalse(q.remove(makeElement(99))); |
340 |
+ |
checkEmpty(q); |
341 |
+ |
for (int i = 0; i < size; i++) |
342 |
+ |
q.add(elts[i] = makeElement(i)); |
343 |
+ |
for (int i = 1; i < size; i+=2) { |
344 |
+ |
for (int pass = 0; pass < 2; pass++) { |
345 |
+ |
assertEquals((pass == 0), q.contains(elts[i])); |
346 |
+ |
assertEquals((pass == 0), q.remove(elts[i])); |
347 |
+ |
assertFalse(q.contains(elts[i])); |
348 |
+ |
assertTrue(q.contains(elts[i-1])); |
349 |
+ |
if (i < size - 1) |
350 |
+ |
assertTrue(q.contains(elts[i+1])); |
351 |
+ |
} |
352 |
+ |
} |
353 |
+ |
if (size > 0) |
354 |
+ |
assertTrue(q.contains(elts[0])); |
355 |
+ |
for (int i = size-2; i >= 0; i-=2) { |
356 |
+ |
assertTrue(q.contains(elts[i])); |
357 |
+ |
assertFalse(q.contains(elts[i+1])); |
358 |
+ |
assertTrue(q.remove(elts[i])); |
359 |
+ |
assertFalse(q.contains(elts[i])); |
360 |
+ |
assertFalse(q.remove(elts[i+1])); |
361 |
+ |
assertFalse(q.contains(elts[i+1])); |
362 |
+ |
} |
363 |
+ |
checkEmpty(q); |
364 |
+ |
} |
365 |
+ |
|
366 |
|
/** For debugging. */ |
367 |
|
public void XXXXtestFails() { |
368 |
|
fail(emptyCollection().getClass().toString()); |