You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2009/12/13 02:49:03 UTC

svn commit: r890017 - in /mina/trunk/core/src/test/java/org/apache/mina/core/buffer: ./ IoBufferTest.java

Author: elecharny
Date: Sun Dec 13 01:49:02 2009
New Revision: 890017

URL: http://svn.apache.org/viewvc?rev=890017&view=rev
Log:
Injected the IoBuffer unit test (after having used Junit 4.5 construct)

Added:
    mina/trunk/core/src/test/java/org/apache/mina/core/buffer/
    mina/trunk/core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java

Added: mina/trunk/core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java?rev=890017&view=auto
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java (added)
+++ mina/trunk/core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java Sun Dec 13 01:49:02 2009
@@ -0,0 +1,143 @@
+/*
+ *  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.core.buffer;
+
+import static org.junit.Assert.assertEquals;
+
+import java.nio.ByteBuffer;
+
+import org.junit.Test;
+
+/**
+ * Tests {@link IoBuffer}.
+ * 
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class IoBufferTest {
+    @Test
+    public void testNormalizeCapacity() {
+        // A few sanity checks
+        assertEquals(Integer.MAX_VALUE, IoBufferImpl.normalizeCapacity(-10));
+        assertEquals(0, IoBufferImpl.normalizeCapacity(0));
+        assertEquals(Integer.MAX_VALUE, IoBufferImpl.normalizeCapacity(Integer.MAX_VALUE));
+        assertEquals(Integer.MAX_VALUE, IoBufferImpl.normalizeCapacity(Integer.MIN_VALUE));
+        assertEquals(Integer.MAX_VALUE, IoBufferImpl.normalizeCapacity(Integer.MAX_VALUE - 10));
+
+        // A sanity check test for all the powers of 2
+        for (int i = 0; i < 30; i++) {
+            int n = 1 << i;
+
+            assertEquals(n, IoBufferImpl.normalizeCapacity(n));
+
+            if (i > 1) {
+                // test that n - 1 will be normalized to n (notice that n = 2^i)
+                assertEquals(n, IoBufferImpl.normalizeCapacity(n - 1));
+            }
+
+            // test that n + 1 will be normalized to 2^(i + 1)
+            assertEquals(n << 1, IoBufferImpl.normalizeCapacity(n + 1));
+        }
+
+        // The first performance test measures the time to normalize integers
+        // from 0 to 2^27 (it tests 2^27 integers)
+        long time = System.currentTimeMillis();
+
+        for (int i = 0; i < 1 << 27; i++) {
+            int n = IoBufferImpl.normalizeCapacity(i);
+
+            // do a simple superfluous test to prevent possible compiler or JVM
+            // optimizations of not executing non used code/variables
+            if (n == -1) {
+                System.out.println("n should never be -1");
+            }
+        }
+
+        long time2 = System.currentTimeMillis();
+        System.out.println("Time for performance test 1: " + (time2 - time) + "ms");
+
+        // The second performance test measures the time to normalize integers
+        // from Integer.MAX_VALUE to Integer.MAX_VALUE - 2^27 (it tests 2^27
+        // integers)
+        time = System.currentTimeMillis();
+        for (int i = Integer.MAX_VALUE; i > Integer.MAX_VALUE - (1 << 27); i--) {
+            int n = IoBufferImpl.normalizeCapacity(i);
+
+            // do a simple superfluous test to prevent possible compiler or JVM
+            // optimizations of not executing non used code/variables
+            if (n == -1) {
+                System.out.println("n should never be -1");
+            }
+        }
+
+        time2 = System.currentTimeMillis();
+        System.out.println("Time for performance test 2: " + (time2 - time) + "ms");
+    }
+
+    /**
+     * This class extends the AbstractIoBuffer class to have direct access to
+     * the protected IoBuffer.normalizeCapacity() method and to expose it for
+     * the tests.
+     */
+    private static class IoBufferImpl extends AbstractIoBuffer {
+
+        public static int normalizeCapacity(int requestedCapacity) {
+            return IoBuffer.normalizeCapacity(requestedCapacity);
+        }
+
+        protected IoBufferImpl(AbstractIoBuffer parent) {
+            super(parent);
+        }
+
+        protected IoBuffer asReadOnlyBuffer0() {
+            return null;
+        }
+
+        protected void buf(ByteBuffer newBuf) {
+        }
+
+        protected IoBuffer duplicate0() {
+            return null;
+        }
+
+        protected IoBuffer slice0() {
+            return null;
+        }
+
+        public byte[] array() {
+            return null;
+        }
+
+        public int arrayOffset() {
+            return 0;
+        }
+
+        public ByteBuffer buf() {
+            return null;
+        }
+
+        public void free() {
+        }
+
+        public boolean hasArray() {
+            return false;
+        }
+
+    }
+}