| //===- llvm/unittests/Frontend/OpenMPDirectiveNameTest.cpp ----------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/ADT/DenseMap.h" |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/Frontend/OpenMP/OMP.h" |
| #include "gtest/gtest.h" |
| |
| using namespace llvm; |
| using namespace llvm::omp; |
| |
| const DenseMap<Directive, StringRef> &Expected52() { |
| static const DenseMap<Directive, StringRef> Names{ |
| {OMPD_begin_declare_target, "begin declare target"}, |
| {OMPD_begin_declare_variant, "begin declare variant"}, |
| {OMPD_cancellation_point, "cancellation point"}, |
| {OMPD_declare_mapper, "declare mapper"}, |
| {OMPD_declare_reduction, "declare reduction"}, |
| {OMPD_declare_simd, "declare simd"}, |
| {OMPD_declare_target, "declare target"}, |
| {OMPD_declare_variant, "declare variant"}, |
| {OMPD_end_declare_target, "end declare target"}, |
| {OMPD_end_declare_variant, "end declare variant"}, |
| {OMPD_target_data, "target data"}, |
| {OMPD_target_enter_data, "target enter data"}, |
| {OMPD_target_exit_data, "target exit data"}, |
| {OMPD_target_update, "target update"}, |
| }; |
| return Names; |
| } |
| |
| const DenseMap<Directive, StringRef> &Expected60() { |
| static const DenseMap<Directive, StringRef> Names{ |
| {OMPD_begin_declare_target, "begin declare_target"}, |
| {OMPD_begin_declare_variant, "begin declare_variant"}, |
| {OMPD_cancellation_point, "cancellation_point"}, |
| {OMPD_declare_mapper, "declare_mapper"}, |
| {OMPD_declare_reduction, "declare_reduction"}, |
| {OMPD_declare_simd, "declare_simd"}, |
| {OMPD_declare_target, "declare_target"}, |
| {OMPD_declare_variant, "declare_variant"}, |
| {OMPD_end_declare_target, "end declare_target"}, |
| {OMPD_end_declare_variant, "end declare_variant"}, |
| {OMPD_target_data, "target_data"}, |
| {OMPD_target_enter_data, "target_enter_data"}, |
| {OMPD_target_exit_data, "target_exit_data"}, |
| {OMPD_target_update, "target_update"}, |
| }; |
| return Names; |
| } |
| |
| class VersionTest : public testing::TestWithParam<unsigned> { |
| public: |
| void SetUp() override { |
| Version = GetParam(); |
| |
| if (Version < 60) |
| KindToName = &Expected52(); |
| else |
| KindToName = &Expected60(); |
| } |
| |
| const DenseMap<Directive, StringRef> *KindToName; |
| unsigned Version; |
| }; |
| |
| INSTANTIATE_TEST_SUITE_P(OpenMPDirectiveNames, VersionTest, |
| testing::ValuesIn(getOpenMPVersions())); |
| |
| TEST_P(VersionTest, DirectiveName) { |
| for (auto [Kind, Name] : *KindToName) |
| ASSERT_EQ(Name, getOpenMPDirectiveName(Kind, Version)); |
| } |
| |
| TEST(OpenMPDirectiveNames, DirectiveKind52) { |
| for (auto [Kind, Name] : Expected52()) { |
| auto [K, R] = getOpenMPDirectiveKindAndVersions(Name); |
| ASSERT_EQ(K, Kind); |
| // Expect the name to be valid in 5.2, but not in 6.0. |
| EXPECT_TRUE(52 <= R.Max && R.Max < 60); |
| } |
| } |
| |
| TEST(OpenMPDirectiveNames, DirectiveKind60) { |
| for (auto [Kind, Name] : Expected60()) { |
| auto [K, R] = getOpenMPDirectiveKindAndVersions(Name); |
| ASSERT_EQ(K, Kind); |
| // Expect the name to be valid in 6.0 and later. |
| EXPECT_TRUE(60 <= R.Min); |
| } |
| } |