17dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver/*
27dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * Copyright 2012, Google Inc.
37dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * All rights reserved.
47dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver *
57dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * Redistribution and use in source and binary forms, with or without
67dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * modification, are permitted provided that the following conditions are
77dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * met:
87dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver *
97dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver *     * Redistributions of source code must retain the above copyright
107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * notice, this list of conditions and the following disclaimer.
117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver *     * Redistributions in binary form must reproduce the above
127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * copyright notice, this list of conditions and the following disclaimer
137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * in the documentation and/or other materials provided with the
147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * distribution.
157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver *     * Neither the name of Google Inc. nor the names of its
167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * contributors may be used to endorse or promote products derived from
177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * this software without specific prior written permission.
187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver *
197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver */
317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverpackage org.jf.dexlib2.writer;
337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport junit.framework.Assert;
357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.jf.dexlib2.ValueType;
367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.jf.util.ExceptionWithContext;
377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.jf.util.NakedByteArrayOutputStream;
387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.junit.Before;
397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.junit.Test;
407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.io.IOException;
427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.util.Arrays;
437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.util.Random;
447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
451bf6f2324541df184689fdb2c0d8188af5221784Ben Gruverpublic class DexDataWriterTest {
467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private Random random;
477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private NakedByteArrayOutputStream output = new NakedByteArrayOutputStream();
487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private int startPosition;
491bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver    private DexDataWriter writer;
507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Before
527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void setup() throws IOException {
537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        // use a predefined seed, so we get a deterministic result
547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        random = new Random();
557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        output.reset();
567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        startPosition = 123;
577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        int bufferSize = 256;
581bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver        writer = new DexDataWriter(output, startPosition, bufferSize);
597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    // Note: we use int[] rather than byte[] so that we don't have to cast every value when manually constructing an
627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    // array.
637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void expectData(int... bytes) throws IOException {
647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        Assert.assertEquals(startPosition+bytes.length, writer.getPosition());
657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.flush();
677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        byte[] writtenData = output.getBuffer();
687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        for (int i=0; i<bytes.length; i++) {
707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver            Assert.assertEquals(String.format("Values not equal at index %d", i), (byte)bytes[i], writtenData[i]);
717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        }
727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void expectData(byte[] bytes) throws IOException {
757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        Assert.assertEquals(startPosition+bytes.length, writer.getPosition());
767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.flush();
787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        byte[] writtenData = output.getBuffer();
797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        for (int i=0; i<bytes.length; i++) {
817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver            Assert.assertEquals(String.format("Values not equal at index %d", i), bytes[i], writtenData[i]);
827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        }
837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteByte() throws IOException {
877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        byte[] arr = new byte[257];
887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        for (int i=0; i<256; i++) {
897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver            arr[i] = (byte)i;
907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver            writer.write(i);
917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        }
927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        arr[256] = (byte)0x80;
937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(0x180);
947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteByteArray() throws IOException {
1007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        byte[] arr = new byte[345];
1017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        random.nextBytes(arr);
1027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(arr);
1037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
1057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
1087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteByteArrayWithLengthAndOffset() throws IOException {
1097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        byte[] arr = new byte[345];
1107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        random.nextBytes(arr);
1117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(arr, 10, 300);
1127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(Arrays.copyOfRange(arr, 10, 310));
1147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
1177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteLong() throws IOException {
1187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeLong(0x1122334455667788L);
1197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeLong(-0x1122334455667788L);
1207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11,
1227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x78, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE);
1237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
1267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteInt() throws IOException {
1277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeInt(0x11223344);
1287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeInt(-0x11223344);
1297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x44, 0x33, 0x22, 0x11,
1317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0xBC, 0xCC, 0xDD, 0xEE);
1327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
1357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteShort() throws IOException {
1367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(0);
1377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(0x1122);
1387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(-0x1122);
1397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(0x7FFF);
1407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(-0x8000);
1417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x00, 0x00,
1437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x22, 0x11,
1447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0xDE, 0xEE,
1457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0xFF, 0x7F,
1467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x00, 0x80);
1477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test(expected=ExceptionWithContext.class)
1507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteShortOutOfBounds() throws IOException {
1517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(0x8000);
1527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test(expected=ExceptionWithContext.class)
1557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteShortOutOfBounds2() throws IOException {
1567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeShort(-0x8001);
1577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
1607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteUshort() throws IOException {
1617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUshort(0);
1627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUshort(0x1122);
1637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUshort(0x8899);
1647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUshort(0xFFFF);
1657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x00, 0x00,
1677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x22, 0x11,
1687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x99, 0x88,
1697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0xFF, 0xFF);
1707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test(expected=ExceptionWithContext.class)
1737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteUshortOutOfBounds() throws IOException {
1747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUshort(-1);
1757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test(expected=ExceptionWithContext.class)
1787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteUshortOutOfBounds2() throws IOException {
1797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUshort(0x10000);
1807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
1837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteUbyte() throws IOException {
1847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUbyte(0);
1857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUbyte(1);
1867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUbyte(0x12);
1877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUbyte(0xFF);
1887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x00, 0x01, 0x12, 0xFF);
1907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test(expected=ExceptionWithContext.class)
1937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteUbyteOutOfBounds() throws IOException {
1947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUbyte(-1);
1957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
1967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
1977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test(expected=ExceptionWithContext.class)
1987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteUbyteOutOfBounds2() throws IOException {
1997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeUbyte(256);
2007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
2037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteEncodedValueHeader() throws IOException {
2047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeEncodedValueHeader(0x2, 0x1);
2057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x22);
2077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void testWriteEncodedIntHelper(int integerValue, int... encodedValue) throws IOException {
2107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        setup();
2117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeEncodedInt(ValueType.INT, integerValue);
2127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        int[] arr = new int[encodedValue.length+1];
2147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        arr[0] = ValueType.INT | ((encodedValue.length-1) << 5);
2157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length);
2167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
2177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
2207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteEncodedInt() throws IOException {
2217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x00, 0x00);
2227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x40, 0x40);
2237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x7f, 0x7f);
2247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0xff, 0xff, 0x00);
2257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0xffff80, 0x80, 0xff, 0xff, 0x00);
2267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0xffffff80, 0x80);
2277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0xffffffff, 0xff);
2287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x100, 0x00, 0x01);
2297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x7fff, 0xff, 0x7f);
2307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x8000, 0x00, 0x80, 0x00);
2317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0xffff8000, 0x00, 0x80);
2327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x10000, 0x00, 0x00, 0x01);
2337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x10203, 0x03, 0x02, 0x01);
2347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x810203, 0x03, 0x02, 0x81, 0x00);
2357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0xff810203, 0x03, 0x02, 0x81);
2367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x1000000, 0x00, 0x00, 0x00, 0x01);
2377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x1020304, 0x04, 0x03, 0x02, 0x01);
2387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x7fffffff, 0xff, 0xff, 0xff, 0x7f);
2397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x80000000, 0x00, 0x00, 0x00, 0x80);
2407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedIntHelper(0x80000001, 0x01, 0x00, 0x00, 0x80);
2417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void testWriteEncodedUintHelper(int integerValue, int... encodedValue) throws IOException {
2447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        setup();
2457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeEncodedUint(ValueType.METHOD, integerValue);
2467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        int[] arr = new int[encodedValue.length+1];
2487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        arr[0] = ValueType.METHOD | ((encodedValue.length-1) << 5);
2497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length);
2507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
2517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
2547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteEncodedUint() throws IOException {
2557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x00, 0x00);
2567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x01, 0x01);
2577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x40, 0x40);
2587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x7f, 0x7f);
2597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x80, 0x80);
2607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x81, 0x81);
2617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0xff, 0xff);
2627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x100, 0x00, 0x01);
2637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x180, 0x80, 0x01);
2647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x8080, 0x80, 0x80);
2657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x1234, 0x34, 0x12);
2667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x1000, 0x00, 0x10);
2677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x8000, 0x00, 0x80);
2687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0xff00, 0x00, 0xff);
2697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0xffff, 0xff, 0xff);
2707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x10000, 0x00, 0x00, 0x01);
2717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x1ffff, 0xff, 0xff, 0x01);
2727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x80ffff, 0xff, 0xff, 0x80);
2737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0xffffff, 0xff, 0xff, 0xff);
2747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x1000000, 0x00, 0x00, 0x00, 0x01);
2757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x1020304, 0x04, 0x03, 0x02, 0x01);
2767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x80000000, 0x00, 0x00, 0x00, 0x80);
2777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0x80ffffff, 0xff, 0xff, 0xff, 0x80);
2787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedUintHelper(0xffffffff, 0xff, 0xff, 0xff, 0xff);
2797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void testWriteEncodedLongHelper(long longValue, int... encodedValue) throws IOException {
2827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        setup();
2837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeEncodedLong(ValueType.LONG, longValue);
2847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        int[] arr = new int[encodedValue.length+1];
2867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        arr[0] = ValueType.LONG | ((encodedValue.length-1) << 5);
2877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length);
2887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
2897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
2907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
2917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
2927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteEncodedLong() throws IOException {
2937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x00L, 0x00);
2947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x40L, 0x40);
2957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fL, 0x7f);
2967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffL, 0xff, 0x00);
2977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffffffffffff80L, 0x80);
2987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffffffffffffffL, 0xff);
2997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x100L, 0x00, 0x01);
3017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fffL, 0xff, 0x7f);
3027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x8000L, 0x00, 0x80, 0x00);
3037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffffffffff8000L, 0x00, 0x80);
3047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x10000L, 0x00, 0x00, 0x01);
3067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x10203L, 0x03, 0x02, 0x01);
3077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x810203L, 0x03, 0x02, 0x81, 0x00);
3087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffffffff810203L, 0x03, 0x02, 0x81);
3097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x1000000L, 0x00, 0x00, 0x00, 0x01);
3117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x1020304L, 0x04, 0x03, 0x02, 0x01);
3127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fffffffL, 0xff, 0xff, 0xff, 0x7f);
3137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x80000000L, 0x00, 0x00, 0x00, 0x80, 0x00);
3147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffffff80000000L, 0x00, 0x00, 0x00, 0x80);
3157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffffff80000001L, 0x01, 0x00, 0x00, 0x80);
3167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x100000000L, 0x00, 0x00, 0x00, 0x00, 0x01);
3187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x102030405L, 0x05, 0x04, 0x03, 0x02, 0x01);
3197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fffffffffL, 0xff, 0xff, 0xff, 0xff, 0x7f);
3207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x8000000000L, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00);
3217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffff8000000000L, 0x00, 0x00, 0x00, 0x00, 0x80);
3227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffffff8000000001L, 0x01, 0x00, 0x00, 0x00, 0x80);
3237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x10000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01);
3257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x10203040506L, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01);
3267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f);
3277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x800000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00);
3287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffff800000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80);
3297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xffff800000000001L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80);
3307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x1000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01);
3327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x1020304050607L, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01);
3337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fffffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f);
3347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x80000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00);
3357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xff80000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80);
3367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xff80000000000001L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80);
3377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x100000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01);
3397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x102030405060708L, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01);
3407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x7fffffffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f);
3417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x8000000000000000L, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80);
3427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x8000000000000001L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80);
3437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0xfeffffffffffffffL, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe);
3447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteEncodedLongHelper(0x123456789ABCDEF0L, 0xF0, 0xDE, 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12);
3467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
3477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void testWriteRightZeroExtendedIntHelper(int intValue, int... encodedValue) throws IOException {
3497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        setup();
3507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeRightZeroExtendedInt(ValueType.FLOAT, intValue);
3517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        int[] arr = new int[encodedValue.length+1];
3537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        arr[0] = ValueType.FLOAT | ((encodedValue.length-1) << 5);
3547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length);
3557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
3567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
3577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
3597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteRightZeroExtendedInt() throws IOException {
3607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0, 0x00);
3617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x01000000, 0x01);
3637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x7f000000, 0x7f);
3647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x80000000, 0x80);
3657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xf0000000, 0xf0);
3667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xff000000, 0xff);
3677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x010000, 0x01, 0x00);
3697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x01100000, 0x10, 0x01);
3707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x7f100000, 0x10, 0x7f);
3717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x80100000, 0x10, 0x80);
3727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xf0100000, 0x10, 0xf0);
3737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xff100000, 0x10, 0xff);
3747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xff000000, 0xff);
3757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x0100, 0x01, 0x00, 0x00);
3777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x01101000, 0x10, 0x10, 0x01);
3787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x7f101000, 0x10, 0x10, 0x7f);
3797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x80101000, 0x10, 0x10, 0x80);
3807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xf0101000, 0x10, 0x10, 0xf0);
3817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xff101000, 0x10, 0x10, 0xff);
3827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x01, 0x01, 0x00, 0x00, 0x00);
3847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x80, 0x80, 0x00, 0x00, 0x00);
3857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xff, 0xff, 0x00, 0x00, 0x00);
3867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x01101010, 0x10, 0x10, 0x10, 0x01);
3877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x7f101010, 0x10, 0x10, 0x10, 0x7f);
3887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0x80101010, 0x10, 0x10, 0x10, 0x80);
3897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xf0101010, 0x10, 0x10, 0x10, 0xf0);
3907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedIntHelper(0xff101010, 0x10, 0x10, 0x10, 0xff);
3917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
3927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void testWriteRightZeroExtendedLongHelper(long longValue, int... encodedValue) throws IOException {
3947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        setup();
3957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeRightZeroExtendedLong(ValueType.DOUBLE, longValue);
3967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
3977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        int[] arr = new int[encodedValue.length+1];
3987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        arr[0] = ValueType.DOUBLE | ((encodedValue.length-1) << 5);
3997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        System.arraycopy(encodedValue, 0, arr, 1, encodedValue.length);
4007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(arr);
4017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
4027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
4047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteRightZeroExtendedLong() throws IOException {
4057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0, 0x00);
4067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0100000000000000L, 0x01);
4087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f00000000000000L, 0x7f);
4097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8000000000000000L, 0x80);
4107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf000000000000000L, 0xf0);
4117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff00000000000000L, 0xff);
4127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x01000000000000L, 0x01, 0x00);
4147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110000000000000L, 0x10, 0x01);
4157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10000000000000L, 0x10, 0x7f);
4167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010000000000000L, 0x10, 0x80);
4177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010000000000000L, 0x10, 0xf0);
4187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10000000000000L, 0x10, 0xff);
4197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7fff000000000000L, 0xff, 0x7f);
4207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x010000000000L, 0x01, 0x00, 0x00);
4227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110100000000000L, 0x10, 0x10, 0x01);
4237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10100000000000L, 0x10, 0x10, 0x7f);
4247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010100000000000L, 0x10, 0x10, 0x80);
4257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010100000000000L, 0x10, 0x10, 0xf0);
4267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10100000000000L, 0x10, 0x10, 0xff);
4277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7fffff0000000000L, 0xff, 0xff, 0x7f);
4287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0100000000L, 0x01, 0x00, 0x00, 0x00);
4307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110101000000000L, 0x10, 0x10, 0x10, 0x01);
4317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10101000000000L, 0x10, 0x10, 0x10, 0x7f);
4327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010101000000000L, 0x10, 0x10, 0x10, 0x80);
4337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010101000000000L, 0x10, 0x10, 0x10, 0xf0);
4347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10101000000000L, 0x10, 0x10, 0x10, 0xff);
4357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7fffffff00000000L, 0xff, 0xff, 0xff, 0x7f);
4367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x01000000L, 0x01, 0x00, 0x00, 0x00, 0x00);
4387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110101010000000L, 0x10, 0x10, 0x10, 0x10, 0x01);
4397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10101010000000L, 0x10, 0x10, 0x10, 0x10, 0x7f);
4407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010101010000000L, 0x10, 0x10, 0x10, 0x10, 0x80);
4417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010101010000000L, 0x10, 0x10, 0x10, 0x10, 0xf0);
4427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10101010000000L, 0x10, 0x10, 0x10, 0x10, 0xff);
4437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7fffffffff000000L, 0xff, 0xff, 0xff, 0xff, 0x7f);
4447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x010000L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00);
4467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01);
4477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7f);
4487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80);
4497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0);
4507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10101010100000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff);
4517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7fffffffffff0000L, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f);
4527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0100L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
4547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01);
4557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7f);
4567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80);
4577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0);
4587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10101010101000L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff);
4597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7fffffffffffff00L, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f);
4607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x01L, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
4627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x0110101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01);
4637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x7f10101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7f);
4647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0x8010101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80);
4657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xf010101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0);
4667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(0xff10101010101010L, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff);
4677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(Long.MAX_VALUE, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f);
4687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(Long.MIN_VALUE, 0x80);
4697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteRightZeroExtendedLongHelper(-1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
4707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
4717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    private void testWriteStringHelper(String stringValue, int... encodedValue) throws IOException {
4737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        setup();
4747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.writeString(stringValue);
4767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(encodedValue);
4787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
4797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
4817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testWriteString() throws IOException {
4827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x00}), 0xc0, 0x80);
4837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x01}), 0x01);
4847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x40}), 0x40);
4857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x7f}), 0x7f);
4867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x80}), 0xc2, 0x80);
4877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x81}), 0xc2, 0x81);
4887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x100}), 0xc4, 0x80);
4897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x7ff}), 0xdf, 0xbf);
4907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x800}), 0xe0, 0xa0, 0x80);
4917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x801}), 0xe0, 0xa0, 0x81);
4927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x1000}), 0xe1, 0x80, 0x80);
4937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x7fff}), 0xe7, 0xbf, 0xbf);
4947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x8000}), 0xe8, 0x80, 0x80);
4957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0x8001}), 0xe8, 0x80, 0x81);
4967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        testWriteStringHelper(new String(new char[]{0xffff}), 0xef, 0xbf, 0xbf);
4977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
4987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
4997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    @Test
5007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    public void testAlign() throws IOException {
5017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        // create a new writer so we can start at file position 0
5027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        startPosition = 0;
5031bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver        writer = new DexDataWriter(output, startPosition, 256);
5047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
5057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(1);
5077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
5107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(1);
5117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(2);
5127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
5147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(1);
5157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(2);
5167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(3);
5177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
5207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(1);
5217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(2);
5227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(3);
5237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(4);
5247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
5297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.write(1);
5307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        writer.align();
5317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver
5327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver        expectData(0x01, 0x00, 0x00, 0x00,
5337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x01, 0x02, 0x00, 0x00,
5347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x01, 0x02, 0x03, 0x00,
5357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x01, 0x02, 0x03, 0x04,
5367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver                   0x01, 0x00, 0x00, 0x00);
5377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver    }
5387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver}
539