aboutsummaryrefslogtreecommitdiff
path: root/openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp')
-rw-r--r--openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp530
1 files changed, 530 insertions, 0 deletions
diff --git a/openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp b/openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp
new file mode 100644
index 0000000..fcd8956
--- /dev/null
+++ b/openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp
@@ -0,0 +1,530 @@
+#include "InternalEvent.h"
+#include <omp-tools.h>
+#include <sstream>
+
+#include "gtest/gtest.h"
+
+using namespace omptest;
+
+TEST(InternalEvent_toString, AssertionSyncPoint) {
+ internal::AssertionSyncPoint SP{/*Name=*/"Test Sync Point"};
+
+ EXPECT_EQ(SP.toString(), "Assertion SyncPoint: 'Test Sync Point'");
+}
+
+TEST(InternalEvent_toString, ThreadBegin) {
+ internal::ThreadBegin TB{/*ThreadType=*/ompt_thread_t::ompt_thread_initial};
+
+ EXPECT_EQ(TB.toString(), "OMPT Callback ThreadBegin: ThreadType=1");
+}
+
+TEST(InternalEvent_toString, ThreadEnd) {
+ internal::ThreadEnd TE{};
+
+ EXPECT_EQ(TE.toString(), "OMPT Callback ThreadEnd");
+}
+
+TEST(InternalEvent_toString, ParallelBegin) {
+ internal::ParallelBegin PB{/*NumThreads=*/31};
+
+ EXPECT_EQ(PB.toString(), "OMPT Callback ParallelBegin: NumThreads=31");
+}
+
+TEST(InternalEvent_toString, ParallelEnd) {
+ internal::ParallelEnd PE{/*ParallelData=*/(ompt_data_t *)0x11,
+ /*EncounteringTaskData=*/(ompt_data_t *)0x22,
+ /*Flags=*/31,
+ /*CodeptrRA=*/(const void *)0x33};
+
+ EXPECT_EQ(PE.toString(), "OMPT Callback ParallelEnd");
+}
+
+TEST(InternalEvent_toString, Work) {
+ internal::Work WK{/*WorkType=*/ompt_work_t::ompt_work_loop_dynamic,
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_beginend,
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Count=*/31,
+ /*CodeptrRA=*/(const void *)0x33};
+
+ EXPECT_EQ(WK.toString(),
+ "OMPT Callback Work: work_type=11 endpoint=3 parallel_data=0x11 "
+ "task_data=0x22 count=31 codeptr=0x33");
+}
+
+TEST(InternalEvent_toString, Dispatch_iteration) {
+ ompt_data_t DI{.value = 31};
+ internal::Dispatch D{/*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Kind=*/ompt_dispatch_t::ompt_dispatch_iteration,
+ /*Instance=*/DI};
+
+ EXPECT_EQ(D.toString(), "OMPT Callback Dispatch: parallel_data=0x11 "
+ "task_data=0x22 kind=1 instance=[it=31]");
+}
+
+TEST(InternalEvent_toString, Dispatch_section) {
+ ompt_data_t DI{.ptr = (void *)0x33};
+ internal::Dispatch D{/*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Kind=*/ompt_dispatch_t::ompt_dispatch_section,
+ /*Instance=*/DI};
+
+ EXPECT_EQ(D.toString(), "OMPT Callback Dispatch: parallel_data=0x11 "
+ "task_data=0x22 kind=2 instance=[ptr=0x33]");
+}
+
+TEST(InternalEvent_toString, Dispatch_chunks) {
+ ompt_dispatch_chunk_t DC{.start = 7, .iterations = 31};
+ ompt_data_t DI{.ptr = (void *)&DC};
+
+ internal::Dispatch DLoop{
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Kind=*/ompt_dispatch_t::ompt_dispatch_ws_loop_chunk,
+ /*Instance=*/DI};
+
+ internal::Dispatch DTask{
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Kind=*/ompt_dispatch_t::ompt_dispatch_taskloop_chunk,
+ /*Instance=*/DI};
+
+ internal::Dispatch DDist{
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Kind=*/ompt_dispatch_t::ompt_dispatch_distribute_chunk,
+ /*Instance=*/DI};
+
+ ompt_data_t DINull{.ptr = nullptr};
+ internal::Dispatch DDistNull{
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*Kind=*/ompt_dispatch_t::ompt_dispatch_distribute_chunk,
+ /*Instance=*/DINull};
+
+ EXPECT_EQ(DLoop.toString(),
+ "OMPT Callback Dispatch: parallel_data=0x11 "
+ "task_data=0x22 kind=3 instance=[chunk=(start=7, iterations=31)]");
+
+ EXPECT_EQ(DTask.toString(),
+ "OMPT Callback Dispatch: parallel_data=0x11 "
+ "task_data=0x22 kind=4 instance=[chunk=(start=7, iterations=31)]");
+
+ EXPECT_EQ(DDist.toString(),
+ "OMPT Callback Dispatch: parallel_data=0x11 "
+ "task_data=0x22 kind=5 instance=[chunk=(start=7, iterations=31)]");
+
+ EXPECT_EQ(DDistNull.toString(), "OMPT Callback Dispatch: parallel_data=0x11 "
+ "task_data=0x22 kind=5");
+}
+
+TEST(InternalEvent_toString, TaskCreate) {
+ internal::TaskCreate TC{/*EncounteringTaskData=*/(ompt_data_t *)0x11,
+ /*EncounteringTaskFrame=*/(const ompt_frame_t *)0x22,
+ /*NewTaskData=*/(ompt_data_t *)0x33,
+ /*Flags=*/7,
+ /*HasDependences=*/31,
+ /*CodeptrRA=*/(const void *)0x44};
+
+ EXPECT_EQ(TC.toString(),
+ "OMPT Callback TaskCreate: encountering_task_data=0x11 "
+ "encountering_task_frame=0x22 new_task_data=0x33 flags=7 "
+ "has_dependences=31 codeptr=0x44");
+}
+
+TEST(InternalEvent_toString, ImplicitTask) {
+ internal::ImplicitTask IT{
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*ActualParallelism=*/7,
+ /*Index=*/31,
+ /*Flags=*/127};
+
+ EXPECT_EQ(IT.toString(),
+ "OMPT Callback ImplicitTask: endpoint=1 parallel_data=0x11 "
+ "task_data=0x22 actual_parallelism=7 index=31 flags=127");
+}
+
+TEST(InternalEvent_toString, SyncRegion) {
+ internal::SyncRegion SR{
+ /*Kind=*/ompt_sync_region_t::ompt_sync_region_taskwait,
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_end,
+ /*ParallelData=*/(ompt_data_t *)0x11,
+ /*TaskData=*/(ompt_data_t *)0x22,
+ /*CodeptrRA=*/(const void *)0x33};
+
+ EXPECT_EQ(SR.toString(), "OMPT Callback SyncRegion: kind=5 endpoint=2 "
+ "parallel_data=0x11 task_data=0x22 codeptr=0x33");
+}
+
+TEST(InternalEvent_toString, Target) {
+ internal::Target T{/*Kind=*/ompt_target_t::ompt_target_enter_data_nowait,
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_end,
+ /*DeviceNum=*/7,
+ /*TaskData=*/(ompt_data_t *)0x11,
+ /*TargetId=*/(ompt_id_t)31,
+ /*CodeptrRA=*/(const void *)0x22};
+
+ EXPECT_EQ(T.toString(), "Callback Target: target_id=31 kind=10 "
+ "endpoint=2 device_num=7 code=0x22");
+}
+
+TEST(InternalEvent_toString, TargetEmi) {
+ ompt_data_t TaskData{.value = 31};
+ ompt_data_t TargetTaskData{.value = 127};
+ ompt_data_t TargetData{.value = 8191};
+
+ internal::TargetEmi T{/*Kind=*/ompt_target_t::ompt_target_update,
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*DeviceNum=*/7,
+ /*TaskData=*/(ompt_data_t *)&TaskData,
+ /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData,
+ /*TargetData=*/(ompt_data_t *)&TargetData,
+ /*CodeptrRA=*/(const void *)0x11};
+
+ internal::TargetEmi TDataNull{
+ /*Kind=*/ompt_target_t::ompt_target_update,
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*DeviceNum=*/7,
+ /*TaskData=*/(ompt_data_t *)&TaskData,
+ /*TargetTaskData=*/(ompt_data_t *)nullptr,
+ /*TargetData=*/(ompt_data_t *)&TargetData,
+ /*CodeptrRA=*/(const void *)0x11};
+
+ std::ostringstream StreamT1;
+ std::ostringstream StreamT2;
+ std::string CallBackPrefix{
+ "Callback Target EMI: kind=4 endpoint=1 device_num=7"};
+ StreamT1 << CallBackPrefix << std::showbase << std::hex;
+ StreamT1 << " task_data=" << &TaskData << " (0x1f)";
+ StreamT1 << " target_task_data=" << &TargetTaskData << " (0x7f)";
+ StreamT1 << " target_data=" << &TargetData << " (0x1fff)";
+ StreamT1 << " code=0x11";
+
+ StreamT2 << CallBackPrefix << std::showbase << std::hex;
+ StreamT2 << " task_data=" << &TaskData << " (0x1f)";
+ StreamT2 << " target_task_data=(nil) (0x0)";
+ StreamT2 << " target_data=" << &TargetData << " (0x1fff)";
+ StreamT2 << " code=0x11";
+
+ EXPECT_EQ(T.toString(), StreamT1.str());
+ EXPECT_EQ(TDataNull.toString(), StreamT2.str());
+}
+
+TEST(InternalEvent_toString, TargetDataOp) {
+ internal::TargetDataOp TDO{
+ /*TargetId=*/7,
+ /*HostOpId=*/31,
+ /*OpType=*/ompt_target_data_op_t::ompt_target_data_associate,
+ /*SrcAddr=*/(void *)0x11,
+ /*SrcDeviceNum=*/127,
+ /*DstAddr=*/(void *)0x22,
+ /*DstDeviceNum=*/8191,
+ /*Bytes=*/4096,
+ /*CodeptrRA=*/(const void *)0x33};
+
+ EXPECT_EQ(
+ TDO.toString(),
+ " Callback DataOp: target_id=7 host_op_id=31 optype=5 src=0x11 "
+ "src_device_num=127 dest=0x22 dest_device_num=8191 bytes=4096 code=0x33");
+}
+
+TEST(InternalEvent_toString, TargetDataOpEmi) {
+ ompt_data_t TargetTaskData{.value = 31};
+ ompt_data_t TargetData{.value = 127};
+ ompt_id_t HostOpId = 8191;
+
+ internal::TargetDataOpEmi TDO{
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData,
+ /*TargetData=*/(ompt_data_t *)&TargetData,
+ /*HostOpId=*/(ompt_id_t *)&HostOpId,
+ /*OpType=*/ompt_target_data_op_t::ompt_target_data_disassociate,
+ /*SrcAddr=*/(void *)0x11,
+ /*SrcDeviceNum=*/1,
+ /*DstAddr=*/(void *)0x22,
+ /*DstDeviceNum=*/2,
+ /*Bytes=*/4096,
+ /*CodeptrRA=*/(const void *)0x33};
+
+ // Set HostOpId=nullptr
+ internal::TargetDataOpEmi TDO_HostOpIdNull{
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData,
+ /*TargetData=*/(ompt_data_t *)&TargetData,
+ /*HostOpId=*/(ompt_id_t *)nullptr,
+ /*OpType=*/ompt_target_data_op_t::ompt_target_data_disassociate,
+ /*SrcAddr=*/(void *)0x11,
+ /*SrcDeviceNum=*/1,
+ /*DstAddr=*/(void *)0x22,
+ /*DstDeviceNum=*/2,
+ /*Bytes=*/4096,
+ /*CodeptrRA=*/(const void *)0x33};
+
+ std::ostringstream StreamTDO1;
+ std::ostringstream StreamTDO2;
+ std::string CallBackPrefix{" Callback DataOp EMI: endpoint=1 optype=6"};
+ std::string CallBackSuffix{
+ " src=0x11 src_device_num=1 dest=0x22 dest_device_num=2 "
+ "bytes=4096 code=0x33"};
+ StreamTDO1 << CallBackPrefix << std::showbase << std::hex;
+ StreamTDO1 << " target_task_data=" << &TargetTaskData << " (0x1f)";
+ StreamTDO1 << " target_data=" << &TargetData << " (0x7f)";
+ StreamTDO1 << " host_op_id=" << &HostOpId << " (0x1fff)";
+ StreamTDO1 << CallBackSuffix;
+
+ StreamTDO2 << CallBackPrefix << std::showbase << std::hex;
+ StreamTDO2 << " target_task_data=" << &TargetTaskData << " (0x1f)";
+ StreamTDO2 << " target_data=" << &TargetData << " (0x7f)";
+ StreamTDO2 << " host_op_id=(nil) (0x0)";
+ StreamTDO2 << CallBackSuffix;
+
+ EXPECT_EQ(TDO.toString(), StreamTDO1.str());
+ EXPECT_EQ(TDO_HostOpIdNull.toString(), StreamTDO2.str());
+}
+
+TEST(InternalEvent_toString, TargetSubmit) {
+ internal::TargetSubmit TS{/*TargetId=*/7,
+ /*HostOpId=*/31,
+ /*RequestedNumTeams=*/127};
+
+ EXPECT_EQ(TS.toString(),
+ " Callback Submit: target_id=7 host_op_id=31 req_num_teams=127");
+}
+
+TEST(InternalEvent_toString, TargetSubmitEmi) {
+ ompt_data_t TargetData{.value = 127};
+ ompt_id_t HostOpId = 8191;
+ internal::TargetSubmitEmi TS{
+ /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*TargetData=*/(ompt_data_t *)&TargetData,
+ /*HostOpId=*/(ompt_id_t *)&HostOpId,
+ /*RequestedNumTeams=*/7};
+
+ std::ostringstream StreamTS;
+ std::string CallBackPrefix{
+ " Callback Submit EMI: endpoint=1 req_num_teams=7"};
+ StreamTS << CallBackPrefix << std::showbase << std::hex;
+ StreamTS << " target_data=" << &TargetData << " (0x7f)";
+ StreamTS << " host_op_id=" << &HostOpId << " (0x1fff)";
+
+ EXPECT_EQ(TS.toString(), StreamTS.str());
+}
+
+TEST(InternalEvent_toString, DeviceInitialize) {
+ const char *Type = "DeviceType";
+ const char *DocStr = "DocumentationString";
+
+ internal::DeviceInitialize DI{/*DeviceNum=*/7,
+ /*Type=*/Type,
+ /*Device=*/(ompt_device_t *)0x11,
+ /*LookupFn=*/(ompt_function_lookup_t)0x22,
+ /*DocStr=*/DocStr};
+
+ internal::DeviceInitialize DINull{/*DeviceNum=*/0,
+ /*Type=*/nullptr,
+ /*Device=*/nullptr,
+ /*LookupFn=*/(ompt_function_lookup_t)0x0,
+ /*DocStr=*/nullptr};
+
+ std::ostringstream StreamDI;
+ std::string CallBackPrefix{"Callback Init: device_num=7 type=DeviceType "
+ "device=0x11 lookup=0x22 doc="};
+ StreamDI << CallBackPrefix << std::showbase << std::hex;
+ StreamDI << (uint64_t)DocStr;
+ EXPECT_EQ(DI.toString(), StreamDI.str());
+
+ // TODO This looks inconsistent: (null) vs. (nil)
+ EXPECT_EQ(DINull.toString(), "Callback Init: device_num=0 type=(null) "
+ "device=(nil) lookup=(nil) doc=(nil)");
+}
+
+TEST(InternalEvent_toString, DeviceFinalize) {
+ internal::DeviceFinalize DF{/*DeviceNum=*/7};
+
+ EXPECT_EQ(DF.toString(), "Callback Fini: device_num=7");
+}
+
+TEST(InternalEvent_toString, DeviceLoad) {
+ const char *Filename = "FilenameToLoad";
+
+ internal::DeviceLoad DL{/*DeviceNum=*/7,
+ /*Filename=*/Filename,
+ /*OffsetInFile=*/31,
+ /*VmaInFile=*/(void *)0x11,
+ /*Bytes=*/127,
+ /*HostAddr=*/(void *)0x22,
+ /*DeviceAddr=*/(void *)0x33,
+ /*ModuleId=*/8191};
+
+ internal::DeviceLoad DLNull{/*DeviceNum=*/0,
+ /*Filename=*/nullptr,
+ /*OffsetInFile=*/0,
+ /*VmaInFile=*/nullptr,
+ /*Bytes=*/0,
+ /*HostAddr=*/nullptr,
+ /*DeviceAddr=*/nullptr,
+ /*ModuleId=*/0};
+
+ EXPECT_EQ(
+ DL.toString(),
+ "Callback Load: device_num:7 module_id:8191 "
+ "filename:FilenameToLoad host_addr:0x22 device_addr:0x33 bytes:127");
+
+ // TODO This looks inconsistent: (null) vs. (nil) and ':' instead of '='
+ EXPECT_EQ(DLNull.toString(),
+ "Callback Load: device_num:0 module_id:0 filename:(null) "
+ "host_addr:(nil) device_addr:(nil) bytes:0");
+}
+
+TEST(InternalEvent_toString, BufferRequest) {
+ size_t Bytes = 7;
+ ompt_buffer_t *Buffer = (void *)0x11;
+
+ internal::BufferRequest BR{/*DeviceNum=*/31,
+ /*Buffer=*/&Buffer,
+ /*Bytes=*/&Bytes};
+
+ internal::BufferRequest BRNull{/*DeviceNum=*/127,
+ /*Buffer=*/nullptr,
+ /*Bytes=*/nullptr};
+
+ EXPECT_EQ(BR.toString(),
+ "Allocated 7 bytes at 0x11 in buffer request callback");
+ EXPECT_EQ(BRNull.toString(),
+ "Allocated 0 bytes at (nil) in buffer request callback");
+}
+
+TEST(InternalEvent_toString, BufferComplete) {
+ ompt_buffer_t *Buffer = (void *)0x11;
+
+ internal::BufferComplete BC{/*DeviceNum=*/7,
+ /*Buffer=*/Buffer,
+ /*Bytes=*/127,
+ /*Begin=*/8191,
+ /*BufferOwned=*/1};
+
+ internal::BufferComplete BCNull{/*DeviceNum=*/0,
+ /*Buffer=*/nullptr,
+ /*Bytes=*/0,
+ /*Begin=*/0,
+ /*BufferOwned=*/0};
+
+ EXPECT_EQ(BC.toString(),
+ "Executing buffer complete callback: 7 0x11 127 0x1fff 1");
+ EXPECT_EQ(BCNull.toString(),
+ "Executing buffer complete callback: 0 (nil) 0 (nil) 0");
+}
+
+TEST(InternalEvent_toString, BufferRecordInvalid) {
+ ompt_record_ompt_t InvalidRecord{
+ /*type=*/ompt_callbacks_t::ompt_callback_parallel_begin,
+ /*time=*/7,
+ /*thread_id=*/31,
+ /*target_id=*/127,
+ /*record=*/{.parallel_begin = {}}};
+
+ internal::BufferRecord BRNull{/*RecordPtr=*/nullptr};
+ internal::BufferRecord BRInvalid{/*RecordPtr=*/&InvalidRecord};
+
+ std::ostringstream StreamBRInvalid;
+ StreamBRInvalid << "rec=" << std::showbase << std::hex << &InvalidRecord;
+ StreamBRInvalid << " type=3 (unsupported record type)";
+
+ EXPECT_EQ(BRNull.toString(), "rec=(nil) type=0 (unsupported record type)");
+ EXPECT_EQ(BRInvalid.toString(), StreamBRInvalid.str());
+}
+
+TEST(InternalEvent_toString, BufferRecordTarget) {
+ ompt_record_target_t SubRecordTarget{
+ /*kind=*/ompt_target_t::ompt_target_update,
+ /*endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
+ /*device_num=*/2,
+ /*task_id=*/127,
+ /*target_id=*/31,
+ /*codeptr_ra=*/(const void *)0x11};
+
+ ompt_record_ompt_t TargetRecord{
+ /*type=*/ompt_callbacks_t::ompt_callback_target,
+ /*time=*/7,
+ /*thread_id=*/29,
+ /*target_id=*/31,
+ /*record*/ {.target = SubRecordTarget}};
+
+ internal::BufferRecord BR{/*RecordPtr=*/&TargetRecord};
+
+ std::ostringstream StreamBR;
+ StreamBR << "rec=" << std::showbase << std::hex << &TargetRecord;
+ StreamBR << " type=8 (Target task) time=7 thread_id=29 target_id=31 kind=4";
+ StreamBR << " endpoint=1 device=2 task_id=127 codeptr=0x11";
+
+ EXPECT_EQ(BR.toString(), StreamBR.str());
+}
+
+TEST(InternalEvent_toString, BufferRecordDataOp) {
+ ompt_record_target_data_op_t SubRecordTargetDataOp{
+ /*host_op_id=*/7,
+ /*optype=*/ompt_target_data_op_t::ompt_target_data_alloc_async,
+ /*src_addr=*/(void *)0x11,
+ /*src_device_num=*/1,
+ /*dest_addr=*/(void *)0x22,
+ /*dest_device_num=*/2,
+ /*bytes=*/127,
+ /*end_time=*/128,
+ /*codeptr_ra=*/(const void *)0x33,
+ };
+
+ ompt_record_ompt_t DataOpRecord{
+ /*type=*/ompt_callbacks_t::ompt_callback_target_data_op_emi,
+ /*time=*/8,
+ /*thread_id=*/3,
+ /*target_id=*/5,
+ /*record=*/{.target_data_op = SubRecordTargetDataOp}};
+
+ internal::BufferRecord BR{/*RecordPtr=*/&DataOpRecord};
+
+ std::ostringstream StreamBR;
+ StreamBR << "rec=" << std::showbase << std::hex << &DataOpRecord;
+ StreamBR << " type=34 (Target data op) time=8 thread_id=3 target_id=5";
+ StreamBR << " host_op_id=7 optype=17 src_addr=0x11 src_device=1";
+ StreamBR << " dest_addr=0x22 dest_device=2 bytes=127 end_time=128";
+ StreamBR << " duration=120 ns codeptr=0x33";
+
+ EXPECT_EQ(BR.toString(), StreamBR.str());
+}
+
+TEST(InternalEvent_toString, BufferRecordKernel) {
+ ompt_record_target_kernel_t SubRecordTargetKernel{
+ /*host_op_id=*/11,
+ /*requested_num_teams=*/127,
+ /*granted_num_teams=*/63,
+ /*end_time=*/8191,
+ };
+
+ ompt_record_ompt_t KernelRecord{
+ /*type=*/ompt_callbacks_t::ompt_callback_target_submit_emi,
+ /*time=*/9,
+ /*thread_id=*/19,
+ /*target_id=*/33,
+ /*record=*/{.target_kernel = SubRecordTargetKernel}};
+
+ internal::BufferRecord BR{/*RecordPtr=*/&KernelRecord};
+
+ std::ostringstream StreamBR;
+ StreamBR << "rec=" << std::showbase << std::hex << &KernelRecord;
+ StreamBR << " type=35 (Target kernel) time=9 thread_id=19 target_id=33";
+ StreamBR << " host_op_id=11 requested_num_teams=127 granted_num_teams=63";
+ StreamBR << " end_time=8191 duration=8182 ns";
+
+ EXPECT_EQ(BR.toString(), StreamBR.str());
+}
+
+TEST(InternalEvent_toString, BufferRecordDeallocation) {
+ internal::BufferRecordDeallocation BRD{/*Buffer=*/(ompt_record_ompt_t *)0x11};
+ internal::BufferRecordDeallocation BRDNull{/*Buffer=*/nullptr};
+
+ EXPECT_EQ(BRD.toString(), "Deallocated 0x11");
+ EXPECT_EQ(BRDNull.toString(), "Deallocated (nil)");
+}