⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 circularqueuetest.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you under the Apache License, Version 2.0 (the *  "License"); you may not use this file except in compliance *  with the License.  You may obtain a copy of the License at *   *    http://www.apache.org/licenses/LICENSE-2.0 *   *  Unless required by applicable law or agreed to in writing, *  software distributed under the License is distributed on an *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *  KIND, either express or implied.  See the License for the *  specific language governing permissions and limitations *  under the License.  *   */package org.apache.mina.util;import junit.framework.TestCase;import java.util.Iterator;/** * Tests {@link org.apache.mina.util.CircularQueue} *  * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 755170 $, $Date: 2009-03-17 10:46:58 +0100 (Tue, 17 Mar 2009) $ */public class CircularQueueTest extends TestCase {    private volatile int pushCount;    private volatile int popCount;    public void setUp() {        pushCount = 0;        popCount = 0;    }    public void testRotation() {        CircularQueue<Integer> q = new CircularQueue<Integer>(); // DEFAULT_CAPACITY = 4        testRotation0(q);    }    public void testExpandingRotation() {        CircularQueue<Integer> q = new CircularQueue<Integer>(); // DEFAULT_CAPACITY = 4        for (int i = 0; i < 10; i++) {            testRotation0(q);            // make expansion happen            int oldCapacity = q.capacity();            for (int j = q.capacity(); j >= 0; j--) {                q.offer(new Integer(++pushCount));            }            assertTrue(q.capacity() > oldCapacity);            testRotation0(q);        }    }    private void testRotation0(CircularQueue<Integer> q) {        for (int i = 0; i < q.capacity() * 7 / 4; i++) {            q.offer(new Integer(++pushCount));            assertEquals(++popCount, q.poll().intValue());        }    }    public void testRandomAddOnQueue() {        CircularQueue<Integer> q = new CircularQueue<Integer>();        // Create a queue with 5 elements and capacity 8;        for (int i = 0; i < 5; i++) {            q.offer(new Integer(i));        }        q.add(0, new Integer(100));        q.add(3, new Integer(200));        q.add(7, new Integer(300));        Iterator<Integer> i = q.iterator();        assertEquals(8, q.size());        assertEquals(new Integer(100), i.next());        assertEquals(new Integer(0), i.next());        assertEquals(new Integer(1), i.next());        assertEquals(new Integer(200), i.next());        assertEquals(new Integer(2), i.next());        assertEquals(new Integer(3), i.next());        assertEquals(new Integer(4), i.next());        assertEquals(new Integer(300), i.next());        try {            i.next();            fail();        } catch (Exception e) {            // an exception signifies a successfull test case            assertTrue(true);                    }    }    public void testRandomAddOnRotatedQueue() {        CircularQueue<Integer> q = getRotatedQueue();        q.add(0, new Integer(100)); // addFirst        q.add(2, new Integer(200));        q.add(4, new Integer(300));        q.add(10, new Integer(400));        q.add(12, new Integer(500)); // addLast        Iterator<Integer> i = q.iterator();        assertEquals(13, q.size());        assertEquals(new Integer(100), i.next());        assertEquals(new Integer(0), i.next());        assertEquals(new Integer(200), i.next());        assertEquals(new Integer(1), i.next());        assertEquals(new Integer(300), i.next());        assertEquals(new Integer(2), i.next());        assertEquals(new Integer(3), i.next());        assertEquals(new Integer(4), i.next());        assertEquals(new Integer(5), i.next());        assertEquals(new Integer(6), i.next());        assertEquals(new Integer(400), i.next());        assertEquals(new Integer(7), i.next());        assertEquals(new Integer(500), i.next());        try {            i.next();            fail();        } catch (Exception e) {            // an exception signifies a successfull test case            assertTrue(true);        }    }    public void testRandomRemoveOnQueue() {        CircularQueue<Integer> q = new CircularQueue<Integer>();        // Create a queue with 5 elements and capacity 8;        for (int i = 0; i < 5; i++) {            q.offer(new Integer(i));        }        q.remove(0);        q.remove(2);        q.remove(2);        Iterator<Integer> i = q.iterator();        assertEquals(2, q.size());        assertEquals(new Integer(1), i.next());        assertEquals(new Integer(2), i.next());        try {            i.next();            fail();        } catch (Exception e) {            // an exception signifies a successfull test case            assertTrue(true);        }    }    public void testRandomRemoveOnRotatedQueue() {        CircularQueue<Integer> q = getRotatedQueue();        q.remove(0); // removeFirst        q.remove(2); // removeLast in the first half        q.remove(2); // removeFirst in the first half        q.remove(4); // removeLast        Iterator<Integer> i = q.iterator();        assertEquals(4, q.size());        assertEquals(new Integer(1), i.next());        assertEquals(new Integer(2), i.next());        assertEquals(new Integer(5), i.next());        assertEquals(new Integer(6), i.next());        try {            i.next();            fail();        } catch (Exception e) {            // an exception signifies a successfull test case            assertTrue(true);                    }    }        public void testExpandAndShrink() throws Exception {        CircularQueue<Integer> q = new CircularQueue<Integer>();        for (int i = 0; i < 1024; i ++) {            q.offer(i);        }                assertEquals(1024, q.capacity());                for (int i = 0; i < 512; i ++) {            q.offer(i);            q.poll();        }                assertEquals(2048, q.capacity());                for (int i = 0; i < 1024; i ++) {             q.poll();        }                assertEquals(4, q.capacity());    }    private CircularQueue<Integer> getRotatedQueue() {        CircularQueue<Integer> q = new CircularQueue<Integer>();        // Ensure capacity: 16        for (int i = 0; i < 16; i++) {            q.offer(new Integer(-1));        }        q.clear();        // Rotate it        for (int i = 0; i < 12; i++) {            q.offer(new Integer(-1));            q.poll();        }        // Now push items        for (int i = 0; i < 8; i++) {            q.offer(new Integer(i));        }        return q;    }    public static void main(String[] args) {        junit.textui.TestRunner.run(CircularQueueTest.class);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -