Fix TargetParser unit tests for ARM / AArch64.
authorZachary Turner <zturner@google.com>
Fri, 5 Aug 2016 16:45:07 +0000 (16:45 +0000)
committerZachary Turner <zturner@google.com>
Fri, 5 Aug 2016 16:45:07 +0000 (16:45 +0000)
String pooling is not guaranteed by the standard, so if
you're comparing two different string literals for equality,
you have to use strcmp.

llvm-svn: 277831

llvm/unittests/Support/TargetParserTest.cpp

index ae96571..18a0816 100644 (file)
@@ -81,6 +81,13 @@ bool contains(const T (&array)[N], const T element) {
          std::end(array);
 }
 
+template <size_t N>
+bool contains(const char *(&array)[N], const char *element) {
+  return std::find_if(std::begin(array), std::end(array), [&](const char *S) {
+           return ::strcmp(S, element) == 0;
+         }) != std::end(array);
+}
+
 TEST(TargetParserTest, ARMArchName) {
   for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
        AK <= ARM::ArchKind::AK_LAST;
@@ -313,10 +320,12 @@ TEST(TargetParserTest, ARMparseCPUArch) {
       "cortex-a73",    "cyclone",       "exynos-m1",   "exynos-m2",   
       "iwmmxt",        "xscale",        "swift"};
 
-  for (const auto &ARMCPUName : kARMCPUNames)
-    EXPECT_TRUE(contains(CPU, ARMCPUName.Name)
-                    ? (ARM::AK_INVALID != ARM::parseCPUArch(ARMCPUName.Name))
-                    : (ARM::AK_INVALID == ARM::parseCPUArch(ARMCPUName.Name)));
+  for (const auto &ARMCPUName : kARMCPUNames) {
+    if (contains(CPU, ARMCPUName.Name))
+      EXPECT_NE(ARM::AK_INVALID, ARM::parseCPUArch(ARMCPUName.Name));
+    else
+      EXPECT_EQ(ARM::AK_INVALID, ARM::parseCPUArch(ARMCPUName.Name));
+  }
 }
 
 TEST(TargetParserTest, ARMparseArchEndianAndISA) {