/* * JBoss, Home of Professional Open Source. * * Copyright 2012 Red Hat, Inc. and/or its affiliates, and individual * contributors as indicated by the @author tags. * * Licensed 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.xnio; import junit.framework.TestCase; import static org.xnio.Bits.*; /** * Test for {@link Bits}. * * @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a> * @author <a href="mailto:flavia.rainone@jboss.com">Flavia Rainone</a> */ public final class BitsTestCase extends TestCase { public void testBitMask() { assertEquals(0x00FFFF00, intBitMask(8, 23)); assertEquals(1, intBitMask(0, 0)); assertEquals(0xFFFFFFFF, intBitMask(0, 31)); assertEquals(0x80000000, intBitMask(31, 31)); assertEquals(0x00FFFFFFFFFFFF00L, longBitMask(8, 55)); assertEquals(1L, longBitMask(0, 0)); assertEquals(0xFFFFFFFFFFFFFFFFL, longBitMask(0, 63)); assertEquals(0x8000000000000000L, longBitMask(63, 63)); } public void testInvalidBitMask() { AssertionError expected = null; try { intBitMask(-8, 23); } catch (AssertionError e) { expected = e; } assertNotNull(expected); expected = null; try { intBitMask(24, 23); } catch (AssertionError e) { expected = e; } assertNotNull(expected); expected = null; try { intBitMask(8, 32); } catch (AssertionError e) { expected = e; } expected = null; try { longBitMask(-8, 55); } catch (AssertionError e) { expected = e; } assertNotNull(expected); expected = null; try { longBitMask(56, 55); } catch (AssertionError e) { expected = e; } assertNotNull(expected); expected = null; try { longBitMask(8, 64); } catch (AssertionError e) { expected = e; } assertNotNull(expected); } public void testAllAreClearInt() { assertTrue(allAreClear(0xFF00FF00, 0x00FF00FF)); assertTrue(allAreClear(0xFF00FF00, 0x00230042)); assertTrue(allAreClear(0xFF00FF00, 0)); assertFalse(allAreClear(0xFF00FF00, 0xFF00FF00)); assertFalse(allAreClear(0xFF00FF00, 0x3A00E300)); assertFalse(allAreClear(0xFF00FF00, 0xFFFFFFFF)); assertFalse(allAreClear(0xFF00FF00, 0x00000100)); assertFalse(allAreClear(0xFF00FF00, 0x80000000)); } public void testAllAreClearLong() { assertTrue(allAreClear(0xFF00FF00FF00FF00L, 0x00FF00FF00FF00FFL)); assertTrue(allAreClear(0xFF00FF00FF00FF00L, 0x0023004200110055L)); assertTrue(allAreClear(0xFF00FF00FF00FF00L, 0)); assertFalse(allAreClear(0xFF00FF00FF00FF00L, 0xFF00FF00FF00FF00L)); assertFalse(allAreClear(0xFF00FF00FF00FF00L, 0x3A00E3004D002200L)); assertFalse(allAreClear(0xFF00FF00FF00FF00L, 0xFFFFFFFFFFFFFFFFL)); assertFalse(allAreClear(0xFF00FF00FF00FF00L, 0x0000010000000000L)); assertFalse(allAreClear(0xFF00FF00FF00FF00L, 0x8000000000000000L)); } // anyAreSet is the inverse of allAreClear, so each test should be duplicated in both sections public void testAnyAreSetInt() { assertFalse(anyAreSet(0xFF00FF00, 0x00FF00FF)); assertFalse(anyAreSet(0xFF00FF00, 0x00230042)); assertFalse(anyAreSet(0xFF00FF00, 0)); assertTrue(anyAreSet(0xFF00FF00, 0xFF00FF00)); assertTrue(anyAreSet(0xFF00FF00, 0x3A00E300)); assertTrue(anyAreSet(0xFF00FF00, 0xFFFFFFFF)); assertTrue(anyAreSet(0xFF00FF00, 0x00000100)); assertTrue(anyAreSet(0xFF00FF00, 0x80000000)); } public void testAnyAreSetLong() { assertFalse(anyAreSet(0xFF00FF00FF00FF00L, 0x00FF00FF00FF00FFL)); assertFalse(anyAreSet(0xFF00FF00FF00FF00L, 0x0023004200110055L)); assertFalse(anyAreSet(0xFF00FF00FF00FF00L, 0)); assertTrue(anyAreSet(0xFF00FF00FF00FF00L, 0xFF00FF00FF00FF00L)); assertTrue(anyAreSet(0xFF00FF00FF00FF00L, 0x3A00E3004D002200L)); assertTrue(anyAreSet(0xFF00FF00FF00FF00L, 0xFFFFFFFFFFFFFFFFL)); assertTrue(anyAreSet(0xFF00FF00FF00FF00L, 0x0000010000000000L)); assertTrue(anyAreSet(0xFF00FF00FF00FF00L, 0x8000000000000000L)); } public void testAllAreSetInt() { assertTrue(allAreSet(0xFF00FF00, 0xFF00FF00)); assertTrue(allAreSet(0xFF00FF00, 0x12003400)); assertTrue(allAreSet(0xFF00FF00, 0)); assertFalse(allAreSet(0xFF00FF00, 0x00FF00FF)); assertFalse(allAreSet(0xFF00FF00, 0x00800000)); assertFalse(allAreSet(0xFF00FF00, 0x00000001)); assertFalse(allAreSet(0xFF00FF00, 0x00FF0000)); } public void testAllAreSetLong() { assertTrue(allAreSet(0xFF00FF00FF00FF00L, 0xFF00FF00FF00FF00L)); assertTrue(allAreSet(0xFF00FF00FF00FF00L, 0x1200340056007800L)); assertTrue(allAreSet(0xFF00FF00FF00FF00L, 0L)); assertFalse(allAreSet(0xFF00FF00FF00FF00L, 0x00FF00FF00FF00FFL)); assertFalse(allAreSet(0xFF00FF00FF00FF00L, 0x0080000000000000L)); assertFalse(allAreSet(0xFF00FF00FF00FF00L, 0x0000000000000001L)); assertFalse(allAreSet(0xFF00FF00FF00FF00L, 0x00FF000000000000L)); } // anyAreClear is the inverse of allAreSet, so each test should be duplicated in both sections public void testAnyAreClearInt() { assertFalse(anyAreClear(0xFF00FF00, 0xFF00FF00)); assertFalse(anyAreClear(0xFF00FF00, 0x12003400)); assertFalse(anyAreClear(0xFF00FF00, 0)); assertTrue(anyAreClear(0xFF00FF00, 0x00FF00FF)); assertTrue(anyAreClear(0xFF00FF00, 0x00800000)); assertTrue(anyAreClear(0xFF00FF00, 0x00000001)); assertTrue(anyAreClear(0xFF00FF00, 0x00FF0000)); } public void testAnyAreClearLong() { assertFalse(anyAreClear(0xFF00FF00FF00FF00L, 0xFF00FF00FF00FF00L)); assertFalse(anyAreClear(0xFF00FF00FF00FF00L, 0x1200340056007800L)); assertFalse(anyAreClear(0xFF00FF00FF00FF00L, 0L)); assertTrue(anyAreClear(0xFF00FF00FF00FF00L, 0x00FF00FF00FF00FFL)); assertTrue(anyAreClear(0xFF00FF00FF00FF00L, 0x0080000000000000L)); assertTrue(anyAreClear(0xFF00FF00FF00FF00L, 0x0000000000000001L)); assertTrue(anyAreClear(0xFF00FF00FF00FF00L, 0x00FF000000000000L)); } // unsigned methods public void testUnsignedByte() { assertEquals(0x5, unsigned((byte) 0x5)); assertEquals(0xfb, unsigned((byte) -0x5)); assertEquals(0x5, unsigned((byte) -0xfb)); assertEquals(0xff, unsigned((byte) -0x1)); assertEquals(0x1, unsigned((byte) -0xff)); } public void testUnsginedShort() { assertEquals(0xf875, unsigned((short) -0x78b)); assertEquals(0x78b, unsigned((short) -0xf875)); assertEquals(0xffff, unsigned((short) -0x1)); assertEquals(0x1, unsigned((short) -0xffff)); } public void testUnsignedInt() { assertEquals(0xffffffffl, unsigned((int) 0xffffffff)); assertEquals(0xffffffffl, unsigned((int) -1)); assertEquals(0x1l, unsigned((int) -0xffffffff)); assertEquals(0xfffff544l, unsigned((int) -0xabc)); assertEquals(0xabc, unsigned((int) -0xfffff544)); assertEquals(0xfffff541l, unsigned((int) -0xabf)); assertEquals(0xabf, unsigned((int) -0xfffff541)); } // byte array methods public void testByteArrayRead() { final byte[] bytes = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; assertEquals(0x01020304, intFromBytesBE(bytes, 0)); assertEquals(0x04030201, intFromBytesLE(bytes, 0)); assertEquals(0x03040506, intFromBytesBE(bytes, 2)); assertEquals(0x06050403, intFromBytesLE(bytes, 2)); assertEquals(0x0203, shortFromBytesBE(bytes, 1)); assertEquals(0x0302, shortFromBytesLE(bytes, 1)); assertEquals((char) 0x0203, charFromBytesBE(bytes, 1)); assertEquals((char) 0x0302, charFromBytesLE(bytes, 1)); assertEquals(0x00030405, mediumFromBytesBE(bytes, 2)); assertEquals(0x00050403, mediumFromBytesLE(bytes, 2)); assertEquals(0x060708090a0b0c0dL, longFromBytesBE(bytes, 5)); assertEquals(0x0d0c0b0a09080706L, longFromBytesLE(bytes, 5)); } }