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.util.NakedByteArrayOutputStream; 367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport org.junit.Test; 377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverimport java.io.IOException; 397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruverpublic class DexWriterUleb128Test { 417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private NakedByteArrayOutputStream output = new NakedByteArrayOutputStream(); 427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private int startPosition; 431bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver private DexDataWriter writer; 447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void setup() throws IOException { 467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver output.reset(); 477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver startPosition = 123; 487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver int bufferSize = 256; 491bf6f2324541df184689fdb2c0d8188af5221784Ben Gruver writer = new DexDataWriter(output, startPosition, bufferSize); 507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver @Test 537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver public void testUleb128() throws IOException { 547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x0, new byte[]{0x0, 0x11}, 1); 557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1, new byte[]{0x1, 0x11}, 1); 567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3f, new byte[]{0x3f, 0x11}, 1); 577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x40, new byte[]{0x40, 0x11}, 1); 587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x70, new byte[]{0x70, 0x11}, 1); 597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7f, new byte[]{0x7f, 0x11}, 1); 607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x80, new byte[]{(byte)0x80, 0x1, 0x11}, 2); 627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x100, new byte[]{(byte)0x80, 0x2, 0x11}, 2); 637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x800, new byte[]{(byte)0x80, 0x10, 0x11}, 2); 647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1f80, new byte[]{(byte)0x80, 0x3f, 0x11}, 2); 657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2000, new byte[]{(byte)0x80, 0x40, 0x11}, 2); 667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2080, new byte[]{(byte)0x80, 0x41, 0x11}, 2); 677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3800, new byte[]{(byte)0x80, 0x70, 0x11}, 2); 687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3f80, new byte[]{(byte)0x80, 0x7f, 0x11}, 2); 697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xff, new byte[]{(byte)0xff, 0x1, 0x11}, 2); 717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x17f, new byte[]{(byte)0xff, 0x2, 0x11}, 2); 727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x87f, new byte[]{(byte)0xff, 0x10, 0x11}, 2); 737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1fff, new byte[]{(byte)0xff, 0x3f, 0x11}, 2); 747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x207f, new byte[]{(byte)0xff, 0x40, 0x11}, 2); 757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x20ff, new byte[]{(byte)0xff, 0x41, 0x11}, 2); 767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x387f, new byte[]{(byte)0xff, 0x70, 0x11}, 2); 777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3fff, new byte[]{(byte)0xff, 0x7f, 0x11}, 2); 787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x4000, new byte[]{(byte)0x80, (byte)0x80, 0x1, 0x11}, 3); 807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x8000, new byte[]{(byte)0x80, (byte)0x80, 0x2, 0x11}, 3); 817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x40000, new byte[]{(byte)0x80, (byte)0x80, 0x10, 0x11}, 3); 827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xfc000, new byte[]{(byte)0x80, (byte)0x80, 0x3f, 0x11}, 3); 837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x100000, new byte[]{(byte)0x80, (byte)0x80, 0x40, 0x11}, 3); 847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x104000, new byte[]{(byte)0x80, (byte)0x80, 0x41, 0x11}, 3); 857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1c0000, new byte[]{(byte)0x80, (byte)0x80, 0x70, 0x11}, 3); 867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1fc000, new byte[]{(byte)0x80, (byte)0x80, 0x7f, 0x11}, 3); 877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7fff, new byte[]{(byte)0xff, (byte)0xff, 0x1, 0x11}, 3); 897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xbfff, new byte[]{(byte)0xff, (byte)0xff, 0x2, 0x11}, 3); 907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x43fff, new byte[]{(byte)0xff, (byte)0xff, 0x10, 0x11}, 3); 917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xfffff, new byte[]{(byte)0xff, (byte)0xff, 0x3f, 0x11}, 3); 927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x103fff, new byte[]{(byte)0xff, (byte)0xff, 0x40, 0x11}, 3); 937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x107fff, new byte[]{(byte)0xff, (byte)0xff, 0x41, 0x11}, 3); 947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1c3fff, new byte[]{(byte)0xff, (byte)0xff, 0x70, 0x11}, 3); 957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1fffff, new byte[]{(byte)0xff, (byte)0xff, 0x7f, 0x11}, 3); 967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x200000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x1, 0x11}, 4); 987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x400000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x2, 0x11}, 4); 997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2000000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x10, 0x11}, 4); 1007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7e00000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x3f, 0x11}, 4); 1017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x8000000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x40, 0x11}, 4); 1027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x8200000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x41, 0x11}, 4); 1037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe000000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x70, 0x11}, 4); 1047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xfe00000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x7f, 0x11}, 4); 1057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3fffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x1, 0x11}, 4); 1077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x5fffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x2, 0x11}, 4); 1087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x21fffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x10, 0x11}, 4); 1097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7ffffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x3f, 0x11}, 4); 1107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x81fffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x40, 0x11}, 4); 1117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x83fffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x41, 0x11}, 4); 1127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe1fffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x70, 0x11}, 4); 1137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xfffffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, 0x7f, 0x11}, 4); 1147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x10000000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, (byte)0x80, 0x1, 0x11}, 5); 1167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x20000000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, (byte)0x80, 0x2, 0x11}, 5); 1177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x70000000, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, (byte)0x80, 0x7, 0x11}, 5); 1187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1fffffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff, 0x1, 0x11}, 5); 1207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2fffffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff, 0x2, 0x11}, 5); 1217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7fffffff, new byte[]{(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff, 0x7, 0x11}, 5); 1227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 1237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xcc, new byte[]{(byte)0xcc, 0x1}); 1247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3b67, new byte[]{(byte)0xe7, 0x76}); 1257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1b857589, new byte[]{(byte)0x89, (byte)0xeb, (byte)0x95, (byte)0xdc, 0x1}); 1267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x375d82e5, new byte[]{(byte)0xe5, (byte)0x85, (byte)0xf6, (byte)0xba, 0x3}); 1277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x5524da90, new byte[]{(byte)0x90, (byte)0xb5, (byte)0x93, (byte)0xa9, 0x5}); 1287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x35, new byte[]{0x35}); 1297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xd7, new byte[]{(byte)0xd7, 0x1}); 1307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x63, new byte[]{0x63}); 1317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x22cb5b, new byte[]{(byte)0xdb, (byte)0x96, (byte)0x8b, 0x1}); 1327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x585e, new byte[]{(byte)0xde, (byte)0xb0, 0x1}); 1337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x5d62a965, new byte[]{(byte)0xe5, (byte)0xd2, (byte)0x8a, (byte)0xeb, 0x5}); 1347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x6af172db, new byte[]{(byte)0xdb, (byte)0xe5, (byte)0xc5, (byte)0xd7, 0x6}); 1357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe, new byte[]{0xe}); 1367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xb75f7a, new byte[]{(byte)0xfa, (byte)0xbe, (byte)0xdd, 0x5}); 1377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x8604, new byte[]{(byte)0x84, (byte)0x8c, 0x2}); 1387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x31624026, new byte[]{(byte)0xa6, (byte)0x80, (byte)0x89, (byte)0x8b, 0x3}); 1397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x8d, new byte[]{(byte)0x8d, 0x1}); 1407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc0, new byte[]{(byte)0xc0, 0x1}); 1417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xd7618cb, new byte[]{(byte)0xcb, (byte)0xb1, (byte)0xd8, 0x6b}); 1427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xff, new byte[]{(byte)0xff, 0x1}); 1437dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x5c923e42, new byte[]{(byte)0xc2, (byte)0xfc, (byte)0xc8, (byte)0xe4, 0x5}); 1447dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x91, new byte[]{(byte)0x91, 0x1}); 1457dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xbe0f97, new byte[]{(byte)0x97, (byte)0x9f, (byte)0xf8, 0x5}); 1467dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x88bc786, new byte[]{(byte)0x86, (byte)0x8f, (byte)0xaf, 0x44}); 1477dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x8caa9a, new byte[]{(byte)0x9a, (byte)0xd5, (byte)0xb2, 0x4}); 1487dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x4aee, new byte[]{(byte)0xee, (byte)0x95, 0x1}); 1497dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x438c86, new byte[]{(byte)0x86, (byte)0x99, (byte)0x8e, 0x2}); 1507dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc0, new byte[]{(byte)0xc0, 0x1}); 1517dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xb486, new byte[]{(byte)0x86, (byte)0xe9, 0x2}); 1527dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x83fd, new byte[]{(byte)0xfd, (byte)0x87, 0x2}); 1537dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7b, new byte[]{0x7b}); 1547dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1dc84e14, new byte[]{(byte)0x94, (byte)0x9c, (byte)0xa1, (byte)0xee, 0x1}); 1557dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2dfc, new byte[]{(byte)0xfc, 0x5b}); 1567dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x88, new byte[]{(byte)0x88, 0x1}); 1577dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x919e, new byte[]{(byte)0x9e, (byte)0xa3, 0x2}); 1587dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2fcf, new byte[]{(byte)0xcf, 0x5f}); 1597dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xf00674, new byte[]{(byte)0xf4, (byte)0x8c, (byte)0xc0, 0x7}); 1607dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xed5f7d, new byte[]{(byte)0xfd, (byte)0xbe, (byte)0xb5, 0x7}); 1617dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xdbd9, new byte[]{(byte)0xd9, (byte)0xb7, 0x3}); 1627dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xa1, new byte[]{(byte)0xa1, 0x1}); 1637dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xf6f76c, new byte[]{(byte)0xec, (byte)0xee, (byte)0xdb, 0x7}); 1647dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1eed6f, new byte[]{(byte)0xef, (byte)0xda, 0x7b}); 1657dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x95c, new byte[]{(byte)0xdc, 0x12}); 1667dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1e, new byte[]{0x1e}); 1677dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe5, new byte[]{(byte)0xe5, 0x1}); 1687dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2f2f13, new byte[]{(byte)0x93, (byte)0xde, (byte)0xbc, 0x1}); 1697dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x19, new byte[]{0x19}); 1707dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3f, new byte[]{0x3f}); 1717dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x75e3, new byte[]{(byte)0xe3, (byte)0xeb, 0x1}); 1727dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x67a4c4, new byte[]{(byte)0xc4, (byte)0xc9, (byte)0x9e, 0x3}); 1737dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xb948, new byte[]{(byte)0xc8, (byte)0xf2, 0x2}); 1747dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x34b1c9de, new byte[]{(byte)0xde, (byte)0x93, (byte)0xc7, (byte)0xa5, 0x3}); 1757dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x58f0, new byte[]{(byte)0xf0, (byte)0xb1, 0x1}); 1767dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x0, new byte[]{0x0}); 1777dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x9ab3e5, new byte[]{(byte)0xe5, (byte)0xe7, (byte)0xea, 0x4}); 1787dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x4c4a8a3d, new byte[]{(byte)0xbd, (byte)0x94, (byte)0xaa, (byte)0xe2, 0x4}); 1797dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x99, new byte[]{(byte)0x99, 0x1}); 1807dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1a67e9, new byte[]{(byte)0xe9, (byte)0xcf, 0x69}); 1817dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x5ddb2d, new byte[]{(byte)0xad, (byte)0xb6, (byte)0xf7, 0x2}); 1827dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xeccb680, new byte[]{(byte)0x80, (byte)0xed, (byte)0xb2, 0x76}); 1837dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x6910bbf0, new byte[]{(byte)0xf0, (byte)0xf7, (byte)0xc2, (byte)0xc8, 0x6}); 1847dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc5, new byte[]{(byte)0xc5, 0x1}); 1857dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xdd7225, new byte[]{(byte)0xa5, (byte)0xe4, (byte)0xf5, 0x6}); 1867dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x4561ea2e, new byte[]{(byte)0xae, (byte)0xd4, (byte)0x87, (byte)0xab, 0x4}); 1877dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7f4f08, new byte[]{(byte)0x88, (byte)0x9e, (byte)0xfd, 0x3}); 1887dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x197f, new byte[]{(byte)0xff, 0x32}); 1897dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xb8ad13, new byte[]{(byte)0x93, (byte)0xda, (byte)0xe2, 0x5}); 1907dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3c8d5db4, new byte[]{(byte)0xb4, (byte)0xbb, (byte)0xb5, (byte)0xe4, 0x3}); 1917dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x7e4bdf7d, new byte[]{(byte)0xfd, (byte)0xbe, (byte)0xaf, (byte)0xf2, 0x7}); 1927dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1e8e23, new byte[]{(byte)0xa3, (byte)0x9c, 0x7a}); 1937dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1602, new byte[]{(byte)0x82, 0x2c}); 1947dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe2, new byte[]{(byte)0xe2, 0x1}); 1957dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x38e9, new byte[]{(byte)0xe9, 0x71}); 1967dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xbf8665, new byte[]{(byte)0xe5, (byte)0x8c, (byte)0xfe, 0x5}); 1977dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x43, new byte[]{0x43}); 1987dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc9d96c, new byte[]{(byte)0xec, (byte)0xb2, (byte)0xa7, 0x6}); 1997dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x4bd170, new byte[]{(byte)0xf0, (byte)0xa2, (byte)0xaf, 0x2}); 2007dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x86c11b, new byte[]{(byte)0x9b, (byte)0x82, (byte)0x9b, 0x4}); 2017dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x1a2611e7, new byte[]{(byte)0xe7, (byte)0xa3, (byte)0x98, (byte)0xd1, 0x1}); 2027dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xff2f6a, new byte[]{(byte)0xea, (byte)0xde, (byte)0xfc, 0x7}); 2037dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x6f051635, new byte[]{(byte)0xb5, (byte)0xac, (byte)0x94, (byte)0xf8, 0x6}); 2047dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x75bf, new byte[]{(byte)0xbf, (byte)0xeb, 0x1}); 2057dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe8ce45, new byte[]{(byte)0xc5, (byte)0x9c, (byte)0xa3, 0x7}); 2067dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2946a1d8, new byte[]{(byte)0xd8, (byte)0xc3, (byte)0x9a, (byte)0xca, 0x2}); 2077dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xe2, new byte[]{(byte)0xe2, 0x1}); 2087dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x44ee, new byte[]{(byte)0xee, (byte)0x89, 0x1}); 2097dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x447a, new byte[]{(byte)0xfa, (byte)0x88, 0x1}); 2107dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x917, new byte[]{(byte)0x97, 0x12}); 2117dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x25, new byte[]{0x25}); 2127dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x52c2b8eb, new byte[]{(byte)0xeb, (byte)0xf1, (byte)0x8a, (byte)0x96, 0x5}); 2137dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x17dabee4, new byte[]{(byte)0xe4, (byte)0xfd, (byte)0xea, (byte)0xbe, 0x1}); 2147dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x9d6a, new byte[]{(byte)0xea, (byte)0xba, 0x2}); 2157dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc4b12d, new byte[]{(byte)0xad, (byte)0xe2, (byte)0x92, 0x6}); 2167dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc9561d, new byte[]{(byte)0x9d, (byte)0xac, (byte)0xa5, 0x6}); 2177dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x88a7, new byte[]{(byte)0xa7, (byte)0x91, 0x2}); 2187dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x527d8f7a, new byte[]{(byte)0xfa, (byte)0x9e, (byte)0xf6, (byte)0x93, 0x5}); 2197dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x2c31, new byte[]{(byte)0xb1, 0x58}); 2207dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0x3b8c, new byte[]{(byte)0x8c, 0x77}); 2217dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xc228, new byte[]{(byte)0xa8, (byte)0x84, 0x3}); 2227dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(0xd730d3, new byte[]{(byte)0xd3, (byte)0xe1, (byte)0xdc, 0x6}); 2237dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2247dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2257dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void performTest(int integerValue, byte[] encodedValue) throws IOException { 2267dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver performTest(integerValue, encodedValue, encodedValue.length); 2277dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2287dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2297dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver private void performTest(int integerValue, byte[] encodedValue, int encodedLength) throws IOException { 2307dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver setup(); 2317dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2327dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.writeUleb128(integerValue); 2337dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver writer.flush(); 2347dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2357dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver byte[] writtenData = output.getBuffer(); 2367dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver 2377dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver Assert.assertEquals(startPosition + encodedLength, writer.getPosition()); 2387dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver for (int i=0; i<encodedLength; i++) { 2397dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver Assert.assertEquals(String.format("Values not equal at index %d", i), encodedValue[i], writtenData[i]); 2407dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2417dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver } 2427dff6ada5eda987642ad6170e4ebc2e136c7f652Ben Gruver} 243