@@ -1238,6 +1238,132 @@ TEST(TripleTest, Normalization) {
12381238
12391239 EXPECT_EQ (" x86_64-unknown-linux-gnu" , Triple::normalize (" x86_64-gnu-linux" ));
12401240
1241+ EXPECT_EQ (" a-unknown-unknown" ,
1242+ Triple::normalize (" a" , Triple::CanonicalForm::THREE_IDENT));
1243+ EXPECT_EQ (" a-b-unknown" ,
1244+ Triple::normalize (" a-b" , Triple::CanonicalForm::THREE_IDENT));
1245+ EXPECT_EQ (" a-b-c" ,
1246+ Triple::normalize (" a-b-c" , Triple::CanonicalForm::THREE_IDENT));
1247+ EXPECT_EQ (" a-b-c" ,
1248+ Triple::normalize (" a-b-c-d" , Triple::CanonicalForm::THREE_IDENT));
1249+ EXPECT_EQ (" a-b-c" ,
1250+ Triple::normalize (" a-b-c-d-e" , Triple::CanonicalForm::THREE_IDENT));
1251+
1252+ EXPECT_EQ (" a-unknown-unknown-unknown" ,
1253+ Triple::normalize (" a" , Triple::CanonicalForm::FOUR_IDENT));
1254+ EXPECT_EQ (" a-b-unknown-unknown" ,
1255+ Triple::normalize (" a-b" , Triple::CanonicalForm::FOUR_IDENT));
1256+ EXPECT_EQ (" a-b-c-unknown" ,
1257+ Triple::normalize (" a-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1258+ EXPECT_EQ (" a-b-c-d" ,
1259+ Triple::normalize (" a-b-c-d" , Triple::CanonicalForm::FOUR_IDENT));
1260+ EXPECT_EQ (" a-b-c-d" ,
1261+ Triple::normalize (" a-b-c-d-e" , Triple::CanonicalForm::FOUR_IDENT));
1262+
1263+ EXPECT_EQ (" a-unknown-unknown-unknown-unknown" ,
1264+ Triple::normalize (" a" , Triple::CanonicalForm::FIVE_IDENT));
1265+ EXPECT_EQ (" a-b-unknown-unknown-unknown" ,
1266+ Triple::normalize (" a-b" , Triple::CanonicalForm::FIVE_IDENT));
1267+ EXPECT_EQ (" a-b-c-unknown-unknown" ,
1268+ Triple::normalize (" a-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1269+ EXPECT_EQ (" a-b-c-d-unknown" ,
1270+ Triple::normalize (" a-b-c-d" , Triple::CanonicalForm::FIVE_IDENT));
1271+ EXPECT_EQ (" a-b-c-d-e" ,
1272+ Triple::normalize (" a-b-c-d-e" , Triple::CanonicalForm::FIVE_IDENT));
1273+
1274+ EXPECT_EQ (" i386-b-c-unknown" ,
1275+ Triple::normalize (" i386-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1276+ EXPECT_EQ (" i386-b-c-unknown-unknown" ,
1277+ Triple::normalize (" i386-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1278+
1279+ EXPECT_EQ (" i386-a-c-unknown" ,
1280+ Triple::normalize (" a-i386-c" , Triple::CanonicalForm::FOUR_IDENT));
1281+ EXPECT_EQ (" i386-a-c-unknown-unknown" ,
1282+ Triple::normalize (" a-i386-c" , Triple::CanonicalForm::FIVE_IDENT));
1283+
1284+ EXPECT_EQ (" i386-a-b-unknown" ,
1285+ Triple::normalize (" a-b-i386" , Triple::CanonicalForm::FOUR_IDENT));
1286+ EXPECT_EQ (" i386-a-b-c" ,
1287+ Triple::normalize (" a-b-c-i386" , Triple::CanonicalForm::FOUR_IDENT));
1288+
1289+ EXPECT_EQ (" a-pc-c-unknown" ,
1290+ Triple::normalize (" a-pc-c" , Triple::CanonicalForm::FOUR_IDENT));
1291+ EXPECT_EQ (" unknown-pc-b-c" ,
1292+ Triple::normalize (" pc-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1293+ EXPECT_EQ (" a-pc-b-unknown" ,
1294+ Triple::normalize (" a-b-pc" , Triple::CanonicalForm::FOUR_IDENT));
1295+ EXPECT_EQ (" a-pc-b-c" ,
1296+ Triple::normalize (" a-b-c-pc" , Triple::CanonicalForm::FOUR_IDENT));
1297+
1298+ EXPECT_EQ (" a-b-linux-unknown" ,
1299+ Triple::normalize (" a-b-linux" , Triple::CanonicalForm::FOUR_IDENT));
1300+ // We lose `-c` here as expected.
1301+ EXPECT_EQ (" unknown-unknown-linux-b" ,
1302+ Triple::normalize (" linux-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1303+ EXPECT_EQ (" a-unknown-linux-c" ,
1304+ Triple::normalize (" a-linux-c" , Triple::CanonicalForm::FOUR_IDENT));
1305+
1306+ EXPECT_EQ (" i386-pc-a-unknown" ,
1307+ Triple::normalize (" a-pc-i386" , Triple::CanonicalForm::FOUR_IDENT));
1308+ EXPECT_EQ (" i386-pc-unknown-unknown" ,
1309+ Triple::normalize (" -pc-i386" , Triple::CanonicalForm::FOUR_IDENT));
1310+ EXPECT_EQ (" unknown-pc-linux-c" ,
1311+ Triple::normalize (" linux-pc-c" , Triple::CanonicalForm::FOUR_IDENT));
1312+ EXPECT_EQ (" unknown-pc-linux-unknown" ,
1313+ Triple::normalize (" linux-pc-" , Triple::CanonicalForm::FOUR_IDENT));
1314+
1315+ EXPECT_EQ (" i386-unknown-unknown-unknown" ,
1316+ Triple::normalize (" i386" , Triple::CanonicalForm::FOUR_IDENT));
1317+ EXPECT_EQ (" unknown-pc-unknown-unknown" ,
1318+ Triple::normalize (" pc" , Triple::CanonicalForm::FOUR_IDENT));
1319+ EXPECT_EQ (" unknown-unknown-linux-unknown" ,
1320+ Triple::normalize (" linux" , Triple::CanonicalForm::FOUR_IDENT));
1321+
1322+ EXPECT_EQ (
1323+ " x86_64-unknown-linux-gnu" ,
1324+ Triple::normalize (" x86_64-gnu-linux" , Triple::CanonicalForm::FOUR_IDENT));
1325+
1326+ EXPECT_EQ (" i386-a-b-unknown-unknown" ,
1327+ Triple::normalize (" a-b-i386" , Triple::CanonicalForm::FIVE_IDENT));
1328+ EXPECT_EQ (" i386-a-b-c-unknown" ,
1329+ Triple::normalize (" a-b-c-i386" , Triple::CanonicalForm::FIVE_IDENT));
1330+
1331+ EXPECT_EQ (" a-pc-c-unknown-unknown" ,
1332+ Triple::normalize (" a-pc-c" , Triple::CanonicalForm::FIVE_IDENT));
1333+ EXPECT_EQ (" unknown-pc-b-c-unknown" ,
1334+ Triple::normalize (" pc-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1335+ EXPECT_EQ (" a-pc-b-unknown-unknown" ,
1336+ Triple::normalize (" a-b-pc" , Triple::CanonicalForm::FIVE_IDENT));
1337+ EXPECT_EQ (" a-pc-b-c-unknown" ,
1338+ Triple::normalize (" a-b-c-pc" , Triple::CanonicalForm::FIVE_IDENT));
1339+
1340+ EXPECT_EQ (" a-b-linux-unknown-unknown" ,
1341+ Triple::normalize (" a-b-linux" , Triple::CanonicalForm::FIVE_IDENT));
1342+ EXPECT_EQ (" unknown-unknown-linux-b-c" ,
1343+ Triple::normalize (" linux-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1344+ EXPECT_EQ (" a-unknown-linux-c-unknown" ,
1345+ Triple::normalize (" a-linux-c" , Triple::CanonicalForm::FIVE_IDENT));
1346+
1347+ EXPECT_EQ (" i386-pc-a-unknown-unknown" ,
1348+ Triple::normalize (" a-pc-i386" , Triple::CanonicalForm::FIVE_IDENT));
1349+ EXPECT_EQ (" i386-pc-unknown-unknown-unknown" ,
1350+ Triple::normalize (" -pc-i386" , Triple::CanonicalForm::FIVE_IDENT));
1351+ EXPECT_EQ (" unknown-pc-linux-c-unknown" ,
1352+ Triple::normalize (" linux-pc-c" , Triple::CanonicalForm::FIVE_IDENT));
1353+ EXPECT_EQ (" unknown-pc-linux-unknown-unknown" ,
1354+ Triple::normalize (" linux-pc-" , Triple::CanonicalForm::FIVE_IDENT));
1355+
1356+ EXPECT_EQ (" i386-unknown-unknown-unknown-unknown" ,
1357+ Triple::normalize (" i386" , Triple::CanonicalForm::FIVE_IDENT));
1358+ EXPECT_EQ (" unknown-pc-unknown-unknown-unknown" ,
1359+ Triple::normalize (" pc" , Triple::CanonicalForm::FIVE_IDENT));
1360+ EXPECT_EQ (" unknown-unknown-linux-unknown-unknown" ,
1361+ Triple::normalize (" linux" , Triple::CanonicalForm::FIVE_IDENT));
1362+
1363+ EXPECT_EQ (
1364+ " x86_64-unknown-linux-gnu-unknown" ,
1365+ Triple::normalize (" x86_64-gnu-linux" , Triple::CanonicalForm::FIVE_IDENT));
1366+
12411367 // Check that normalizing a permutated set of valid components returns a
12421368 // triple with the unpermuted components.
12431369 //
0 commit comments