Add a unit test for ArchSpec matching to document how it behaves (and test it).

llvm-svn: 348440
This commit is contained in:
Adrian Prantl 2018-12-06 00:43:55 +00:00
parent 3cd70b385d
commit 7b8a03751c
2 changed files with 52 additions and 2 deletions

View 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;
}

View 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));
}
}