BufferTest.java revision 6944bea4a129dc2d4be687c72f2a9f228ec532bc
1/* 2 * Copyright (C) 2010 The Android Open Source Project 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 17package libcore.java.nio; 18 19import java.nio.*; 20import java.util.Arrays; 21import junit.framework.TestCase; 22 23public class BufferTest extends TestCase { 24 public void testByteSwappedHeapBulkCopies() throws Exception { 25 ByteBuffer b = ByteBuffer.allocate(8); 26 b.put(0, (byte) 1); 27 b.put(1, (byte) 2); 28 b.put(2, (byte) 3); 29 b.put(3, (byte) 4); 30 b.put(4, (byte) 5); 31 b.put(5, (byte) 6); 32 b.put(6, (byte) 7); 33 b.put(7, (byte) 8); 34 35 char[] chars = new char[4]; 36 CharBuffer cb; 37 cb = b.order(ByteOrder.BIG_ENDIAN).asCharBuffer(); 38 cb.get(chars); 39 assertEquals(Arrays.toString(new char[] { '\u0102', '\u0304', '\u0506', '\u0708' }), Arrays.toString(chars)); 40 cb = b.order(ByteOrder.LITTLE_ENDIAN).asCharBuffer(); 41 cb.get(chars); 42 assertEquals(Arrays.toString(new char[] { '\u0201', '\u0403', '\u0605', '\u0807' }), Arrays.toString(chars)); 43 44 double[] doubles = new double[1]; 45 DoubleBuffer db; 46 db = b.order(ByteOrder.BIG_ENDIAN).asDoubleBuffer(); 47 db.get(doubles); 48 assertEquals(0x0102030405060708L, Double.doubleToRawLongBits(doubles[0])); 49 db = b.order(ByteOrder.LITTLE_ENDIAN).asDoubleBuffer(); 50 db.get(doubles); 51 assertEquals(0x0807060504030201L, Double.doubleToRawLongBits(doubles[0])); 52 53 float[] floats = new float[2]; 54 FloatBuffer fb; 55 fb = b.order(ByteOrder.BIG_ENDIAN).asFloatBuffer(); 56 fb.get(floats); 57 assertEquals(0x01020304, Float.floatToRawIntBits(floats[0])); 58 assertEquals(0x05060708, Float.floatToRawIntBits(floats[1])); 59 fb = b.order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer(); 60 fb.get(floats); 61 assertEquals(0x04030201, Float.floatToRawIntBits(floats[0])); 62 assertEquals(0x08070605, Float.floatToRawIntBits(floats[1])); 63 64 int[] ints = new int[2]; 65 IntBuffer ib; 66 ib = b.order(ByteOrder.BIG_ENDIAN).asIntBuffer(); 67 ib.get(ints); 68 assertEquals(0x01020304, ints[0]); 69 assertEquals(0x05060708, ints[1]); 70 ib = b.order(ByteOrder.LITTLE_ENDIAN).asIntBuffer(); 71 ib.get(ints); 72 assertEquals(0x04030201, ints[0]); 73 assertEquals(0x08070605, ints[1]); 74 75 long[] longs = new long[1]; 76 LongBuffer lb; 77 lb = b.order(ByteOrder.BIG_ENDIAN).asLongBuffer(); 78 lb.get(longs); 79 assertEquals(0x0102030405060708L, longs[0]); 80 lb = b.order(ByteOrder.LITTLE_ENDIAN).asLongBuffer(); 81 lb.get(longs); 82 assertEquals(0x0807060504030201L, longs[0]); 83 84 short[] shorts = new short[4]; 85 ShortBuffer sb; 86 sb = b.order(ByteOrder.BIG_ENDIAN).asShortBuffer(); 87 sb.get(shorts); 88 assertEquals(0x0102, shorts[0]); 89 assertEquals(0x0304, shorts[1]); 90 assertEquals(0x0506, shorts[2]); 91 assertEquals(0x0708, shorts[3]); 92 sb = b.order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); 93 sb.get(shorts); 94 assertEquals(0x0201, shorts[0]); 95 assertEquals(0x0403, shorts[1]); 96 assertEquals(0x0605, shorts[2]); 97 assertEquals(0x0807, shorts[3]); 98 } 99} 100