1 package net.sf.openrocket.logging;
3 import static org.junit.Assert.*;
5 import java.util.Iterator;
6 import java.util.LinkedList;
8 import java.util.NoSuchElementException;
9 import java.util.Random;
11 import org.junit.Test;
14 public class CyclicBufferTest {
17 public void testBasic() {
18 CyclicBuffer<Integer> buffer = new CyclicBuffer<Integer>(5);
19 LinkedList<Integer> correct = new LinkedList<Integer>();
21 Random rnd = new Random();
22 for (int i=0; i<50; i++) {
23 int n = rnd.nextInt();
26 if (correct.size() > 5)
28 assertEquals(correct, buffer.asList());
33 public void testComplex() {
34 CyclicBuffer<Integer> buffer = new CyclicBuffer<Integer>(5);
37 assertEquals(0, buffer.getOverwriteCount());
40 testContents(buffer, 1);
41 assertEquals(0, buffer.getOverwriteCount());
44 testContents(buffer, 1, 2);
45 assertEquals(0, buffer.getOverwriteCount());
48 testContents(buffer, 1, 2, 3);
49 assertEquals(0, buffer.getOverwriteCount());
51 assertEquals(1, (int)buffer.remove());
52 testContents(buffer, 2, 3);
53 assertEquals(0, buffer.getOverwriteCount());
55 assertEquals(2, (int)buffer.peek());
56 testContents(buffer, 2, 3);
57 assertEquals(0, buffer.getOverwriteCount());
60 testContents(buffer, 2, 3, -2);
61 assertEquals(0, buffer.getOverwriteCount());
64 testContents(buffer, 2, 3, -2, -3);
65 assertEquals(0, buffer.getOverwriteCount());
68 testContents(buffer, 2, 3, -2, -3, -4);
69 assertEquals(0, buffer.getOverwriteCount());
72 testContents(buffer, 3, -2, -3, -4, 5);
73 assertEquals(1, buffer.getOverwriteCount());
76 testContents(buffer, -2, -3, -4, 5, 6);
77 assertEquals(2, buffer.getOverwriteCount());
79 assertEquals(-2, (int)buffer.peek());
80 testContents(buffer, -2, -3, -4, 5, 6);
81 assertEquals(2, buffer.getOverwriteCount());
83 assertEquals(-2, (int)buffer.remove());
84 testContents(buffer, -3, -4, 5, 6);
85 assertEquals(2, buffer.getOverwriteCount());
87 assertEquals(-3, (int)buffer.remove());
88 testContents(buffer, -4, 5, 6);
89 assertEquals(2, buffer.getOverwriteCount());
91 assertEquals(-4, (int)buffer.poll());
92 testContents(buffer, 5, 6);
93 assertEquals(2, buffer.getOverwriteCount());
95 assertEquals(5, (int)buffer.remove());
96 testContents(buffer, 6);
97 assertEquals(2, buffer.getOverwriteCount());
99 assertEquals(6, (int)buffer.poll());
100 testContents(buffer);
101 assertEquals(2, buffer.getOverwriteCount());
103 assertNull(buffer.peek());
104 assertNull(buffer.poll());
105 testContents(buffer);
106 assertEquals(2, buffer.getOverwriteCount());
111 public void testRandom() {
112 CyclicBuffer<Integer> buffer = new CyclicBuffer<Integer>(4);
113 LinkedList<Integer> correct = new LinkedList<Integer>();
115 Random rnd = new Random();
116 for (int i=0; i<500; i++) {
118 if (rnd.nextBoolean()) {
119 int n = rnd.nextInt();
122 if (correct.size() > 4)
125 Integer n = buffer.poll();
126 if (correct.size() > 0) {
127 assertEquals(correct.remove(), n);
133 assertEquals(correct, buffer.asList());
138 private void testContents(CyclicBuffer<Integer> buffer, int ... values) {
140 // Test using iterator
141 Iterator<Integer> iterator = buffer.iterator();
142 for (int v: values) {
143 assertTrue(iterator.hasNext());
144 assertEquals(v, (int)iterator.next());
146 assertFalse(iterator.hasNext());
150 } catch (NoSuchElementException ignore) { }
153 List<Integer> list = buffer.asList();
154 assertEquals("List: " + list, values.length, list.size());
155 for (int i=0; i<values.length; i++) {
156 assertEquals(values[i], (int)list.get(i));