Attention handler stringstream refactor

Signed-off-by: austinfcui <austinfcui@gmail.com>
Change-Id: Ifaacbe18aa87d73a5fd907cb8682c42726b040cc
diff --git a/attn/ti_handler.cpp b/attn/ti_handler.cpp
index 1dffed9..0ae0db8 100644
--- a/attn/ti_handler.cpp
+++ b/attn/ti_handler.cpp
@@ -1,3 +1,5 @@
+#include <fmt/format.h>
+
 #include <attn/attn_common.hpp>
 #include <attn/attn_dbus.hpp>
 #include <attn/attn_dump.hpp>
@@ -182,13 +184,10 @@
             tiAdditionalData["Subsystem"] = std::to_string(
                 static_cast<uint8_t>(pel::SubsystemID::hostboot));
 
-            // TODO: will update as part of other story.
             // Translate hex src value to ascii. This results in an 8
             // character SRC (hostboot SRC is 32 bits)
-            std::stringstream src;
-            src << std::setw(8) << std::setfill('0') << std::uppercase
-                << std::hex << be32toh(i_tiDataArea->srcWord12HbWord0);
-            tiAdditionalData["SrcAscii"] = src.str();
+            tiAdditionalData["SrcAscii"] =
+                fmt::format("{:08X}", be32toh(i_tiDataArea->srcWord12HbWord0));
 
             // dump flag is only valid for TI with EID (not TI with SRC)
             trace::inf("Ignoring TI info dump flag for HB TI with SRC");
@@ -255,78 +254,61 @@
         return;
     }
 
