LLVM OpenMP 22.0.0git
internal-event-test.cpp
Go to the documentation of this file.
1#include "InternalEvent.h"
2#include <omp-tools.h>
3#include <sstream>
4
5#include "gtest/gtest.h"
6
7using namespace omptest;
8
9TEST(InternalEvent_toString, AssertionSyncPoint) {
10 internal::AssertionSyncPoint SP{/*Name=*/"Test Sync Point"};
11
12 EXPECT_EQ(SP.toString(), "Assertion SyncPoint: 'Test Sync Point'");
13}
14
15TEST(InternalEvent_toString, ThreadBegin) {
16 internal::ThreadBegin TB{/*ThreadType=*/ompt_thread_t::ompt_thread_initial};
17
18 EXPECT_EQ(TB.toString(), "OMPT Callback ThreadBegin: ThreadType=1");
19}
20
21TEST(InternalEvent_toString, ThreadEnd) {
23
24 EXPECT_EQ(TE.toString(), "OMPT Callback ThreadEnd");
25}
26
27TEST(InternalEvent_toString, ParallelBegin) {
28 internal::ParallelBegin PB{/*NumThreads=*/31};
29
30 EXPECT_EQ(PB.toString(), "OMPT Callback ParallelBegin: NumThreads=31");
31}
32
33TEST(InternalEvent_toString, ParallelEnd) {
34 internal::ParallelEnd PE{/*ParallelData=*/(ompt_data_t *)0x11,
35 /*EncounteringTaskData=*/(ompt_data_t *)0x22,
36 /*Flags=*/31,
37 /*CodeptrRA=*/(const void *)0x33};
38
39 EXPECT_EQ(PE.toString(), "OMPT Callback ParallelEnd");
40}
41
42TEST(InternalEvent_toString, Work) {
43 internal::Work WK{/*WorkType=*/ompt_work_t::ompt_work_loop_dynamic,
44 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_beginend,
45 /*ParallelData=*/(ompt_data_t *)0x11,
46 /*TaskData=*/(ompt_data_t *)0x22,
47 /*Count=*/31,
48 /*CodeptrRA=*/(const void *)0x33};
49
50 EXPECT_EQ(WK.toString(),
51 "OMPT Callback Work: work_type=11 endpoint=3 parallel_data=0x11 "
52 "task_data=0x22 count=31 codeptr=0x33");
53}
54
55TEST(InternalEvent_toString, Dispatch_iteration) {
56 ompt_data_t DI{.value = 31};
57 internal::Dispatch D{/*ParallelData=*/(ompt_data_t *)0x11,
58 /*TaskData=*/(ompt_data_t *)0x22,
59 /*Kind=*/ompt_dispatch_t::ompt_dispatch_iteration,
60 /*Instance=*/DI};
61
62 EXPECT_EQ(D.toString(), "OMPT Callback Dispatch: parallel_data=0x11 "
63 "task_data=0x22 kind=1 instance=[it=31]");
64}
65
66TEST(InternalEvent_toString, Dispatch_section) {
67 ompt_data_t DI{.ptr = (void *)0x33};
68 internal::Dispatch D{/*ParallelData=*/(ompt_data_t *)0x11,
69 /*TaskData=*/(ompt_data_t *)0x22,
70 /*Kind=*/ompt_dispatch_t::ompt_dispatch_section,
71 /*Instance=*/DI};
72
73 EXPECT_EQ(D.toString(), "OMPT Callback Dispatch: parallel_data=0x11 "
74 "task_data=0x22 kind=2 instance=[ptr=0x33]");
75}
76
77TEST(InternalEvent_toString, Dispatch_chunks) {
78 ompt_dispatch_chunk_t DC{.start = 7, .iterations = 31};
79 ompt_data_t DI{.ptr = (void *)&DC};
80
82 /*ParallelData=*/(ompt_data_t *)0x11,
83 /*TaskData=*/(ompt_data_t *)0x22,
84 /*Kind=*/ompt_dispatch_t::ompt_dispatch_ws_loop_chunk,
85 /*Instance=*/DI};
86
88 /*ParallelData=*/(ompt_data_t *)0x11,
89 /*TaskData=*/(ompt_data_t *)0x22,
90 /*Kind=*/ompt_dispatch_t::ompt_dispatch_taskloop_chunk,
91 /*Instance=*/DI};
92
94 /*ParallelData=*/(ompt_data_t *)0x11,
95 /*TaskData=*/(ompt_data_t *)0x22,
96 /*Kind=*/ompt_dispatch_t::ompt_dispatch_distribute_chunk,
97 /*Instance=*/DI};
98
99 ompt_data_t DINull{.ptr = nullptr};
100 internal::Dispatch DDistNull{
101 /*ParallelData=*/(ompt_data_t *)0x11,
102 /*TaskData=*/(ompt_data_t *)0x22,
103 /*Kind=*/ompt_dispatch_t::ompt_dispatch_distribute_chunk,
104 /*Instance=*/DINull};
105
106 EXPECT_EQ(DLoop.toString(),
107 "OMPT Callback Dispatch: parallel_data=0x11 "
108 "task_data=0x22 kind=3 instance=[chunk=(start=7, iterations=31)]");
109
110 EXPECT_EQ(DTask.toString(),
111 "OMPT Callback Dispatch: parallel_data=0x11 "
112 "task_data=0x22 kind=4 instance=[chunk=(start=7, iterations=31)]");
113
114 EXPECT_EQ(DDist.toString(),
115 "OMPT Callback Dispatch: parallel_data=0x11 "
116 "task_data=0x22 kind=5 instance=[chunk=(start=7, iterations=31)]");
117
118 EXPECT_EQ(DDistNull.toString(), "OMPT Callback Dispatch: parallel_data=0x11 "
119 "task_data=0x22 kind=5");
120}
121
122TEST(InternalEvent_toString, TaskCreate) {
123 internal::TaskCreate TC{/*EncounteringTaskData=*/(ompt_data_t *)0x11,
124 /*EncounteringTaskFrame=*/(const ompt_frame_t *)0x22,
125 /*NewTaskData=*/(ompt_data_t *)0x33,
126 /*Flags=*/7,
127 /*HasDependences=*/31,
128 /*CodeptrRA=*/(const void *)0x44};
129
130 EXPECT_EQ(TC.toString(),
131 "OMPT Callback TaskCreate: encountering_task_data=0x11 "
132 "encountering_task_frame=0x22 new_task_data=0x33 flags=7 "
133 "has_dependences=31 codeptr=0x44");
134}
135
136TEST(InternalEvent_toString, ImplicitTask) {
138 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
139 /*ParallelData=*/(ompt_data_t *)0x11,
140 /*TaskData=*/(ompt_data_t *)0x22,
141 /*ActualParallelism=*/7,
142 /*Index=*/31,
143 /*Flags=*/127};
144
145 EXPECT_EQ(IT.toString(),
146 "OMPT Callback ImplicitTask: endpoint=1 parallel_data=0x11 "
147 "task_data=0x22 actual_parallelism=7 index=31 flags=127");
148}
149
150TEST(InternalEvent_toString, SyncRegion) {
152 /*Kind=*/ompt_sync_region_t::ompt_sync_region_taskwait,
153 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_end,
154 /*ParallelData=*/(ompt_data_t *)0x11,
155 /*TaskData=*/(ompt_data_t *)0x22,
156 /*CodeptrRA=*/(const void *)0x33};
157
158 EXPECT_EQ(SR.toString(), "OMPT Callback SyncRegion: kind=5 endpoint=2 "
159 "parallel_data=0x11 task_data=0x22 codeptr=0x33");
160}
161
162TEST(InternalEvent_toString, Target) {
163 internal::Target T{/*Kind=*/ompt_target_t::ompt_target_enter_data_nowait,
164 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_end,
165 /*DeviceNum=*/7,
166 /*TaskData=*/(ompt_data_t *)0x11,
167 /*TargetId=*/(ompt_id_t)31,
168 /*CodeptrRA=*/(const void *)0x22};
169
170 EXPECT_EQ(T.toString(), "Callback Target: target_id=31 kind=10 "
171 "endpoint=2 device_num=7 code=0x22");
172}
173
174TEST(InternalEvent_toString, TargetEmi) {
175 ompt_data_t TaskData{.value = 31};
176 ompt_data_t TargetTaskData{.value = 127};
177 ompt_data_t TargetData{.value = 8191};
178
179 internal::TargetEmi T{/*Kind=*/ompt_target_t::ompt_target_update,
180 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
181 /*DeviceNum=*/7,
182 /*TaskData=*/(ompt_data_t *)&TaskData,
183 /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData,
184 /*TargetData=*/(ompt_data_t *)&TargetData,
185 /*CodeptrRA=*/(const void *)0x11};
186
187 internal::TargetEmi TDataNull{
188 /*Kind=*/ompt_target_t::ompt_target_update,
189 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
190 /*DeviceNum=*/7,
191 /*TaskData=*/(ompt_data_t *)&TaskData,
192 /*TargetTaskData=*/(ompt_data_t *)nullptr,
193 /*TargetData=*/(ompt_data_t *)&TargetData,
194 /*CodeptrRA=*/(const void *)0x11};
195
196 std::ostringstream StreamT1;
197 std::ostringstream StreamT2;
198 std::string CallBackPrefix{
199 "Callback Target EMI: kind=4 endpoint=1 device_num=7"};
200 StreamT1 << CallBackPrefix << std::showbase << std::hex;
201 StreamT1 << " task_data=" << &TaskData << " (0x1f)";
202 StreamT1 << " target_task_data=" << &TargetTaskData << " (0x7f)";
203 StreamT1 << " target_data=" << &TargetData << " (0x1fff)";
204 StreamT1 << " code=0x11";
205
206 StreamT2 << CallBackPrefix << std::showbase << std::hex;
207 StreamT2 << " task_data=" << &TaskData << " (0x1f)";
208 StreamT2 << " target_task_data=(nil) (0x0)";
209 StreamT2 << " target_data=" << &TargetData << " (0x1fff)";
210 StreamT2 << " code=0x11";
211
212 EXPECT_EQ(T.toString(), StreamT1.str());
213 EXPECT_EQ(TDataNull.toString(), StreamT2.str());
214}
215
216TEST(InternalEvent_toString, TargetDataOp) {
218 /*TargetId=*/7,
219 /*HostOpId=*/31,
220 /*OpType=*/ompt_target_data_op_t::ompt_target_data_associate,
221 /*SrcAddr=*/(void *)0x11,
222 /*SrcDeviceNum=*/127,
223 /*DstAddr=*/(void *)0x22,
224 /*DstDeviceNum=*/8191,
225 /*Bytes=*/4096,
226 /*CodeptrRA=*/(const void *)0x33};
227
228 EXPECT_EQ(
229 TDO.toString(),
230 " Callback DataOp: target_id=7 host_op_id=31 optype=5 src=0x11 "
231 "src_device_num=127 dest=0x22 dest_device_num=8191 bytes=4096 code=0x33");
232}
233
234TEST(InternalEvent_toString, TargetDataOpEmi) {
235 ompt_data_t TargetTaskData{.value = 31};
236 ompt_data_t TargetData{.value = 127};
237 ompt_id_t HostOpId = 8191;
238
240 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
241 /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData,
242 /*TargetData=*/(ompt_data_t *)&TargetData,
243 /*HostOpId=*/(ompt_id_t *)&HostOpId,
244 /*OpType=*/ompt_target_data_op_t::ompt_target_data_disassociate,
245 /*SrcAddr=*/(void *)0x11,
246 /*SrcDeviceNum=*/1,
247 /*DstAddr=*/(void *)0x22,
248 /*DstDeviceNum=*/2,
249 /*Bytes=*/4096,
250 /*CodeptrRA=*/(const void *)0x33};
251
252 // Set HostOpId=nullptr
253 internal::TargetDataOpEmi TDO_HostOpIdNull{
254 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
255 /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData,
256 /*TargetData=*/(ompt_data_t *)&TargetData,
257 /*HostOpId=*/(ompt_id_t *)nullptr,
258 /*OpType=*/ompt_target_data_op_t::ompt_target_data_disassociate,
259 /*SrcAddr=*/(void *)0x11,
260 /*SrcDeviceNum=*/1,
261 /*DstAddr=*/(void *)0x22,
262 /*DstDeviceNum=*/2,
263 /*Bytes=*/4096,
264 /*CodeptrRA=*/(const void *)0x33};
265
266 std::ostringstream StreamTDO1;
267 std::ostringstream StreamTDO2;
268 std::string CallBackPrefix{" Callback DataOp EMI: endpoint=1 optype=6"};
269 std::string CallBackSuffix{
270 " src=0x11 src_device_num=1 dest=0x22 dest_device_num=2 "
271 "bytes=4096 code=0x33"};
272 StreamTDO1 << CallBackPrefix << std::showbase << std::hex;
273 StreamTDO1 << " target_task_data=" << &TargetTaskData << " (0x1f)";
274 StreamTDO1 << " target_data=" << &TargetData << " (0x7f)";
275 StreamTDO1 << " host_op_id=" << &HostOpId << " (0x1fff)";
276 StreamTDO1 << CallBackSuffix;
277
278 StreamTDO2 << CallBackPrefix << std::showbase << std::hex;
279 StreamTDO2 << " target_task_data=" << &TargetTaskData << " (0x1f)";
280 StreamTDO2 << " target_data=" << &TargetData << " (0x7f)";
281 StreamTDO2 << " host_op_id=(nil) (0x0)";
282 StreamTDO2 << CallBackSuffix;
283
284 EXPECT_EQ(TDO.toString(), StreamTDO1.str());
285 EXPECT_EQ(TDO_HostOpIdNull.toString(), StreamTDO2.str());
286}
287
288TEST(InternalEvent_toString, TargetSubmit) {
289 internal::TargetSubmit TS{/*TargetId=*/7,
290 /*HostOpId=*/31,
291 /*RequestedNumTeams=*/127};
292
293 EXPECT_EQ(TS.toString(),
294 " Callback Submit: target_id=7 host_op_id=31 req_num_teams=127");
295}
296
297TEST(InternalEvent_toString, TargetSubmitEmi) {
298 ompt_data_t TargetData{.value = 127};
299 ompt_id_t HostOpId = 8191;
301 /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
302 /*TargetData=*/(ompt_data_t *)&TargetData,
303 /*HostOpId=*/(ompt_id_t *)&HostOpId,
304 /*RequestedNumTeams=*/7};
305
306 std::ostringstream StreamTS;
307 std::string CallBackPrefix{
308 " Callback Submit EMI: endpoint=1 req_num_teams=7"};
309 StreamTS << CallBackPrefix << std::showbase << std::hex;
310 StreamTS << " target_data=" << &TargetData << " (0x7f)";
311 StreamTS << " host_op_id=" << &HostOpId << " (0x1fff)";
312
313 EXPECT_EQ(TS.toString(), StreamTS.str());
314}
315
316TEST(InternalEvent_toString, DeviceInitialize) {
317 const char *Type = "DeviceType";
318 const char *DocStr = "DocumentationString";
319
320 internal::DeviceInitialize DI{/*DeviceNum=*/7,
321 /*Type=*/Type,
322 /*Device=*/(ompt_device_t *)0x11,
323 /*LookupFn=*/(ompt_function_lookup_t)0x22,
324 /*DocStr=*/DocStr};
325
326 internal::DeviceInitialize DINull{/*DeviceNum=*/0,
327 /*Type=*/nullptr,
328 /*Device=*/nullptr,
329 /*LookupFn=*/(ompt_function_lookup_t)0x0,
330 /*DocStr=*/nullptr};
331
332 std::ostringstream StreamDI;
333 std::string CallBackPrefix{"Callback Init: device_num=7 type=DeviceType "
334 "device=0x11 lookup=0x22 doc="};
335 StreamDI << CallBackPrefix << std::showbase << std::hex;
336 StreamDI << (uint64_t)DocStr;
337 EXPECT_EQ(DI.toString(), StreamDI.str());
338
339 // TODO This looks inconsistent: (null) vs. (nil)
340 EXPECT_EQ(DINull.toString(), "Callback Init: device_num=0 type=(null) "
341 "device=(nil) lookup=(nil) doc=(nil)");
342}
343
344TEST(InternalEvent_toString, DeviceFinalize) {
345 internal::DeviceFinalize DF{/*DeviceNum=*/7};
346
347 EXPECT_EQ(DF.toString(), "Callback Fini: device_num=7");
348}
349
350TEST(InternalEvent_toString, DeviceLoad) {
351 const char *Filename = "FilenameToLoad";
352
353 internal::DeviceLoad DL{/*DeviceNum=*/7,
354 /*Filename=*/Filename,
355 /*OffsetInFile=*/31,
356 /*VmaInFile=*/(void *)0x11,
357 /*Bytes=*/127,
358 /*HostAddr=*/(void *)0x22,
359 /*DeviceAddr=*/(void *)0x33,
360 /*ModuleId=*/8191};
361
362 internal::DeviceLoad DLNull{/*DeviceNum=*/0,
363 /*Filename=*/nullptr,
364 /*OffsetInFile=*/0,
365 /*VmaInFile=*/nullptr,
366 /*Bytes=*/0,
367 /*HostAddr=*/nullptr,
368 /*DeviceAddr=*/nullptr,
369 /*ModuleId=*/0};
370
371 EXPECT_EQ(
372 DL.toString(),
373 "Callback Load: device_num:7 module_id:8191 "
374 "filename:FilenameToLoad host_addr:0x22 device_addr:0x33 bytes:127");
375
376 // TODO This looks inconsistent: (null) vs. (nil) and ':' instead of '='
377 EXPECT_EQ(DLNull.toString(),
378 "Callback Load: device_num:0 module_id:0 filename:(null) "
379 "host_addr:(nil) device_addr:(nil) bytes:0");
380}
381
382TEST(InternalEvent_toString, BufferRequest) {
383 size_t Bytes = 7;
384 ompt_buffer_t *Buffer = (void *)0x11;
385
386 internal::BufferRequest BR{/*DeviceNum=*/31,
387 /*Buffer=*/&Buffer,
388 /*Bytes=*/&Bytes};
389
390 internal::BufferRequest BRNull{/*DeviceNum=*/127,
391 /*Buffer=*/nullptr,
392 /*Bytes=*/nullptr};
393
394 EXPECT_EQ(BR.toString(),
395 "Allocated 7 bytes at 0x11 in buffer request callback");
396 EXPECT_EQ(BRNull.toString(),
397 "Allocated 0 bytes at (nil) in buffer request callback");
398}
399
400TEST(InternalEvent_toString, BufferComplete) {
401 ompt_buffer_t *Buffer = (void *)0x11;
402
403 internal::BufferComplete BC{/*DeviceNum=*/7,
404 /*Buffer=*/Buffer,
405 /*Bytes=*/127,
406 /*Begin=*/8191,
407 /*BufferOwned=*/1};
408
409 internal::BufferComplete BCNull{/*DeviceNum=*/0,
410 /*Buffer=*/nullptr,
411 /*Bytes=*/0,
412 /*Begin=*/0,
413 /*BufferOwned=*/0};
414
415 EXPECT_EQ(BC.toString(),
416 "Executing buffer complete callback: 7 0x11 127 0x1fff 1");
417 EXPECT_EQ(BCNull.toString(),
418 "Executing buffer complete callback: 0 (nil) 0 (nil) 0");
419}
420
421TEST(InternalEvent_toString, BufferRecordInvalid) {
422 ompt_record_ompt_t InvalidRecord{
423 /*type=*/ompt_callbacks_t::ompt_callback_parallel_begin,
424 /*time=*/7,
425 /*thread_id=*/31,
426 /*target_id=*/127,
427 /*record=*/{.parallel_begin = {}}};
428
429 internal::BufferRecord BRNull{/*RecordPtr=*/nullptr};
430 internal::BufferRecord BRInvalid{/*RecordPtr=*/&InvalidRecord};
431
432 std::ostringstream StreamBRInvalid;
433 StreamBRInvalid << "rec=" << std::showbase << std::hex << &InvalidRecord;
434 StreamBRInvalid << " type=3 (unsupported record type)";
435
436 EXPECT_EQ(BRNull.toString(), "rec=(nil) type=0 (unsupported record type)");
437 EXPECT_EQ(BRInvalid.toString(), StreamBRInvalid.str());
438}
439
440TEST(InternalEvent_toString, BufferRecordTarget) {
441 ompt_record_target_t SubRecordTarget{
442 /*kind=*/ompt_target_t::ompt_target_update,
443 /*endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin,
444 /*device_num=*/2,
445 /*task_id=*/127,
446 /*target_id=*/31,
447 /*codeptr_ra=*/(const void *)0x11};
448
449 ompt_record_ompt_t TargetRecord{
450 /*type=*/ompt_callbacks_t::ompt_callback_target,
451 /*time=*/7,
452 /*thread_id=*/29,
453 /*target_id=*/31,
454 /*record*/ {.target = SubRecordTarget}};
455
456 internal::BufferRecord BR{/*RecordPtr=*/&TargetRecord};
457
458 std::ostringstream StreamBR;
459 StreamBR << "rec=" << std::showbase << std::hex << &TargetRecord;
460 StreamBR << " type=8 (Target task) time=7 thread_id=29 target_id=31 kind=4";
461 StreamBR << " endpoint=1 device=2 task_id=127 codeptr=0x11";
462
463 EXPECT_EQ(BR.toString(), StreamBR.str());
464}
465
466TEST(InternalEvent_toString, BufferRecordDataOp) {
467 ompt_record_target_data_op_t SubRecordTargetDataOp{
468 /*host_op_id=*/7,
469 /*optype=*/ompt_target_data_op_t::ompt_target_data_alloc_async,
470 /*src_addr=*/(void *)0x11,
471 /*src_device_num=*/1,
472 /*dest_addr=*/(void *)0x22,
473 /*dest_device_num=*/2,
474 /*bytes=*/127,
475 /*end_time=*/128,
476 /*codeptr_ra=*/(const void *)0x33,
477 };
478
479 ompt_record_ompt_t DataOpRecord{
480 /*type=*/ompt_callbacks_t::ompt_callback_target_data_op_emi,
481 /*time=*/8,
482 /*thread_id=*/3,
483 /*target_id=*/5,
484 /*record=*/{.target_data_op = SubRecordTargetDataOp}};
485
486 internal::BufferRecord BR{/*RecordPtr=*/&DataOpRecord};
487
488 std::ostringstream StreamBR;
489 StreamBR << "rec=" << std::showbase << std::hex << &DataOpRecord;
490 StreamBR << " type=34 (Target data op) time=8 thread_id=3 target_id=5";
491 StreamBR << " host_op_id=7 optype=17 src_addr=0x11 src_device=1";
492 StreamBR << " dest_addr=0x22 dest_device=2 bytes=127 end_time=128";
493 StreamBR << " duration=120 ns codeptr=0x33";
494
495 EXPECT_EQ(BR.toString(), StreamBR.str());
496}
497
498TEST(InternalEvent_toString, BufferRecordKernel) {
499 ompt_record_target_kernel_t SubRecordTargetKernel{
500 /*host_op_id=*/11,
501 /*requested_num_teams=*/127,
502 /*granted_num_teams=*/63,
503 /*end_time=*/8191,
504 };
505
506 ompt_record_ompt_t KernelRecord{
507 /*type=*/ompt_callbacks_t::ompt_callback_target_submit_emi,
508 /*time=*/9,
509 /*thread_id=*/19,
510 /*target_id=*/33,
511 /*record=*/{.target_kernel = SubRecordTargetKernel}};
512
513 internal::BufferRecord BR{/*RecordPtr=*/&KernelRecord};
514
515 std::ostringstream StreamBR;
516 StreamBR << "rec=" << std::showbase << std::hex << &KernelRecord;
517 StreamBR << " type=35 (Target kernel) time=9 thread_id=19 target_id=33";
518 StreamBR << " host_op_id=11 requested_num_teams=127 granted_num_teams=63";
519 StreamBR << " end_time=8191 duration=8182 ns";
520
521 EXPECT_EQ(BR.toString(), StreamBR.str());
522}
523
524TEST(InternalEvent_toString, BufferRecordDeallocation) {
525 internal::BufferRecordDeallocation BRD{/*Buffer=*/(ompt_record_ompt_t *)0x11};
526 internal::BufferRecordDeallocation BRDNull{/*Buffer=*/nullptr};
527
528 EXPECT_EQ(BRD.toString(), "Deallocated 0x11");
529 EXPECT_EQ(BRDNull.toString(), "Deallocated (nil)");
530}
Declares internal event representations along the default CTOR definition.
#define TEST(test_suite_name, test_name)
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.
std::string toString() const override
Basic toString method, which may be overridden with own implementations.