166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman//===----------- Triple.cpp - Triple unit tests ---------------------------===// 266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman// 366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman// The LLVM Compiler Infrastructure 466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman// 566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman// This file is distributed under the University of Illinois Open Source 666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman// License. See LICENSE.TXT for details. 766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman// 866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman//===----------------------------------------------------------------------===// 966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 1066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman#include "gtest/gtest.h" 1166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman#include "llvm/ADT/Triple.h" 1266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 1366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Baumanusing namespace llvm; 1466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 1566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Baumannamespace { 1666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 1766b8ab22586debccb1f787d4d52b7f042d4ddeb8John BaumanTEST(TripleTest, BasicParsing) { 1866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman Triple T; 1966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 2066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple(""); 2166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getArchName().str()); 2266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getVendorName().str()); 2366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 2466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 2566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 2666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("-"); 2766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getArchName().str()); 2866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getVendorName().str()); 2966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 3066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 3166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 3266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("--"); 3366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getArchName().str()); 3466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getVendorName().str()); 3566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 3666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 3766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 3866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("---"); 3966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getArchName().str()); 4066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getVendorName().str()); 4166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 4266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 4366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 4466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("----"); 4566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getArchName().str()); 4666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getVendorName().str()); 4766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 4866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("-", T.getEnvironmentName().str()); 4966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 5066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("a"); 5166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a", T.getArchName().str()); 5266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getVendorName().str()); 5366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 5466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 5566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 5666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("a-b"); 5766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a", T.getArchName().str()); 5866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("b", T.getVendorName().str()); 5966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getOSName().str()); 6066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 6166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 6266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("a-b-c"); 6366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a", T.getArchName().str()); 6466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("b", T.getVendorName().str()); 6566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("c", T.getOSName().str()); 6666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", T.getEnvironmentName().str()); 6766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 6866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("a-b-c-d"); 6966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a", T.getArchName().str()); 7066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("b", T.getVendorName().str()); 7166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("c", T.getOSName().str()); 7266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("d", T.getEnvironmentName().str()); 7366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 7466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 7566b8ab22586debccb1f787d4d52b7f042d4ddeb8John BaumanTEST(TripleTest, ParsedIDs) { 7666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman Triple T; 7766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 7866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("i386-apple-darwin"); 7966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 8066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::Apple, T.getVendor()); 8166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::Darwin, T.getOS()); 8266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 8366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 8466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("x86_64-pc-linux-gnu"); 8566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86_64, T.getArch()); 8666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::PC, T.getVendor()); 8766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::Linux, T.getOS()); 8866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::GNU, T.getEnvironment()); 8966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 9066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("powerpc-dunno-notsure"); 9166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::ppc, T.getArch()); 9266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 9366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownOS, T.getOS()); 9466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 9566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 9666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("arm-none-none-eabi"); 9766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::arm, T.getArch()); 9866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 9966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownOS, T.getOS()); 10066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::EABI, T.getEnvironment()); 10166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 10266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T = Triple("huh"); 10366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownArch, T.getArch()); 10466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 10566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 10666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Baumanstatic std::string Join(StringRef A, StringRef B, StringRef C) { 10766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; 10866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman return Str; 10966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 11066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 11166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Baumanstatic std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) { 11266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; Str += '-'; 11366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman Str += D; return Str; 11466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 11566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 11666b8ab22586debccb1f787d4d52b7f042d4ddeb8John BaumanTEST(TripleTest, Normalization) { 11766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 11866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("", Triple::normalize("")); 11966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("-", Triple::normalize("-")); 12066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("--", Triple::normalize("--")); 12166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("---", Triple::normalize("---")); 12266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("----", Triple::normalize("----")); 12366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 12466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a", Triple::normalize("a")); 12566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-b", Triple::normalize("a-b")); 12666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-b-c", Triple::normalize("a-b-c")); 12766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d")); 12866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 12966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c")); 13066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c")); 13166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386")); 13266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386")); 13366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 13466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c")); 13566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("-pc-b-c", Triple::normalize("pc-b-c")); 13666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc")); 13766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc")); 13866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 13966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux")); 14066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("--linux-b-c", Triple::normalize("linux-b-c")); 14166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a--linux-c", Triple::normalize("a-linux-c")); 14266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 14366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386")); 14466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-", Triple::normalize("-pc-i386")); 14566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("-pc-linux-c", Triple::normalize("linux-pc-c")); 14666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("-pc-linux", Triple::normalize("linux-pc-")); 14766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 14866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386", Triple::normalize("i386")); 14966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("-pc", Triple::normalize("pc")); 15066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("--linux", Triple::normalize("linux")); 15166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 15266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-gnu-linux")); 15366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 15466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // Check that normalizing a permutated set of valid components returns a 15566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // triple with the unpermuted components. 15666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman StringRef C[4]; 15766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman for (int Arch = 1+Triple::UnknownArch; Arch < Triple::InvalidArch; ++Arch) { 15866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 15966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman for (int Vendor = 1+Triple::UnknownVendor; Vendor <= Triple::PC; 16066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman ++Vendor) { 16166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 16266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman for (int OS = 1+Triple::UnknownOS; OS <= Triple::Minix; ++OS) { 16366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 16466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 16566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // If a value has multiple interpretations, then the permutation 16666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // test will inevitably fail. Currently this is only the case for 16766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // "psp" which parses as both an architecture and an O/S. 16866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman if (OS == Triple::Psp) 16966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman continue; 17066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 17166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman std::string E = Join(C[0], C[1], C[2]); 17266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(E, Triple::normalize(Join(C[0], C[1], C[2]))); 17366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 17466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(E, Triple::normalize(Join(C[0], C[2], C[1]))); 17566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(E, Triple::normalize(Join(C[1], C[2], C[0]))); 17666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(E, Triple::normalize(Join(C[1], C[0], C[2]))); 17766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(E, Triple::normalize(Join(C[2], C[0], C[1]))); 17866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(E, Triple::normalize(Join(C[2], C[1], C[0]))); 17966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 18066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman for (int Env = 1+Triple::UnknownEnvironment; Env <= Triple::MachO; 18166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman ++Env) { 18266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 18366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 18466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman std::string F = Join(C[0], C[1], C[2], C[3]); 18566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[2], C[3]))); 18666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 18766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[3], C[2]))); 18866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[3], C[1]))); 18966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[1], C[3]))); 19066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[1], C[2]))); 19166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[2], C[1]))); 19266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[3], C[0]))); 19366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[0], C[3]))); 19466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[0], C[2]))); 19566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[2], C[0]))); 19666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[2], C[3]))); 19766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[3], C[2]))); 19866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[0], C[1]))); 19966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[1], C[0]))); 20066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[1], C[3]))); 20166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[3], C[1]))); 20266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[3], C[0]))); 20366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[0], C[3]))); 20466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[1], C[2]))); 20566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[2], C[1]))); 20666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[2], C[0]))); 20766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[0], C[2]))); 20866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[0], C[1]))); 20966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[1], C[0]))); 21066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman } 21166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman } 21266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman } 21366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman } 21466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 21566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("a-b-psp", Triple::normalize("a-b-psp")); 21666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("psp-b-c", Triple::normalize("psp-b-c")); 21766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 21866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // Various real-world funky triples. The value returned by GCC's config.sub 21966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman // is given in the comment. 22066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386--mingw32", Triple::normalize("i386-mingw32")); // i386-pc-mingw32 22166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 22266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i486--linux-gnu", Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 22366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-redhat-linux", Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 22466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i686--linux", Triple::normalize("i686-linux")); // i686-pc-linux-gnu 22566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("arm-none--eabi", Triple::normalize("arm-none-eabi")); // arm-none-eabi 22666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 22766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 22866b8ab22586debccb1f787d4d52b7f042d4ddeb8John BaumanTEST(TripleTest, MutateName) { 22966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman Triple T; 23066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownArch, T.getArch()); 23166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 23266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownOS, T.getOS()); 23366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 23466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 23566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T.setArchName("i386"); 23666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 23766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386--", T.getTriple()); 23866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 23966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T.setVendorName("pc"); 24066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 24166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::PC, T.getVendor()); 24266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-", T.getTriple()); 24366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 24466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T.setOSName("linux"); 24566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 24666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::PC, T.getVendor()); 24766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::Linux, T.getOS()); 24866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-linux", T.getTriple()); 24966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 25066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T.setEnvironmentName("gnu"); 25166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 25266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::PC, T.getVendor()); 25366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::Linux, T.getOS()); 25466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 25566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 25666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T.setOSName("freebsd"); 25766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 25866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::PC, T.getVendor()); 25966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::FreeBSD, T.getOS()); 26066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 26166b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 26266b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman T.setOSAndEnvironmentName("darwin"); 26366b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::x86, T.getArch()); 26466b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::PC, T.getVendor()); 26566b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ(Triple::Darwin, T.getOS()); 26666b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman EXPECT_EQ("i386-pc-darwin", T.getTriple()); 26766b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 26866b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 26966b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman 27066b8ab22586debccb1f787d4d52b7f042d4ddeb8John Bauman} 271