Home | History | Annotate | Download | only in ADT
      1 //===----------- Triple.cpp - Triple unit tests ---------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "gtest/gtest.h"
     11 #include "llvm/ADT/Triple.h"
     12 
     13 using namespace llvm;
     14 
     15 namespace {
     16 
     17 TEST(TripleTest, BasicParsing) {
     18   Triple T;
     19 
     20   T = Triple("");
     21   EXPECT_EQ("", T.getArchName().str());
     22   EXPECT_EQ("", T.getVendorName().str());
     23   EXPECT_EQ("", T.getOSName().str());
     24   EXPECT_EQ("", T.getEnvironmentName().str());
     25 
     26   T = Triple("-");
     27   EXPECT_EQ("", T.getArchName().str());
     28   EXPECT_EQ("", T.getVendorName().str());
     29   EXPECT_EQ("", T.getOSName().str());
     30   EXPECT_EQ("", T.getEnvironmentName().str());
     31 
     32   T = Triple("--");
     33   EXPECT_EQ("", T.getArchName().str());
     34   EXPECT_EQ("", T.getVendorName().str());
     35   EXPECT_EQ("", T.getOSName().str());
     36   EXPECT_EQ("", T.getEnvironmentName().str());
     37 
     38   T = Triple("---");
     39   EXPECT_EQ("", T.getArchName().str());
     40   EXPECT_EQ("", T.getVendorName().str());
     41   EXPECT_EQ("", T.getOSName().str());
     42   EXPECT_EQ("", T.getEnvironmentName().str());
     43 
     44   T = Triple("----");
     45   EXPECT_EQ("", T.getArchName().str());
     46   EXPECT_EQ("", T.getVendorName().str());
     47   EXPECT_EQ("", T.getOSName().str());
     48   EXPECT_EQ("-", T.getEnvironmentName().str());
     49 
     50   T = Triple("a");
     51   EXPECT_EQ("a", T.getArchName().str());
     52   EXPECT_EQ("", T.getVendorName().str());
     53   EXPECT_EQ("", T.getOSName().str());
     54   EXPECT_EQ("", T.getEnvironmentName().str());
     55 
     56   T = Triple("a-b");
     57   EXPECT_EQ("a", T.getArchName().str());
     58   EXPECT_EQ("b", T.getVendorName().str());
     59   EXPECT_EQ("", T.getOSName().str());
     60   EXPECT_EQ("", T.getEnvironmentName().str());
     61 
     62   T = Triple("a-b-c");
     63   EXPECT_EQ("a", T.getArchName().str());
     64   EXPECT_EQ("b", T.getVendorName().str());
     65   EXPECT_EQ("c", T.getOSName().str());
     66   EXPECT_EQ("", T.getEnvironmentName().str());
     67 
     68   T = Triple("a-b-c-d");
     69   EXPECT_EQ("a", T.getArchName().str());
     70   EXPECT_EQ("b", T.getVendorName().str());
     71   EXPECT_EQ("c", T.getOSName().str());
     72   EXPECT_EQ("d", T.getEnvironmentName().str());
     73 }
     74 
     75 TEST(TripleTest, ParsedIDs) {
     76   Triple T;
     77 
     78   T = Triple("i386-apple-darwin");
     79   EXPECT_EQ(Triple::x86, T.getArch());
     80   EXPECT_EQ(Triple::Apple, T.getVendor());
     81   EXPECT_EQ(Triple::Darwin, T.getOS());
     82   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
     83 
     84   T = Triple("x86_64-pc-linux-gnu");
     85   EXPECT_EQ(Triple::x86_64, T.getArch());
     86   EXPECT_EQ(Triple::PC, T.getVendor());
     87   EXPECT_EQ(Triple::Linux, T.getOS());
     88   EXPECT_EQ(Triple::GNU, T.getEnvironment());
     89 
     90   T = Triple("powerpc-bgp-linux");
     91   EXPECT_EQ(Triple::ppc, T.getArch());
     92   EXPECT_EQ(Triple::BGP, T.getVendor());
     93   EXPECT_EQ(Triple::Linux, T.getOS());
     94   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
     95 
     96   T = Triple("powerpc-bgp-cnk");
     97   EXPECT_EQ(Triple::ppc, T.getArch());
     98   EXPECT_EQ(Triple::BGP, T.getVendor());
     99   EXPECT_EQ(Triple::CNK, T.getOS());
    100   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
    101 
    102   T = Triple("powerpc64-bgq-linux");
    103   EXPECT_EQ(Triple::ppc64, T.getArch());
    104   EXPECT_EQ(Triple::BGQ, T.getVendor());
    105   EXPECT_EQ(Triple::Linux, T.getOS());
    106   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
    107 
    108   T = Triple("powerpc-ibm-aix");
    109   EXPECT_EQ(Triple::ppc, T.getArch());
    110   EXPECT_EQ(Triple::IBM, T.getVendor());
    111   EXPECT_EQ(Triple::AIX, T.getOS());
    112   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
    113 
    114   T = Triple("powerpc64-ibm-aix");
    115   EXPECT_EQ(Triple::ppc64, T.getArch());
    116   EXPECT_EQ(Triple::IBM, T.getVendor());
    117   EXPECT_EQ(Triple::AIX, T.getOS());
    118   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
    119 
    120   T = Triple("powerpc-dunno-notsure");
    121   EXPECT_EQ(Triple::ppc, T.getArch());
    122   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
    123   EXPECT_EQ(Triple::UnknownOS, T.getOS());
    124   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
    125 
    126   T = Triple("arm-none-none-eabi");
    127   EXPECT_EQ(Triple::arm, T.getArch());
    128   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
    129   EXPECT_EQ(Triple::UnknownOS, T.getOS());
    130   EXPECT_EQ(Triple::EABI, T.getEnvironment());
    131 
    132   T = Triple("huh");
    133   EXPECT_EQ(Triple::UnknownArch, T.getArch());
    134 }
    135 
    136 static std::string Join(StringRef A, StringRef B, StringRef C) {
    137   std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C;
    138   return Str;
    139 }
    140 
    141 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
    142   std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; Str += '-';
    143   Str += D; return Str;
    144 }
    145 
    146 TEST(TripleTest, Normalization) {
    147 
    148   EXPECT_EQ("", Triple::normalize(""));
    149   EXPECT_EQ("-", Triple::normalize("-"));
    150   EXPECT_EQ("--", Triple::normalize("--"));
    151   EXPECT_EQ("---", Triple::normalize("---"));
    152   EXPECT_EQ("----", Triple::normalize("----"));
    153 
    154   EXPECT_EQ("a", Triple::normalize("a"));
    155   EXPECT_EQ("a-b", Triple::normalize("a-b"));
    156   EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
    157   EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
    158 
    159   EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
    160   EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
    161   EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
    162   EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
    163 
    164   EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
    165   EXPECT_EQ("-pc-b-c", Triple::normalize("pc-b-c"));
    166   EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
    167   EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
    168 
    169   EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
    170   EXPECT_EQ("--linux-b-c", Triple::normalize("linux-b-c"));
    171   EXPECT_EQ("a--linux-c", Triple::normalize("a-linux-c"));
    172 
    173   EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
    174   EXPECT_EQ("i386-pc-", Triple::normalize("-pc-i386"));
    175   EXPECT_EQ("-pc-linux-c", Triple::normalize("linux-pc-c"));
    176   EXPECT_EQ("-pc-linux", Triple::normalize("linux-pc-"));
    177 
    178   EXPECT_EQ("i386", Triple::normalize("i386"));
    179   EXPECT_EQ("-pc", Triple::normalize("pc"));
    180   EXPECT_EQ("--linux", Triple::normalize("linux"));
    181 
    182   EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-gnu-linux"));
    183 
    184   // Check that normalizing a permutated set of valid components returns a
    185   // triple with the unpermuted components.
    186   StringRef C[4];
    187   for (int Arch = 1+Triple::UnknownArch; Arch <= Triple::amdil; ++Arch) {
    188     C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
    189     for (int Vendor = 1+Triple::UnknownVendor; Vendor <= Triple::PC;
    190          ++Vendor) {
    191       C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
    192       for (int OS = 1+Triple::UnknownOS; OS <= Triple::Minix; ++OS) {
    193         if (OS == Triple::Cygwin || OS == Triple::MinGW32 || OS == Triple::Win32)
    194           continue;
    195 
    196         C[2] = Triple::getOSTypeName(Triple::OSType(OS));
    197 
    198         std::string E = Join(C[0], C[1], C[2]);
    199         EXPECT_EQ(E, Triple::normalize(Join(C[0], C[1], C[2])));
    200 
    201         EXPECT_EQ(E, Triple::normalize(Join(C[0], C[2], C[1])));
    202         EXPECT_EQ(E, Triple::normalize(Join(C[1], C[2], C[0])));
    203         EXPECT_EQ(E, Triple::normalize(Join(C[1], C[0], C[2])));
    204         EXPECT_EQ(E, Triple::normalize(Join(C[2], C[0], C[1])));
    205         EXPECT_EQ(E, Triple::normalize(Join(C[2], C[1], C[0])));
    206 
    207         for (int Env = 1 + Triple::UnknownEnvironment; Env <= Triple::Android;
    208              ++Env) {
    209           C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
    210 
    211           std::string F = Join(C[0], C[1], C[2], C[3]);
    212           EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[2], C[3])));
    213 
    214           EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[3], C[2])));
    215           EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[3], C[1])));
    216           EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[1], C[3])));
    217           EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[1], C[2])));
    218           EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[2], C[1])));
    219           EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[3], C[0])));
    220           EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[0], C[3])));
    221           EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[0], C[2])));
    222           EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[2], C[0])));
    223           EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[2], C[3])));
    224           EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[3], C[2])));
    225           EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[0], C[1])));
    226           EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[1], C[0])));
    227           EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[1], C[3])));
    228           EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[3], C[1])));
    229           EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[3], C[0])));
    230           EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[0], C[3])));
    231           EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[1], C[2])));
    232           EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[2], C[1])));
    233           EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[2], C[0])));
    234           EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[0], C[2])));
    235           EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[0], C[1])));
    236           EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[1], C[0])));
    237         }
    238       }
    239     }
    240   }
    241 
    242   // Various real-world funky triples.  The value returned by GCC's config.sub
    243   // is given in the comment.
    244   EXPECT_EQ("i386--windows-gnu", Triple::normalize("i386-mingw32")); // i386-pc-mingw32
    245   EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
    246   EXPECT_EQ("i486--linux-gnu", Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
    247   EXPECT_EQ("i386-redhat-linux", Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
    248   EXPECT_EQ("i686--linux", Triple::normalize("i686-linux")); // i686-pc-linux-gnu
    249   EXPECT_EQ("arm-none--eabi", Triple::normalize("arm-none-eabi")); // arm-none-eabi
    250 }
    251 
    252 TEST(TripleTest, MutateName) {
    253   Triple T;
    254   EXPECT_EQ(Triple::UnknownArch, T.getArch());
    255   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
    256   EXPECT_EQ(Triple::UnknownOS, T.getOS());
    257   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
    258 
    259   T.setArchName("i386");
    260   EXPECT_EQ(Triple::x86, T.getArch());
    261   EXPECT_EQ("i386--", T.getTriple());
    262 
    263   T.setVendorName("pc");
    264   EXPECT_EQ(Triple::x86, T.getArch());
    265   EXPECT_EQ(Triple::PC, T.getVendor());
    266   EXPECT_EQ("i386-pc-", T.getTriple());
    267 
    268   T.setOSName("linux");
    269   EXPECT_EQ(Triple::x86, T.getArch());
    270   EXPECT_EQ(Triple::PC, T.getVendor());
    271   EXPECT_EQ(Triple::Linux, T.getOS());
    272   EXPECT_EQ("i386-pc-linux", T.getTriple());
    273 
    274   T.setEnvironmentName("gnu");
    275   EXPECT_EQ(Triple::x86, T.getArch());
    276   EXPECT_EQ(Triple::PC, T.getVendor());
    277   EXPECT_EQ(Triple::Linux, T.getOS());
    278   EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
    279 
    280   T.setOSName("freebsd");
    281   EXPECT_EQ(Triple::x86, T.getArch());
    282   EXPECT_EQ(Triple::PC, T.getVendor());
    283   EXPECT_EQ(Triple::FreeBSD, T.getOS());
    284   EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
    285 
    286   T.setOSAndEnvironmentName("darwin");
    287   EXPECT_EQ(Triple::x86, T.getArch());
    288   EXPECT_EQ(Triple::PC, T.getVendor());
    289   EXPECT_EQ(Triple::Darwin, T.getOS());
    290   EXPECT_EQ("i386-pc-darwin", T.getTriple());
    291 
    292 }
    293 
    294 TEST(TripleTest, BitWidthPredicates) {
    295   Triple T;
    296   EXPECT_FALSE(T.isArch16Bit());
    297   EXPECT_FALSE(T.isArch32Bit());
    298   EXPECT_FALSE(T.isArch64Bit());
    299 
    300   T.setArch(Triple::arm);
    301   EXPECT_FALSE(T.isArch16Bit());
    302   EXPECT_TRUE(T.isArch32Bit());
    303   EXPECT_FALSE(T.isArch64Bit());
    304 
    305   T.setArch(Triple::hexagon);
    306   EXPECT_FALSE(T.isArch16Bit());
    307   EXPECT_TRUE(T.isArch32Bit());
    308   EXPECT_FALSE(T.isArch64Bit());
    309 
    310   T.setArch(Triple::mips);
    311   EXPECT_FALSE(T.isArch16Bit());
    312   EXPECT_TRUE(T.isArch32Bit());
    313   EXPECT_FALSE(T.isArch64Bit());
    314 
    315   T.setArch(Triple::mips64);
    316   EXPECT_FALSE(T.isArch16Bit());
    317   EXPECT_FALSE(T.isArch32Bit());
    318   EXPECT_TRUE(T.isArch64Bit());
    319 
    320   T.setArch(Triple::msp430);
    321   EXPECT_TRUE(T.isArch16Bit());
    322   EXPECT_FALSE(T.isArch32Bit());
    323   EXPECT_FALSE(T.isArch64Bit());
    324 
    325   T.setArch(Triple::ppc);
    326   EXPECT_FALSE(T.isArch16Bit());
    327   EXPECT_TRUE(T.isArch32Bit());
    328   EXPECT_FALSE(T.isArch64Bit());
    329 
    330   T.setArch(Triple::ppc64);
    331   EXPECT_FALSE(T.isArch16Bit());
    332   EXPECT_FALSE(T.isArch32Bit());
    333   EXPECT_TRUE(T.isArch64Bit());
    334 
    335   T.setArch(Triple::x86);
    336   EXPECT_FALSE(T.isArch16Bit());
    337   EXPECT_TRUE(T.isArch32Bit());
    338   EXPECT_FALSE(T.isArch64Bit());
    339 
    340   T.setArch(Triple::x86_64);
    341   EXPECT_FALSE(T.isArch16Bit());
    342   EXPECT_FALSE(T.isArch32Bit());
    343   EXPECT_TRUE(T.isArch64Bit());
    344 }
    345 
    346 TEST(TripleTest, BitWidthArchVariants) {
    347   Triple T;
    348   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
    349   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
    350 
    351   T.setArch(Triple::UnknownArch);
    352   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
    353   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
    354 
    355   T.setArch(Triple::mips);
    356   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
    357   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
    358 
    359   T.setArch(Triple::mipsel);
    360   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
    361   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
    362 
    363   T.setArch(Triple::ppc);
    364   EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
    365   EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
    366 
    367   T.setArch(Triple::nvptx);
    368   EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
    369   EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
    370 
    371   T.setArch(Triple::sparc);
    372   EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
    373   EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
    374 
    375   T.setArch(Triple::x86);
    376   EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
    377   EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
    378 
    379   T.setArch(Triple::mips64);
    380   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
    381   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
    382 
    383   T.setArch(Triple::mips64el);
    384   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
    385   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
    386 
    387   T.setArch(Triple::ppc64);
    388   EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
    389   EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
    390 
    391   T.setArch(Triple::nvptx64);
    392   EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
    393   EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
    394 
    395   T.setArch(Triple::sparcv9);
    396   EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
    397   EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
    398 
    399   T.setArch(Triple::x86_64);
    400   EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
    401   EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
    402 }
    403 
    404 TEST(TripleTest, getOSVersion) {
    405   Triple T;
    406   unsigned Major, Minor, Micro;
    407 
    408   T = Triple("i386-apple-darwin9");
    409   EXPECT_TRUE(T.isMacOSX());
    410   EXPECT_FALSE(T.isiOS());
    411   EXPECT_FALSE(T.isArch16Bit());
    412   EXPECT_TRUE(T.isArch32Bit());
    413   EXPECT_FALSE(T.isArch64Bit());
    414   T.getMacOSXVersion(Major, Minor, Micro);
    415   EXPECT_EQ((unsigned)10, Major);
    416   EXPECT_EQ((unsigned)5, Minor);
    417   EXPECT_EQ((unsigned)0, Micro);
    418   T.getiOSVersion(Major, Minor, Micro);
    419   EXPECT_EQ((unsigned)5, Major);
    420   EXPECT_EQ((unsigned)0, Minor);
    421   EXPECT_EQ((unsigned)0, Micro);
    422 
    423   T = Triple("x86_64-apple-darwin9");
    424   EXPECT_TRUE(T.isMacOSX());
    425   EXPECT_FALSE(T.isiOS());
    426   EXPECT_FALSE(T.isArch16Bit());
    427   EXPECT_FALSE(T.isArch32Bit());
    428   EXPECT_TRUE(T.isArch64Bit());
    429   T.getMacOSXVersion(Major, Minor, Micro);
    430   EXPECT_EQ((unsigned)10, Major);
    431   EXPECT_EQ((unsigned)5, Minor);
    432   EXPECT_EQ((unsigned)0, Micro);
    433   T.getiOSVersion(Major, Minor, Micro);
    434   EXPECT_EQ((unsigned)5, Major);
    435   EXPECT_EQ((unsigned)0, Minor);
    436   EXPECT_EQ((unsigned)0, Micro);
    437 
    438   T = Triple("x86_64-apple-macosx");
    439   EXPECT_TRUE(T.isMacOSX());
    440   EXPECT_FALSE(T.isiOS());
    441   EXPECT_FALSE(T.isArch16Bit());
    442   EXPECT_FALSE(T.isArch32Bit());
    443   EXPECT_TRUE(T.isArch64Bit());
    444   T.getMacOSXVersion(Major, Minor, Micro);
    445   EXPECT_EQ((unsigned)10, Major);
    446   EXPECT_EQ((unsigned)4, Minor);
    447   EXPECT_EQ((unsigned)0, Micro);
    448   T.getiOSVersion(Major, Minor, Micro);
    449   EXPECT_EQ((unsigned)5, Major);
    450   EXPECT_EQ((unsigned)0, Minor);
    451   EXPECT_EQ((unsigned)0, Micro);
    452 
    453   T = Triple("x86_64-apple-macosx10.7");
    454   EXPECT_TRUE(T.isMacOSX());
    455   EXPECT_FALSE(T.isiOS());
    456   EXPECT_FALSE(T.isArch16Bit());
    457   EXPECT_FALSE(T.isArch32Bit());
    458   EXPECT_TRUE(T.isArch64Bit());
    459   T.getMacOSXVersion(Major, Minor, Micro);
    460   EXPECT_EQ((unsigned)10, Major);
    461   EXPECT_EQ((unsigned)7, Minor);
    462   EXPECT_EQ((unsigned)0, Micro);
    463   T.getiOSVersion(Major, Minor, Micro);
    464   EXPECT_EQ((unsigned)5, Major);
    465   EXPECT_EQ((unsigned)0, Minor);
    466   EXPECT_EQ((unsigned)0, Micro);
    467 
    468   T = Triple("armv7-apple-ios");
    469   EXPECT_FALSE(T.isMacOSX());
    470   EXPECT_TRUE(T.isiOS());
    471   EXPECT_FALSE(T.isArch16Bit());
    472   EXPECT_TRUE(T.isArch32Bit());
    473   EXPECT_FALSE(T.isArch64Bit());
    474   T.getMacOSXVersion(Major, Minor, Micro);
    475   EXPECT_EQ((unsigned)10, Major);
    476   EXPECT_EQ((unsigned)4, Minor);
    477   EXPECT_EQ((unsigned)0, Micro);
    478   T.getiOSVersion(Major, Minor, Micro);
    479   EXPECT_EQ((unsigned)5, Major);
    480   EXPECT_EQ((unsigned)0, Minor);
    481   EXPECT_EQ((unsigned)0, Micro);
    482 
    483   T = Triple("armv7-apple-ios7.0");
    484   EXPECT_FALSE(T.isMacOSX());
    485   EXPECT_TRUE(T.isiOS());
    486   EXPECT_FALSE(T.isArch16Bit());
    487   EXPECT_TRUE(T.isArch32Bit());
    488   EXPECT_FALSE(T.isArch64Bit());
    489   T.getMacOSXVersion(Major, Minor, Micro);
    490   EXPECT_EQ((unsigned)10, Major);
    491   EXPECT_EQ((unsigned)4, Minor);
    492   EXPECT_EQ((unsigned)0, Micro);
    493   T.getiOSVersion(Major, Minor, Micro);
    494   EXPECT_EQ((unsigned)7, Major);
    495   EXPECT_EQ((unsigned)0, Minor);
    496   EXPECT_EQ((unsigned)0, Micro);
    497 }
    498 
    499 TEST(TripleTest, FileFormat) {
    500   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());
    501   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());
    502   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());
    503   EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());
    504   EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());
    505 
    506   EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());
    507   EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());
    508   EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());
    509 
    510   EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
    511 
    512   EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
    513   EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
    514 
    515   Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
    516   EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());
    517 
    518   Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));
    519   EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());
    520 
    521   Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));
    522   EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());
    523 
    524   Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));
    525   EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());
    526 
    527   Triple T = Triple("");
    528   T.setObjectFormat(Triple::ELF);
    529   EXPECT_EQ(Triple::ELF, T.getObjectFormat());
    530 }
    531 
    532 TEST(TripleTest, NormalizeWindows) {
    533   EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));
    534   EXPECT_EQ("i686--windows-msvc", Triple::normalize("i686-win32"));
    535   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));
    536   EXPECT_EQ("i686--windows-gnu", Triple::normalize("i686-mingw32"));
    537   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));
    538   EXPECT_EQ("i686--windows-gnu", Triple::normalize("i686-mingw32-w64"));
    539   EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));
    540   EXPECT_EQ("i686--windows-cygnus", Triple::normalize("i686-cygwin"));
    541 
    542   EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));
    543   EXPECT_EQ("x86_64--windows-msvc", Triple::normalize("x86_64-win32"));
    544   EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));
    545   EXPECT_EQ("x86_64--windows-gnu", Triple::normalize("x86_64-mingw32"));
    546   EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32-w64"));
    547   EXPECT_EQ("x86_64--windows-gnu", Triple::normalize("x86_64-mingw32-w64"));
    548 
    549   EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));
    550   EXPECT_EQ("i686--windows-elf", Triple::normalize("i686-win32-elf"));
    551   EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));
    552   EXPECT_EQ("i686--windows-macho", Triple::normalize("i686-win32-macho"));
    553 
    554   EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));
    555   EXPECT_EQ("x86_64--windows-elf", Triple::normalize("x86_64-win32-elf"));
    556   EXPECT_EQ("x86_64-pc-windows-macho", Triple::normalize("x86_64-pc-win32-macho"));
    557   EXPECT_EQ("x86_64--windows-macho", Triple::normalize("x86_64-win32-macho"));
    558 
    559   EXPECT_EQ("i686-pc-windows-cygnus",
    560             Triple::normalize("i686-pc-windows-cygnus"));
    561   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));
    562   EXPECT_EQ("i686-pc-windows-itanium", Triple::normalize("i686-pc-windows-itanium"));
    563   EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
    564 
    565   EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-windows-elf-elf"));
    566 }
    567 }
    568