Add a unit test for ArchSpec matching to document how it behaves (and test it).
authorAdrian Prantl <aprantl@apple.com>
Thu, 6 Dec 2018 00:43:55 +0000 (00:43 +0000)
committerAdrian Prantl <aprantl@apple.com>
Thu, 6 Dec 2018 00:43:55 +0000 (00:43 +0000)
llvm-svn: 348440

lldb/source/Utility/ArchSpec.cpp
lldb/unittests/Utility/ArchSpecTest.cpp

index 761d606..be51921 100644 (file)
@@ -1019,7 +1019,7 @@ bool ArchSpec::IsCompatibleMatch(const ArchSpec &rhs) const {
   return IsEqualTo(rhs, false);
 }
 
-static bool isCompatibleEnvironment(llvm::Triple::EnvironmentType lhs,
+static bool IsCompatibleEnvironment(llvm::Triple::EnvironmentType lhs,
                                     llvm::Triple::EnvironmentType rhs) {
   if (lhs == rhs)
     return true;
@@ -1096,7 +1096,7 @@ bool ArchSpec::IsEqualTo(const ArchSpec &rhs, bool exact_match) const {
     const llvm::Triple::EnvironmentType rhs_triple_env =
         rhs_triple.getEnvironment();
 
-    if (!isCompatibleEnvironment(lhs_triple_env, rhs_triple_env))
+    if (!IsCompatibleEnvironment(lhs_triple_env, rhs_triple_env))
       return false;
     return true;
   }
index d7397cb..a84112e 100644 (file)
@@ -171,3 +171,53 @@ TEST(ArchSpecTest, MergeFromMachOUnknown) {
   A.MergeFrom(B);
   ASSERT_EQ(A.GetCore(), ArchSpec::eCore_uknownMach64);
 }
+
+TEST(ArchSpecTest, Compatibility) {
+  {
+    ArchSpec A("x86_64-apple-macosx10.12");
+    ArchSpec B("x86_64-apple-macosx10.12");
+    ASSERT_TRUE(A.IsExactMatch(B));
+    ASSERT_TRUE(A.IsCompatibleMatch(B));
+  }
+  {
+    // The version information is auxiliary to support availablity but
+    // doesn't affect compatibility.
+    ArchSpec A("x86_64-apple-macosx10.11");
+    ArchSpec B("x86_64-apple-macosx10.12");
+    ASSERT_TRUE(A.IsExactMatch(B));
+    ASSERT_TRUE(A.IsCompatibleMatch(B));
+  }
+  {
+    ArchSpec A("x86_64-apple-macosx10.13");
+    ArchSpec B("x86_64h-apple-macosx10.13");
+    ASSERT_FALSE(A.IsExactMatch(B));
+    ASSERT_TRUE(A.IsCompatibleMatch(B));
+  }
+  {
+    ArchSpec A("x86_64-apple-macosx");
+    ArchSpec B("x86_64-apple-ios-simulator");
+    ASSERT_FALSE(A.IsExactMatch(B));
+    ASSERT_FALSE(A.IsCompatibleMatch(B));
+  }
+  {
+    ArchSpec A("x86_64-*-*");
+    ArchSpec B("x86_64-apple-ios-simulator");
+    ASSERT_FALSE(A.IsExactMatch(B));
+    ASSERT_FALSE(A.IsCompatibleMatch(B));
+  }
+  {
+    ArchSpec A("arm64-*-*");
+    ArchSpec B("arm64-apple-ios");
+    ASSERT_FALSE(A.IsExactMatch(B));
+    // FIXME: This looks unintuitive and we should investigate whether
+    // thi is the desired behavior.
+    ASSERT_FALSE(A.IsCompatibleMatch(B));
+  }
+  {
+    ArchSpec A("x86_64-*-*");
+    ArchSpec B("x86_64-apple-ios-simulator");
+    ASSERT_FALSE(A.IsExactMatch(B));
+    // FIXME: See above, though the extra environment complicates things.
+    ASSERT_FALSE(A.IsCompatibleMatch(B));
+  }
+}