143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers/* 243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * Copyright (C) 2014 The Android Open Source Project 343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * 443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * you may not use this file except in compliance with the License. 643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * You may obtain a copy of the License at 743b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * 843b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * http://www.apache.org/licenses/LICENSE-2.0 943b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * 1043b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * Unless required by applicable law or agreed to in writing, software 1143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * distributed under the License is distributed on an "AS IS" BASIS, 1243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * See the License for the specific language governing permissions and 1443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers * limitations under the License. 1543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers */ 1643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 1743b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers#include "hex_dump.h" 1843b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 1943b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers#include "globals.h" 2043b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 2143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers#include "gtest/gtest.h" 2243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 2343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers#include <stdint.h> 2443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 2543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogersnamespace art { 2643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 27cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe#if defined(__LP64__) 28cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe#define ZEROPREFIX "00000000" 29cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe#else 30cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe#define ZEROPREFIX 31cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe#endif 32cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe 3343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan RogersTEST(HexDump, OneLine) { 3443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers const char* test_text = "0123456789abcdef"; 3543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers std::ostringstream oss; 3643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers oss << HexDump(test_text, strlen(test_text), false, ""); 3743b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers EXPECT_STREQ(oss.str().c_str(), 38cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe ZEROPREFIX 3943b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers "00000000: 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 0123456789abcdef"); 4043b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers} 4143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 4243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan RogersTEST(HexDump, MultiLine) { 4343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers const char* test_text = "0123456789abcdef0123456789ABCDEF"; 4443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers std::ostringstream oss; 4543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers oss << HexDump(test_text, strlen(test_text), false, ""); 4643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers EXPECT_STREQ(oss.str().c_str(), 47cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe ZEROPREFIX 4843b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers "00000000: 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 0123456789abcdef\n" 49cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe ZEROPREFIX 5043b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers "00000010: 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF"); 5143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers} 5243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 5343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogersuint64_t g16byte_aligned_number __attribute__ ((aligned(16))); // NOLINT(whitespace/parens) 5443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan RogersTEST(HexDump, ShowActualAddresses) { 5543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers g16byte_aligned_number = 0x6162636465666768; 5643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers std::ostringstream oss; 5743b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers oss << HexDump(&g16byte_aligned_number, 8, true, ""); 5843b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers // Compare ignoring pointer. 5943b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers EXPECT_STREQ(oss.str().c_str() + (kBitsPerWord / 4), 6043b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers ": 68 67 66 65 64 63 62 61 hgfedcba "); 6143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers} 6243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 6343b2e0f9105848da6470458e7c04bf1fd7fcb25cIan RogersTEST(HexDump, Prefix) { 6443b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers const char* test_text = "0123456789abcdef"; 6543b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers std::ostringstream oss; 6643b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers oss << HexDump(test_text, strlen(test_text), false, "test prefix: "); 6743b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers EXPECT_STREQ(oss.str().c_str(), 68cfa5c4805b9e756aaa142047306bad2b13107834Andreas Gampe "test prefix: " ZEROPREFIX "00000000: 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 " 6943b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers "0123456789abcdef"); 7043b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers} 7143b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers 7243b2e0f9105848da6470458e7c04bf1fd7fcb25cIan Rogers} // namespace art 73