BitwiseStreamsTest.java revision e564b19ed2f6b8b5667648254bc6c6859bb536e7
183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink/*
283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * Copyright (C) 2006 The Android Open Source Project
383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink *
483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * Licensed under the Apache License, Version 2.0 (the "License");
583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * you may not use this file except in compliance with the License.
683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * You may obtain a copy of the License at
783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink *
883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink *      http://www.apache.org/licenses/LICENSE-2.0
983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink *
1083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * Unless required by applicable law or agreed to in writing, software
1183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * distributed under the License is distributed on an "AS IS" BASIS,
1283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * See the License for the specific language governing permissions and
1483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * limitations under the License.
1583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink */
1683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
1783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkpackage com.android.unit_tests;
1883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
1983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.util.BitwiseInputStream;
2083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.util.BitwiseOutputStream;
2183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.util.HexDump;
2283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
2383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport android.test.AndroidTestCase;
2483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport android.test.suitebuilder.annotation.SmallTest;
2583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
26e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalinkimport android.util.Log;
27e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink
2883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkpublic class BitwiseStreamsTest extends AndroidTestCase {
2983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    private final static String LOG_TAG = "BitwiseStreamsTest";
3083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
3183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    @SmallTest
3283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    public void testOne() throws Exception {
3383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        int offset = 3;
3483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBuf = HexDump.hexStringToByteArray("FFDD");
3583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseOutputStream outStream = new BitwiseOutputStream(30);
3683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        outStream.skip(offset);
3783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBuf.length; i++) outStream.write(8, inBuf[i]);
3883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] outBuf = outStream.toByteArray();
3983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseInputStream inStream = new BitwiseInputStream(outBuf);
4083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBufDup = new byte[inBuf.length];
4183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        inStream.skip(offset);
4283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
4383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
4483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    }
4583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
4683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    @SmallTest
4783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    public void testTwo() throws Exception {
4883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        int offset = 3;
4983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBuf = HexDump.hexStringToByteArray("11d4f29c0e9ad3c36e72584e064d9b53");
5083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseOutputStream outStream = new BitwiseOutputStream(30);
5183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        outStream.skip(offset);
5283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBuf.length; i++) outStream.write(8, inBuf[i]);
5383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
5483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        inStream.skip(offset);
5583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBufDup = new byte[inBuf.length];
5683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
5783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
5883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    }
5983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
6083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    @SmallTest
6183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    public void testThree() throws Exception {
6283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        int offset = 4;
6383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBuf = HexDump.hexStringToByteArray("00031040900112488ea794e0");
6483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseOutputStream outStream = new BitwiseOutputStream(30);
6583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        outStream.skip(offset);
6683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBuf.length; i++) outStream.write(8, inBuf[i]);
6783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
6883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        inStream.skip(offset);
6983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBufDup = new byte[inBuf.length];
7083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
7183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
7283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    }
7383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink
7483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    @SmallTest
7583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    public void testFour() throws Exception {
7683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        int offset = 7;
7783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBuf = HexDump.hexStringToByteArray("00031040900112488ea794e0");
7883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseOutputStream outStream = new BitwiseOutputStream(30);
7983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        outStream.skip(offset);
8083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBuf.length; i++) {
8183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink            outStream.write(5, inBuf[i] >>> 3);
8283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink            outStream.write(3, inBuf[i] & 0x07);
8383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        }
8483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
8583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        inStream.skip(offset);
8683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        byte[] inBufDup = new byte[inBuf.length];
8783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
8883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink        assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
8983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink    }
90e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink
91e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink    @SmallTest
92e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink    public void testFive() throws Exception {
93e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink        int num_runs = 10;
94e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink        long start = android.os.SystemClock.elapsedRealtime();
95e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink        for (int run = 0; run < num_runs; run++) {
96e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            int offset = run % 8;
97e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            byte[] inBuf = HexDump.hexStringToByteArray("00031040900112488ea794e0");
98e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            BitwiseOutputStream outStream = new BitwiseOutputStream(30);
99e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            outStream.skip(offset);
100e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            for (int i = 0; i < inBuf.length; i++) {
101e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink                outStream.write(5, inBuf[i] >>> 3);
102e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink                outStream.write(3, inBuf[i] & 0x07);
103e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            }
104e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
105e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            inStream.skip(offset);
106e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            byte[] inBufDup = new byte[inBuf.length];
107e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
108e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink            assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
109e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink        }
110e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink        long end = android.os.SystemClock.elapsedRealtime();
111e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink        Log.d(LOG_TAG, "repeated encode-decode took " + (end - start) + " ms");
112e564b19ed2f6b8b5667648254bc6c6859bb536e7Tammo Spalink    }
11383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink}
114