ability to specify max capacity
[idea/community.git] / platform / util / testSrc / com / intellij / util / containers / CircularCharBufferTest.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.util.containers;
17
18 import org.junit.Assert;
19 import org.junit.Test;
20
21 public class CircularCharBufferTest {
22
23   @Test
24   public void testSingleAdd() throws Exception {
25     CircularCharBuffer queue = new CircularCharBuffer(0);
26     char value = '1';
27     queue.add(value);
28     Assert.assertEquals(1, queue.size());
29     Assert.assertEquals(value, queue.poll());
30     Assert.assertEquals(-1, queue.poll());
31   }
32
33   @Test
34   public void testResize1() throws Exception {
35     CircularCharBuffer queue = new CircularCharBuffer(4);
36     char[] buf = new char[] {'1', '2', '3', '4', '5'};
37     queue.add(buf);
38     Assert.assertEquals(queue.size(), buf.length);
39     for (char c : buf) {
40       Assert.assertEquals(c, queue.poll());
41     }
42     Assert.assertEquals(-1, queue.poll());
43   }
44
45   @Test
46   public void testResize2() throws Exception {
47     CircularCharBuffer queue = new CircularCharBuffer(4, 16);
48     char[] buf = new char[] {'1', '2', '3', '4', '5', '6', '7', '8'};
49     queue.add(buf);
50     Assert.assertEquals(queue.size(), buf.length);
51     Assert.assertEquals(buf[0], queue.poll());
52     Assert.assertEquals(buf[1], queue.poll());
53     char v = '9';
54     queue.add(v);
55     queue.add(v);
56
57     queue.add(buf); // array resize with myHead > myTail
58     Assert.assertEquals(queue.size(), buf.length * 2);
59     for (int i = 2; i < buf.length; i++) {
60       Assert.assertEquals(buf[i], queue.poll());
61     }
62     Assert.assertEquals(v, queue.poll());
63     Assert.assertEquals(v, queue.poll());
64     for (char c : buf) {
65       Assert.assertEquals(c, queue.poll());
66     }
67     Assert.assertEquals(-1, queue.poll());
68   }
69
70   @Test
71   public void testAddString() throws Exception {
72     CircularCharBuffer queue = new CircularCharBuffer(2, 16);
73     queue.add("");
74     Assert.assertEquals(0, queue.size());
75     queue.add("abc");
76     Assert.assertEquals('a', queue.poll());
77     Assert.assertEquals('b', queue.poll());
78     Assert.assertEquals('c', queue.poll());
79     Assert.assertEquals(-1, queue.poll());
80   }
81
82   @Test
83   public void testOverflow() throws Exception {
84     CircularCharBuffer queue = new CircularCharBuffer(1, 4);
85     queue.add("1");
86     Assert.assertEquals("1", queue.getText());
87     queue.add("2");
88     Assert.assertEquals("12", queue.getText());
89     queue.add("3");
90     Assert.assertEquals("123", queue.getText());
91     queue.add("4");
92     Assert.assertEquals("1234", queue.getText());
93     queue.add("5");
94     Assert.assertEquals("2345", queue.getText());
95     queue.add("6");
96     Assert.assertEquals("3456", queue.getText());
97     queue.add("7");
98     Assert.assertEquals("4567", queue.getText());
99     queue.add("8");
100     Assert.assertEquals("5678", queue.getText());
101     queue.add("9");
102     Assert.assertEquals("6789", queue.getText());
103   }
104
105   @Test
106   public void testOverflowComplex() throws Exception {
107     CircularCharBuffer queue = new CircularCharBuffer(1, 10);
108     String alphabet = "abcdefghijklmnopqrstuvwxyz";
109     queue.add(alphabet);
110     Assert.assertEquals(alphabet.substring(alphabet.length() - 10), queue.getText());
111     queue.add(alphabet);
112     Assert.assertEquals(alphabet.substring(alphabet.length() - 10), queue.getText());
113     queue.add(alphabet.substring(0, 4));
114     Assert.assertEquals("uvwxyzabcd", queue.getText());
115     queue.poll();
116     Assert.assertEquals("vwxyzabcd", queue.getText());
117     queue.add("12");
118     Assert.assertEquals("wxyzabcd12", queue.getText());
119   }
120 }