LEB128Test.cpp revision affc150dc44fab1911775a49636d0ce85333b634
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- implTest.cpp -------------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/LEB128.h> 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "LEB128Test.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <ctime> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cstdlib> 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLEB128Test::LEB128Test() 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Initialize the seed for random number generator using during the tests. 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ::srandom(::time(NULL)); 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLEB128Test::~LEB128Test() 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid LEB128Test::SetUp() 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid LEB128Test::TearDown() 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, EncodeULEB_Example_from_Dwarf3_Figure22_Using_32bits) { 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[2]; 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 2); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 2); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 127); 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 127); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 128); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0 + 0x80); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 129); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1 + 0x80); 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 130); 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 2 + 0x80); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 12857); 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 57 + 0x80); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 100); 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, EncodeULEB_Example_from_Dwarf3_Figure22_Using_64bits) { 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[2]; 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 2); 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 2); 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 127); 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 127); 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 128); 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0 + 0x80); 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 129); 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1 + 0x80); 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 130); 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 2 + 0x80); 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 12857); 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 57 + 0x80); 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 100); 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, EncodeSLEB_Example_from_Dwarf3_Figure22) { 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[2]; 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, 2); 1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 2); 1455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, -2); 1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x7e); 1515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 1535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, 127); 1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 127 + 0x80); 1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0); 1585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, -127); 1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1 + 0x80); 1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x7f); 1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, 128); 1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0 + 0x80); 1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, -128); 1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0 + 0x80); 1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x7f); 1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, 129); 1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1 + 0x80); 1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 1); 1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, -129); 1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x7f + 0x80); 1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x7e); 1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 1955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, DecodeULEB_Example_from_Dwarf3_Figure22) { 1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[2]; 1995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 2005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 2; 2025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0; 2035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 2); 2045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 2055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 127; 2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0; 2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 127); 2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 2105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 0 + 0x80; 2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 1; 2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 128); 2145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 1 + 0x80; 2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 1; 2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 129); 2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 2 + 0x80; 2225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 1; 2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 130); 2245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 57 + 0x80; 2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 100; 2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 12857); 2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, DecodeSLEB_Example_from_Dwarf3_Figure22) { 2345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[2]; 2355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 2365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 2; 2385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0; 2395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), 2); 2405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 2415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 0x7e; 2435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0; 2445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), -2); 2455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 2465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 127 + 0x80; 2485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0; 2495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), 127); 2505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 1 + 0x80; 2535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0x7f; 2545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), -127); 2555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 0 + 0x80; 2585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 1; 2595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), 128); 2605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 0 + 0x80; 2635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0x7f; 2645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), -128); 2655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 1 + 0x80; 2685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 1; 2695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), 129); 2705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[0] = 0x7f + 0x80; 2735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao buffer[1] = 0x7e; 2745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, size), -129); 2755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 2765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, DecodeULEB_Tests_Found_in_Android_dalvik_dx) { 2795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType content[2]; 2805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const leb128::ByteType *p; 2815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 0; 2835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 2845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(p), 0); 2855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 1); 2865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 1; 2885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 2895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(p), 1); 2905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 1); 2915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 0x80; 2935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[1] = 0x7f; 2945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 2955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(p), 16256); 2965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 2); 2975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, EncodeULEB_Tests_Found_in_Android_dalvik_dx) { 3005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[5]; 3015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 3025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 3035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 0); 3065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0); 3075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 3085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 3095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 0); 3125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0); 3135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 3145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 3155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 1); 3185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1); 3195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 3205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 3215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 1); 3245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1); 3255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 3265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 3275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 16256); 3305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x80); 3315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x7f); 3325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 3335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 3345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 16256); 3375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x80); 3385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x7f); 3395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 3405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 3415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 0x3b4); 3445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0xb4); 3455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x07); 3465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 3475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 3485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 0x3b4); 3515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0xb4); 3525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x07); 3535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 3545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 3555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 0x40c); 3585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x8c); 3595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x08); 3605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 3615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 3625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 0x40c); 3655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x8c); 3665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0x08); 3675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 2); 3685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 2); 3695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint32_t>(result, 0xffffffff); 3725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0xff); 3735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0xff); 3745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[2], 0xff); 3755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[3], 0xff); 3765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[4], 0xf); 3775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 5); 3785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 5); 3795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 3815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<uint64_t>(result, 0xffffffff); 3825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0xff); 3835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0xff); 3845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[2], 0xff); 3855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[3], 0xff); 3865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[4], 0xf); 3875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 5); 3885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 5); 3895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, DecodeSLEB_Tests_Found_in_Android_dalvik_dx) { 3925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType content[2]; 3935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const leb128::ByteType *p; 3945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 0; 3965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 3975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(p), 0); 3985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 1); 3995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 1; 4015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 4025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(p), 1); 4035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 1); 4045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 0x7f; 4065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 4075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(p), -1); 4085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 1); 4095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao content[0] = 0x3c; 4115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao p = content; 4125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(p), 0x3c); 4135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, content + 1); 4145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, EncodeSLEB_Tests_Found_in_Android_dalvik_dx) { 4175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[5]; 4185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 4195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 4205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, 0); 4235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0); 4245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 4255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 4265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int64_t>(result, 0); 4295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0); 4305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 4315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 4325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, 1); 4355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1); 4365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 4375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 4385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int64_t>(result, 1); 4415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 1); 4425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 4435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 4445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int32_t>(result, -1); 4475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x7f); 4485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 4495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 4505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size = leb128::encode<int64_t>(result, -1); 4535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0x7f); 4545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 1); 4555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 1); 4565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, Random_Regression_Test) { 459affc150dc44fab1911775a49636d0ce85333b634Zonr Chang leb128::ByteType buffer[9]; 4605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (int i = 0; i < 20; i++) { 4625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao long int value = random(); 4635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint64_t value2 = value * value; 4645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 4655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t encode_size, decode_size; 4665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Test encode<uint32_t> and decode<uint64_t> on value 4685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao encode_size = leb128::encode<uint32_t>(result, value); 4705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + encode_size); 4715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, decode_size), value); 4725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(encode_size, decode_size); 4735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Test encode<uint64_t> and decode<uint64_t> on (value * value) 4755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao encode_size = leb128::encode<uint64_t>(result, value2); 4775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + encode_size); 4785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, decode_size), value2); 4795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(encode_size, decode_size); 4805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Test encode<uint64_t> and decode<uint64_t> on (value * value) 4825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao encode_size = leb128::encode<int64_t>(result, value2); 4845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + encode_size); 4855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, decode_size), value2); 4865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(encode_size, decode_size); 4875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Test encode<uint64_t> and decode<uint64_t> on -(value * value) 4895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 4905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao encode_size = leb128::encode<int64_t>(result, -value2); 4915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + encode_size); 4925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<int64_t>(buffer, decode_size), -value2); 4935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(encode_size, decode_size); 4945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 4955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, Other_Test) { 4985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType buffer[5]; 4995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::ByteType *result; 5005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 5015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 5035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::encode<uint64_t>(result, 154452); 5045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 3); 5055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], 0xd4); 5065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], 0xb6); 5075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[2], 0x9); 5085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 154452); 5105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 3); 5115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 5125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( LEB128Test, Type_Conversion_Test) { 5145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao char buffer[5]; 5155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao char *result; 5165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t size; 5175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao result = buffer; 5195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao leb128::encode<uint64_t>(result, 154452); 5205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(result, buffer + 3); 5215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[0], '\xd4'); 5225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[1], '\xb6'); 5235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(buffer[2], '\x09'); 5245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(buffer, size), 154452); 5265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(size, 3); 5275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const char *p = buffer; 5295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(leb128::decode<uint64_t>(p), 154452); 5305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(p, buffer + 3); 5315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 532