-    // TODO: will update as part of other story.
-    std::stringstream ss;
-
-    ss << "0x00 TI Area Valid:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->tiAreaValid << ":";
-    ss << "0x01 Command:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->command << ":";
-    ss << "0x02 Num. Data Bytes:" << std::setw(4) << std::setfill('0')
-       << std::hex << be16toh(i_tiDataArea->numDataBytes) << ":";
-    ss << "0x04 Reserved:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->reserved1 << ":";
-    ss << "0x06 HWDump Type:" << std::setw(4) << std::setfill('0') << std::hex
-       << be16toh(i_tiDataArea->hardwareDumpType) << ":";
-    ss << "0x08 SRC Format:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->srcFormat << ":";
-    ss << "0x09 SRC Flags:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->srcFlags << ":";
-    ss << "0x0a Num. ASCII Words:" << std::setw(2) << std::setfill('0')
-       << std::hex << (int)i_tiDataArea->numAsciiWords << ":";
-    ss << "0x0b Num. Hex Words:" << std::setw(2) << std::setfill('0')
-       << std::hex << (int)i_tiDataArea->numHexWords << ":";
-    ss << "0x0e Length of SRC:" << std::setw(4) << std::setfill('0') << std::hex
-       << be16toh(i_tiDataArea->lenSrc) << ":";
-    ss << "0x10 SRC Word 12:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord12HbWord0) << ":";
-    ss << "0x14 SRC Word 13:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord13HbWord2) << ":";
-    ss << "0x18 SRC Word 14:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord14HbWord3) << ":";
-    ss << "0x1c SRC Word 15:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord15HbWord4) << ":";
-    ss << "0x20 SRC Word 16:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord16HbWord5) << ":";
-    ss << "0x24 SRC Word 17:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord17HbWord6) << ":";
-    ss << "0x28 SRC Word 18:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord18HbWord7) << ":";
-    ss << "0x2c SRC Word 19:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord19HbWord8) << ":";
-    ss << "0x30 ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData0) << ":";
-    ss << "0x34 ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData1) << ":";
-    ss << "0x38 ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData2) << ":";
-    ss << "0x3c ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData3) << ":";
-    ss << "0x40 ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData4) << ":";
-    ss << "0x44 ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData5) << ":";
-    ss << "0x48 ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData6) << ":";
-    ss << "0x4c ASCII Data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData7) << ":";
-    ss << "0x50 Location:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->location << ":";
-    ss << "0x51 Code Sections:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->codeSection << ":";
-    ss << "0x52 Additional Size:" << std::setw(2) << std::setfill('0')
-       << std::hex << (int)i_tiDataArea->additionalSize << ":";
-    ss << "0x53 Additional Data:" << std::setw(2) << std::setfill('0')
-       << std::hex << (int)i_tiDataArea->andData;
-
-    std::string key, value;
-    char delim = ':';
-
-    while (std::getline(ss, key, delim))
-    {
-        std::getline(ss, value, delim);
-        i_map[key] = value;
-    }
+    i_map["0x00 TI Area Valid"] =
+        fmt::format("{:02x}", i_tiDataArea->tiAreaValid);
+    i_map["0x01 Command"] = fmt::format("{:02x}", i_tiDataArea->command);
+    i_map["0x02 Num. Data Bytes"] =
+        fmt::format("{:04x}", be16toh(i_tiDataArea->numDataBytes));
+    i_map["0x04 Reserved"] = fmt::format("{:02x}", i_tiDataArea->reserved1);
+    i_map["0x06 HWDump Type"] =
+        fmt::format("{:04x}", be16toh(i_tiDataArea->hardwareDumpType));
+    i_map["0x08 SRC Format"] = fmt::format("{:02x}", i_tiDataArea->srcFormat);
+    i_map["0x09 SRC Flags"]  = fmt::format("{:02x}", i_tiDataArea->srcFlags);
+    i_map["0x0a Num. ASCII Words"] =
+        fmt::format("{:02x}", i_tiDataArea->numAsciiWords);
+    i_map["0x0b Num. Hex Words"] =
+        fmt::format("{:02x}", i_tiDataArea->numHexWords);
+    i_map["0x0e Length of SRC"] =
+        fmt::format("{:04x}", be16toh(i_tiDataArea->lenSrc));
+    i_map["0x10 SRC Word 12"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord12HbWord0));
+    i_map["0x14 SRC Word 13"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord13HbWord2));
+    i_map["0x18 SRC Word 14"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord14HbWord3));
+    i_map["0x1c SRC Word 15"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord15HbWord4));
+    i_map["0x20 SRC Word 16"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord16HbWord5));
+    i_map["0x24 SRC Word 17"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord17HbWord6));
+    i_map["0x28 SRC Word 18"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord18HbWord7));
+    i_map["0x2c SRC Word 19"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord19HbWord8));
+    i_map["0x30 ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData0));
+    i_map["0x34 ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData1));
+    i_map["0x38 ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData2));
+    i_map["0x3c ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData3));
+    i_map["0x40 ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData4));
+    i_map["0x44 ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData5));
+    i_map["0x48 ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData6));
+    i_map["0x4c ASCII Data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData7));
+    i_map["0x50 Location"] = fmt::format("{:02x}", i_tiDataArea->location);
+    i_map["0x51 Code Sections"] =
+        fmt::format("{:02x}", i_tiDataArea->codeSection);
+    i_map["0x52 Additional Size"] =
+        fmt::format("{:02x}", i_tiDataArea->additionalSize);
+    i_map["0x53 Additional Data"] =
+        fmt::format("{:02x}", i_tiDataArea->andData);
 }
 
 /** @brief Parse the TI info data area into map as hostboot data */
@@ -338,48 +320,34 @@
         return;
     }
 
-    // TODO: will update as part of other story.
-    std::stringstream ss;
-
-    ss << "0x00 TI Area Valid:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->tiAreaValid << ":";
-    ss << "0x04 Reserved:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->reserved1 << ":";
-    ss << "0x05 HB_Term. Type:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->hbTerminateType << ":";
-    ss << "0x0c HB Dump Flag:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->hbDumpFlag << ":";
-    ss << "0x0d Source:" << std::setw(2) << std::setfill('0') << std::hex
-       << (int)i_tiDataArea->source << ":";
-    ss << "0x10 HB Word 0:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord12HbWord0) << ":";
-    ss << "0x14 HB Word 2:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord13HbWord2) << ":";
-    ss << "0x18 HB Word 3:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord14HbWord3) << ":";
-    ss << "0x1c HB Word 4:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord15HbWord4) << ":";
-    ss << "0x20 HB Word 5:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord16HbWord5) << ":";
-    ss << "0x24 HB Word 6:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord17HbWord6) << ":";
-    ss << "0x28 HB Word 7:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord18HbWord7) << ":";
-    ss << "0x2c HB Word 8:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->srcWord19HbWord8) << ":";
-    ss << "0x30 error_data:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData0) << ":";
-    ss << "0x34 EID:" << std::setw(8) << std::setfill('0') << std::hex
-       << be32toh(i_tiDataArea->asciiData1);
-
-    std::string key, value;
-    char delim = ':';
-
-    while (std::getline(ss, key, delim))
-    {
-        std::getline(ss, value, delim);
-        i_map[key] = value;
-    }
+    i_map["0x00 TI Area Valid"] =
+        fmt::format("{:02x}", i_tiDataArea->tiAreaValid);
+    i_map["0x04 Reserved"] = fmt::format("{:02x}", i_tiDataArea->reserved1);
+    i_map["0x05 HB_Term. Type"] =
+        fmt::format("{:02x}", i_tiDataArea->hbTerminateType);
+    i_map["0x0c HB Dump Flag"] =
+        fmt::format("{:02x}", i_tiDataArea->hbDumpFlag);
+    i_map["0x0d Source"] = fmt::format("{:02x}", i_tiDataArea->source);
+    i_map["0x10 HB Word 0"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord12HbWord0));
+    i_map["0x14 HB Word 2"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord13HbWord2));
+    i_map["0x18 HB Word 3"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord14HbWord3));
+    i_map["0x1c HB Word 4"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord15HbWord4));
+    i_map["0x20 HB Word 5"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord16HbWord5));
+    i_map["0x24 HB Word 6"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord17HbWord6));
+    i_map["0x28 HB Word 7"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord18HbWord7));
+    i_map["0x2c HB Word 8"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord19HbWord8));
+    i_map["0x30 error_data"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData0));
+    i_map["0x34 EID"] =
+        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData1));
 }
 
 } // namespace attn
