diff --git a/openmp/tools/omptest/include/InternalEvent.h b/openmp/tools/omptest/include/InternalEvent.h index 1348c48f72005..743fad99ff4a0 100644 --- a/openmp/tools/omptest/include/InternalEvent.h +++ b/openmp/tools/omptest/include/InternalEvent.h @@ -371,6 +371,7 @@ struct BufferRecordDeallocation : public EventBase { // take precedence over the following default equality operator definition. bool operator==(const ParallelBegin &, const ParallelBegin &); bool operator==(const Work &, const Work &); +bool operator==(const Dispatch &, const Dispatch &); bool operator==(const ImplicitTask &, const ImplicitTask &); bool operator==(const SyncRegion &, const SyncRegion &); bool operator==(const Target &, const Target &); diff --git a/openmp/tools/omptest/src/InternalEventOperators.cpp b/openmp/tools/omptest/src/InternalEventOperators.cpp index 1ec33d574381f..dde64098ed31b 100644 --- a/openmp/tools/omptest/src/InternalEventOperators.cpp +++ b/openmp/tools/omptest/src/InternalEventOperators.cpp @@ -36,6 +36,11 @@ bool operator==(const Work &Expected, const Work &Observed) { isSameTaskData && isSameCount; } +bool operator==(const Dispatch &Expected, const Dispatch &Observed) { + bool isSameKind = (Expected.Kind == Observed.Kind); + return isSameKind; +} + bool operator==(const ImplicitTask &Expected, const ImplicitTask &Observed) { bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint); bool isSameActualParallelism = diff --git a/openmp/tools/omptest/test/unittests/internal-event-eq-test.cpp b/openmp/tools/omptest/test/unittests/internal-event-eq-test.cpp new file mode 100644 index 0000000000000..d30d6daecca5f --- /dev/null +++ b/openmp/tools/omptest/test/unittests/internal-event-eq-test.cpp @@ -0,0 +1,65 @@ +#include "InternalEvent.h" +#include +#include + +#include "gtest/gtest.h" + +using namespace omptest; + +TEST(InternalEvent_equality_ops, Dispatch_identity) { + 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 == D, true); +} + +TEST(InternalEvent_equality_ops, Dispatch_same) { + ompt_data_t DI{.ptr = (void *)0x33}; + internal::Dispatch D1{/*ParallelData=*/(ompt_data_t *)0x11, + /*TaskData=*/(ompt_data_t *)0x22, + /*Kind=*/ompt_dispatch_t::ompt_dispatch_section, + /*Instance=*/DI}; + + internal::Dispatch D2{/*ParallelData=*/(ompt_data_t *)0x11, + /*TaskData=*/(ompt_data_t *)0x22, + /*Kind=*/ompt_dispatch_t::ompt_dispatch_section, + /*Instance=*/DI}; + + EXPECT_EQ(D1 == D2, true); +} + +TEST(InternalEvent_equality_ops, Dispatch_different_kind) { + ompt_data_t DI{.ptr = (void *)0x33}; + internal::Dispatch D1{/*ParallelData=*/(ompt_data_t *)0x11, + /*TaskData=*/(ompt_data_t *)0x22, + /*Kind=*/ompt_dispatch_t::ompt_dispatch_section, + /*Instance=*/DI}; + + internal::Dispatch D2{/*ParallelData=*/(ompt_data_t *)0x11, + /*TaskData=*/(ompt_data_t *)0x22, + /*Kind=*/ompt_dispatch_t::ompt_dispatch_iteration, + /*Instance=*/DI}; + + // Demonstrate that 'Kind' is the only relevant field for equality. + EXPECT_EQ(D1 == D2, false); +} + +TEST(InternalEvent_equality_ops, Dispatch_same_kind_different_other) { + ompt_data_t DI1{.ptr = (void *)0x33}; + internal::Dispatch D1{/*ParallelData=*/(ompt_data_t *)0x11, + /*TaskData=*/(ompt_data_t *)0x22, + /*Kind=*/ompt_dispatch_t::ompt_dispatch_section, + /*Instance=*/DI1}; + + ompt_data_t DI2{.ptr = (void *)0x66}; + internal::Dispatch D2{/*ParallelData=*/(ompt_data_t *)0x44, + /*TaskData=*/(ompt_data_t *)0x55, + /*Kind=*/ompt_dispatch_t::ompt_dispatch_section, + /*Instance=*/DI2}; + + // Demonstrate that 'Kind' is the only relevant field for equality. + EXPECT_EQ(D1 == D2, true); +} diff --git a/openmp/tools/omptest/test/unittests/internal-event-test.cpp b/openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp similarity index 100% rename from openmp/tools/omptest/test/unittests/internal-event-test.cpp rename to openmp/tools/omptest/test/unittests/internal-event-tostring-test.cpp