10 |
|
import java.util.Collection; |
11 |
|
import java.util.Iterator; |
12 |
|
import java.util.LinkedList; |
13 |
+ |
import java.util.List; |
14 |
|
import java.util.NoSuchElementException; |
15 |
+ |
import java.util.concurrent.ThreadLocalRandom; |
16 |
|
|
17 |
|
import junit.framework.Test; |
16 |
– |
import junit.framework.TestSuite; |
18 |
|
|
19 |
|
public class LinkedListTest extends JSR166TestCase { |
20 |
|
public static void main(String[] args) { |
22 |
|
} |
23 |
|
|
24 |
|
public static Test suite() { |
25 |
< |
return new TestSuite(LinkedListTest.class); |
25 |
> |
class Implementation implements CollectionImplementation { |
26 |
> |
public Class<?> klazz() { return LinkedList.class; } |
27 |
> |
public List emptyCollection() { return new LinkedList(); } |
28 |
> |
public Object makeElement(int i) { return i; } |
29 |
> |
public boolean isConcurrent() { return false; } |
30 |
> |
public boolean permitsNulls() { return true; } |
31 |
> |
} |
32 |
> |
class SubListImplementation extends Implementation { |
33 |
> |
public List emptyCollection() { |
34 |
> |
List list = super.emptyCollection(); |
35 |
> |
ThreadLocalRandom rnd = ThreadLocalRandom.current(); |
36 |
> |
if (rnd.nextBoolean()) |
37 |
> |
list.add(makeElement(rnd.nextInt())); |
38 |
> |
int i = rnd.nextInt(list.size() + 1); |
39 |
> |
return list.subList(i, i); |
40 |
> |
} |
41 |
> |
} |
42 |
> |
return newTestSuite( |
43 |
> |
LinkedListTest.class, |
44 |
> |
CollectionTest.testSuite(new Implementation()), |
45 |
> |
CollectionTest.testSuite(new SubListImplementation())); |
46 |
|
} |
47 |
|
|
48 |
|
/** |
49 |
|
* Returns a new queue of given size containing consecutive |
50 |
< |
* Integers 0 ... n. |
50 |
> |
* Integers 0 ... n - 1. |
51 |
|
*/ |
52 |
< |
private LinkedList<Integer> populatedQueue(int n) { |
53 |
< |
LinkedList<Integer> q = new LinkedList<Integer>(); |
52 |
> |
private static LinkedList<Integer> populatedQueue(int n) { |
53 |
> |
LinkedList<Integer> q = new LinkedList<>(); |
54 |
|
assertTrue(q.isEmpty()); |
55 |
|
for (int i = 0; i < n; ++i) |
56 |
|
assertTrue(q.offer(new Integer(i))); |
57 |
|
assertFalse(q.isEmpty()); |
58 |
|
assertEquals(n, q.size()); |
59 |
+ |
assertEquals((Integer) 0, q.peekFirst()); |
60 |
+ |
assertEquals((Integer) (n - 1), q.peekLast()); |
61 |
|
return q; |
62 |
|
} |
63 |
|
|
266 |
|
assertTrue(q.contains(i)); |
267 |
|
assertTrue(q.remove((Integer)i)); |
268 |
|
assertFalse(q.contains(i)); |
269 |
< |
assertTrue(q.contains(i-1)); |
269 |
> |
assertTrue(q.contains(i - 1)); |
270 |
|
} |
271 |
|
for (int i = 0; i < SIZE; i += 2) { |
272 |
|
assertTrue(q.contains(i)); |
273 |
|
assertTrue(q.remove((Integer)i)); |
274 |
|
assertFalse(q.contains(i)); |
275 |
< |
assertFalse(q.remove((Integer)(i+1))); |
276 |
< |
assertFalse(q.contains(i+1)); |
275 |
> |
assertFalse(q.remove((Integer)(i + 1))); |
276 |
> |
assertFalse(q.contains(i + 1)); |
277 |
|
} |
278 |
|
assertTrue(q.isEmpty()); |
279 |
|
} |
358 |
|
*/ |
359 |
|
public void testToArray() { |
360 |
|
LinkedList q = populatedQueue(SIZE); |
361 |
< |
Object[] o = q.toArray(); |
362 |
< |
for (int i = 0; i < o.length; i++) |
363 |
< |
assertSame(o[i], q.poll()); |
361 |
> |
Object[] a = q.toArray(); |
362 |
> |
assertSame(Object[].class, a.getClass()); |
363 |
> |
for (Object o : a) |
364 |
> |
assertSame(o, q.poll()); |
365 |
> |
assertTrue(q.isEmpty()); |
366 |
|
} |
367 |
|
|
368 |
|
/** |
373 |
|
Integer[] ints = new Integer[SIZE]; |
374 |
|
Integer[] array = q.toArray(ints); |
375 |
|
assertSame(ints, array); |
376 |
< |
for (int i = 0; i < ints.length; i++) |
377 |
< |
assertSame(ints[i], q.poll()); |
376 |
> |
for (Integer o : ints) |
377 |
> |
assertSame(o, q.poll()); |
378 |
> |
assertTrue(q.isEmpty()); |
379 |
|
} |
380 |
|
|
381 |
|
/** |
385 |
|
LinkedList l = new LinkedList(); |
386 |
|
l.add(new Object()); |
387 |
|
try { |
388 |
< |
l.toArray(null); |
388 |
> |
l.toArray((Object[])null); |
389 |
|
shouldThrow(); |
390 |
|
} catch (NullPointerException success) {} |
391 |
|
} |
645 |
|
} |
646 |
|
for (int i = 0; i < SIZE; i += 2) { |
647 |
|
assertTrue(q.removeFirstOccurrence(new Integer(i))); |
648 |
< |
assertFalse(q.removeFirstOccurrence(new Integer(i+1))); |
648 |
> |
assertFalse(q.removeFirstOccurrence(new Integer(i + 1))); |
649 |
|
} |
650 |
|
assertTrue(q.isEmpty()); |
651 |
|
} |
660 |
|
} |
661 |
|
for (int i = 0; i < SIZE; i += 2) { |
662 |
|
assertTrue(q.removeLastOccurrence(new Integer(i))); |
663 |
< |
assertFalse(q.removeLastOccurrence(new Integer(i+1))); |
663 |
> |
assertFalse(q.removeLastOccurrence(new Integer(i + 1))); |
664 |
|
} |
665 |
|
assertTrue(q.isEmpty()); |
666 |
|
} |