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