diff --git a/test/meson.build b/test/meson.build
index 87449a7..8a17b52 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -202,3 +202,22 @@
 
 test(tc, exe, env: var)
 
+################################################################################
+
+tc = 'test-ti-handler'
+
+src = [
+  files(
+    tc + '.cpp',
+  ),
+]
+
+dep = [ gtest_dep ]
+
+var = [ ]
+
+exe = executable(tc.underscorify(), src, dependencies: dep,
+                 link_with : hwdiags_libs,
+                 cpp_args: test_arg, include_directories: incdir)
+
+test(tc, exe, env: var)
diff --git a/test/test-ti-handler.cpp b/test/test-ti-handler.cpp
new file mode 100644
index 0000000..5941985
--- /dev/null
+++ b/test/test-ti-handler.cpp
@@ -0,0 +1,137 @@
+#include <attn/ti_handler.hpp>
+#include <util/trace.hpp>
+
+#include <map>
+#include <string>
+
+#include "gtest/gtest.h"
+
+namespace
+{
+uint8_t tiInfo[0x58] = {
+    0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
+    0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
+    0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c,
+    0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+    0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
+    0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
+    0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b};
+} // namespace
+
+TEST(TiHandler, TestSet1)
+{
+    trace::inf("TestSet1: will test ti handler.");
+
+    std::map<std::string, std::string> tiMap;
+    attn::TiDataArea* tiData = (attn::TiDataArea*)tiInfo;
+
+    trace::inf("Set values in tiData to the map by parsePhypOpalTiInfo().");
+    attn::parsePhypOpalTiInfo(tiMap, tiData);
+
+    // tiAreaValid, offset: 0x00, size: 1, 0x2c
+    EXPECT_EQ(tiMap["0x00 TI Area Valid"], "2c");
+    // command, offset: 0x01, size: 1, 0x2d
+    EXPECT_EQ(tiMap["0x01 Command"], "2d");
+    // numDataBytes, offset: 0x02, size: 2, 0x2e 0x2f
+    EXPECT_EQ(tiMap["0x02 Num. Data Bytes"], "2e2f");
+    // reserved1, offset: 0x04, size: 1, 0x30
+    EXPECT_EQ(tiMap["0x04 Reserved"], "30");
+    // hardwareDumpType, offset: 0x06, size: 2, 0x32 0x33
+    EXPECT_EQ(tiMap["0x06 HWDump Type"], "3233");
+    // srcFormat, offset: 0x08, size: 1, 0x34
+    EXPECT_EQ(tiMap["0x08 SRC Format"], "34");
+    // srcFlags, offset: 0x09, size: 1, 0x35
+    EXPECT_EQ(tiMap["0x09 SRC Flags"], "35");
+    // numAsciiWords, offset: 0x0a, size: 1, 0x36
+    EXPECT_EQ(tiMap["0x0a Num. ASCII Words"], "36");
+    // numHexWords, offset: 0x0b, size: 1, 0x37
+    EXPECT_EQ(tiMap["0x0b Num. Hex Words"], "37");
+    // lenSrc, offset: 0x0e, size: 2, 0x3a 0x3b
+    EXPECT_EQ(tiMap["0x0e Length of SRC"], "3a3b");
+    // srcWord12HbWord0, offset: 0x10, size: 4, 0x3c 0x3d 0x3e 0x3f
+    EXPECT_EQ(tiMap["0x10 SRC Word 12"], "3c3d3e3f");
+    // srcWord13HbWord2, offset: 0x14, size: 4, 0x40 0x41 0x42 0x43
+    EXPECT_EQ(tiMap["0x14 SRC Word 13"], "40414243");
+    // srcWord14HbWord3, offset: 0x18, size: 4, 0x44 0x45 0x46 0x47
+    EXPECT_EQ(tiMap["0x18 SRC Word 14"], "44454647");
+    // srcWord15HbWord4, offset: 0x1c, size: 4, 0x48 0x49 0x4a 0x4b
+    EXPECT_EQ(tiMap["0x1c SRC Word 15"], "48494a4b");
+    // srcWord16HbWord5, offset: 0x20, size: 4, 0x4c 0x4d 0x4e 0x4f
+    EXPECT_EQ(tiMap["0x20 SRC Word 16"], "4c4d4e4f");
+    // srcWord17HbWord6, offset: 0x24, size: 4, 0x50 0x51 0x52 0x53
+    EXPECT_EQ(tiMap["0x24 SRC Word 17"], "50515253");
+    // srcWord18HbWord7, offset: 0x28, size: 4, 0x54 0x55 0x56 0x57
+    EXPECT_EQ(tiMap["0x28 SRC Word 18"], "54555657");
+    // srcWord19HbWord8, offset: 0x2c, size: 4, 0x00 0x01 0x02 0x03
+    EXPECT_EQ(tiMap["0x2c SRC Word 19"], "00010203");
+    // asciiData0, offset: 0x30, size: 4, 0x04 0x05 0x06 0x07
+    EXPECT_EQ(tiMap["0x30 ASCII Data"], "04050607");
+    // asciiData1, offset: 0x34, size: 4, 0x08 0x09 0x0a 0x0b
+    EXPECT_EQ(tiMap["0x34 ASCII Data"], "08090a0b");
+    // asciiData2, offset: 0x38, size: 4, 0x0c 0x0d 0x0e 0x0f
+    EXPECT_EQ(tiMap["0x38 ASCII Data"], "0c0d0e0f");
+    // asciiData3, offset: 0x3c, size: 4, 0x10 0x11 0x12 0x13
+    EXPECT_EQ(tiMap["0x3c ASCII Data"], "10111213");
+    // asciiData4, offset: 0x40, size: 4, 0x14 0x15 0x16 0x17
+    EXPECT_EQ(tiMap["0x40 ASCII Data"], "14151617");
+    // asciiData5, offset: 0x44, size: 4, 0x18 0x19 0x1a 0x1b
+    EXPECT_EQ(tiMap["0x44 ASCII Data"], "18191a1b");
+    // asciiData6, offset: 0x48, size: 4, 0x1c 0x1d 0x1e 0x1f
+    EXPECT_EQ(tiMap["0x48 ASCII Data"], "1c1d1e1f");
+    // asciiData7, offset: 0x4c, size: 4, 0x20 0x21 0x22 0x23
+    EXPECT_EQ(tiMap["0x4c ASCII Data"], "20212223");
+    // location, offset: 0x50, size: 1, 0x24
+    EXPECT_EQ(tiMap["0x50 Location"], "24");
+    // codeSection, offset: 0x51, size: 1, 0x25
+    EXPECT_EQ(tiMap["0x51 Code Sections"], "25");
+    // additionalSize, offset: 0x52, size: 1, 0x26
+    EXPECT_EQ(tiMap["0x52 Additional Size"], "26");
+    // andData, offset: 0x53, size: 1, 0x27
+    EXPECT_EQ(tiMap["0x53 Additional Data"], "27");
+}
+
+TEST(TiHandler, TestSet2)
+{
+    trace::inf("TestSet2: will test ti handler.");
+
+    attn::TiDataArea* tiData = nullptr;
+    std::map<std::string, std::string> tiMap;
+
+    // Use the pre-defined array as test data.
+    tiData = (attn::TiDataArea*)tiInfo;
+
+    trace::inf("Set values in tiData to the map by defaultHbTiInfo().");
+    attn::parseHbTiInfo(tiMap, tiData);
+
+    // tiAreaValid, offset: 0x00, size: 1, 0x2c
+    EXPECT_EQ(tiMap["0x00 TI Area Valid"], "2c");
+    // reserved1, offset: 0x04, size: 1, 0x30
+    EXPECT_EQ(tiMap["0x04 Reserved"], "30");
+    // hbTerminateType, offset: 0x05, size: 1, 0x31
+    EXPECT_EQ(tiMap["0x05 HB_Term. Type"], "31");
+    // hbDumpFlag, offset: 0x0c, size: 1, 0x38
+    EXPECT_EQ(tiMap["0x0c HB Dump Flag"], "38");
+    // source, offset: 0x0d, size: 1, 0x39
+    EXPECT_EQ(tiMap["0x0d Source"], "39");
+    // srcWord12HbWord0, offset: 0x10, size: 4, 0x3c 0x3d 0x3e 0x3f
+    EXPECT_EQ(tiMap["0x10 HB Word 0"], "3c3d3e3f");
+    // srcWord13HbWord2, offset: 0x14, size: 4, 0x40 0x41 0x42 0x43
+    EXPECT_EQ(tiMap["0x14 HB Word 2"], "40414243");
+    // srcWord14HbWord3, offset: 0x18, size: 4, 0x44 0x45 0x46 0x47
+    EXPECT_EQ(tiMap["0x18 HB Word 3"], "44454647");
+    // srcWord15HbWord4, offset: 0x1c, size: 4, 0x48 0x49 0x4a 0x4b
+    EXPECT_EQ(tiMap["0x1c HB Word 4"], "48494a4b");
+    // srcWord16HbWord5, offset: 0x20, size: 4, 0x4c 0x4d 0x4e 0x4f
+    EXPECT_EQ(tiMap["0x20 HB Word 5"], "4c4d4e4f");
+    // srcWord17HbWord6, offset: 0x24, size: 4, 0x50 0x51 0x52 0x53
+    EXPECT_EQ(tiMap["0x24 HB Word 6"], "50515253");
+    // srcWord18HbWord7, offset: 0x28, size: 4, 0x54 0x55 0x56 0x57
+    EXPECT_EQ(tiMap["0x28 HB Word 7"], "54555657");
+    // srcWord19HbWord8, offset: 0x2c, size: 4, 0x00 0x01 0x02 0x03
+    EXPECT_EQ(tiMap["0x2c HB Word 8"], "00010203");
+    // asciiData0, offset: 0x30, size: 4, 0x04 0x05 0x06 0x07
+    EXPECT_EQ(tiMap["0x30 error_data"], "04050607");
+    // asciiData1, offset: 0x34, size: 4, 0x08 0x09 0x0a 0x0b
+    EXPECT_EQ(tiMap["0x34 EID"], "08090a0b");
+}