@@ -1417,6 +1417,132 @@ TEST(TripleTest, Normalization) {
14171417
14181418 EXPECT_EQ (" x86_64-unknown-linux-gnu" , Triple::normalize (" x86_64-gnu-linux" ));
14191419
1420+ EXPECT_EQ (" a-unknown-unknown" ,
1421+ Triple::normalize (" a" , Triple::CanonicalForm::THREE_IDENT));
1422+ EXPECT_EQ (" a-b-unknown" ,
1423+ Triple::normalize (" a-b" , Triple::CanonicalForm::THREE_IDENT));
1424+ EXPECT_EQ (" a-b-c" ,
1425+ Triple::normalize (" a-b-c" , Triple::CanonicalForm::THREE_IDENT));
1426+ EXPECT_EQ (" a-b-c" ,
1427+ Triple::normalize (" a-b-c-d" , Triple::CanonicalForm::THREE_IDENT));
1428+ EXPECT_EQ (" a-b-c" ,
1429+ Triple::normalize (" a-b-c-d-e" , Triple::CanonicalForm::THREE_IDENT));
1430+
1431+ EXPECT_EQ (" a-unknown-unknown-unknown" ,
1432+ Triple::normalize (" a" , Triple::CanonicalForm::FOUR_IDENT));
1433+ EXPECT_EQ (" a-b-unknown-unknown" ,
1434+ Triple::normalize (" a-b" , Triple::CanonicalForm::FOUR_IDENT));
1435+ EXPECT_EQ (" a-b-c-unknown" ,
1436+ Triple::normalize (" a-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1437+ EXPECT_EQ (" a-b-c-d" ,
1438+ Triple::normalize (" a-b-c-d" , Triple::CanonicalForm::FOUR_IDENT));
1439+ EXPECT_EQ (" a-b-c-d" ,
1440+ Triple::normalize (" a-b-c-d-e" , Triple::CanonicalForm::FOUR_IDENT));
1441+
1442+ EXPECT_EQ (" a-unknown-unknown-unknown-unknown" ,
1443+ Triple::normalize (" a" , Triple::CanonicalForm::FIVE_IDENT));
1444+ EXPECT_EQ (" a-b-unknown-unknown-unknown" ,
1445+ Triple::normalize (" a-b" , Triple::CanonicalForm::FIVE_IDENT));
1446+ EXPECT_EQ (" a-b-c-unknown-unknown" ,
1447+ Triple::normalize (" a-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1448+ EXPECT_EQ (" a-b-c-d-unknown" ,
1449+ Triple::normalize (" a-b-c-d" , Triple::CanonicalForm::FIVE_IDENT));
1450+ EXPECT_EQ (" a-b-c-d-e" ,
1451+ Triple::normalize (" a-b-c-d-e" , Triple::CanonicalForm::FIVE_IDENT));
1452+
1453+ EXPECT_EQ (" i386-b-c-unknown" ,
1454+ Triple::normalize (" i386-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1455+ EXPECT_EQ (" i386-b-c-unknown-unknown" ,
1456+ Triple::normalize (" i386-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1457+
1458+ EXPECT_EQ (" i386-a-c-unknown" ,
1459+ Triple::normalize (" a-i386-c" , Triple::CanonicalForm::FOUR_IDENT));
1460+ EXPECT_EQ (" i386-a-c-unknown-unknown" ,
1461+ Triple::normalize (" a-i386-c" , Triple::CanonicalForm::FIVE_IDENT));
1462+
1463+ EXPECT_EQ (" i386-a-b-unknown" ,
1464+ Triple::normalize (" a-b-i386" , Triple::CanonicalForm::FOUR_IDENT));
1465+ EXPECT_EQ (" i386-a-b-c" ,
1466+ Triple::normalize (" a-b-c-i386" , Triple::CanonicalForm::FOUR_IDENT));
1467+
1468+ EXPECT_EQ (" a-pc-c-unknown" ,
1469+ Triple::normalize (" a-pc-c" , Triple::CanonicalForm::FOUR_IDENT));
1470+ EXPECT_EQ (" unknown-pc-b-c" ,
1471+ Triple::normalize (" pc-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1472+ EXPECT_EQ (" a-pc-b-unknown" ,
1473+ Triple::normalize (" a-b-pc" , Triple::CanonicalForm::FOUR_IDENT));
1474+ EXPECT_EQ (" a-pc-b-c" ,
1475+ Triple::normalize (" a-b-c-pc" , Triple::CanonicalForm::FOUR_IDENT));
1476+
1477+ EXPECT_EQ (" a-b-linux-unknown" ,
1478+ Triple::normalize (" a-b-linux" , Triple::CanonicalForm::FOUR_IDENT));
1479+ // We lose `-c` here as expected.
1480+ EXPECT_EQ (" unknown-unknown-linux-b" ,
1481+ Triple::normalize (" linux-b-c" , Triple::CanonicalForm::FOUR_IDENT));
1482+ EXPECT_EQ (" a-unknown-linux-c" ,
1483+ Triple::normalize (" a-linux-c" , Triple::CanonicalForm::FOUR_IDENT));
1484+
1485+ EXPECT_EQ (" i386-pc-a-unknown" ,
1486+ Triple::normalize (" a-pc-i386" , Triple::CanonicalForm::FOUR_IDENT));
1487+ EXPECT_EQ (" i386-pc-unknown-unknown" ,
1488+ Triple::normalize (" -pc-i386" , Triple::CanonicalForm::FOUR_IDENT));
1489+ EXPECT_EQ (" unknown-pc-linux-c" ,
1490+ Triple::normalize (" linux-pc-c" , Triple::CanonicalForm::FOUR_IDENT));
1491+ EXPECT_EQ (" unknown-pc-linux-unknown" ,
1492+ Triple::normalize (" linux-pc-" , Triple::CanonicalForm::FOUR_IDENT));
1493+
1494+ EXPECT_EQ (" i386-unknown-unknown-unknown" ,
1495+ Triple::normalize (" i386" , Triple::CanonicalForm::FOUR_IDENT));
1496+ EXPECT_EQ (" unknown-pc-unknown-unknown" ,
1497+ Triple::normalize (" pc" , Triple::CanonicalForm::FOUR_IDENT));
1498+ EXPECT_EQ (" unknown-unknown-linux-unknown" ,
1499+ Triple::normalize (" linux" , Triple::CanonicalForm::FOUR_IDENT));
1500+
1501+ EXPECT_EQ (
1502+ " x86_64-unknown-linux-gnu" ,
1503+ Triple::normalize (" x86_64-gnu-linux" , Triple::CanonicalForm::FOUR_IDENT));
1504+
1505+ EXPECT_EQ (" i386-a-b-unknown-unknown" ,
1506+ Triple::normalize (" a-b-i386" , Triple::CanonicalForm::FIVE_IDENT));
1507+ EXPECT_EQ (" i386-a-b-c-unknown" ,
1508+ Triple::normalize (" a-b-c-i386" , Triple::CanonicalForm::FIVE_IDENT));
1509+
1510+ EXPECT_EQ (" a-pc-c-unknown-unknown" ,
1511+ Triple::normalize (" a-pc-c" , Triple::CanonicalForm::FIVE_IDENT));
1512+ EXPECT_EQ (" unknown-pc-b-c-unknown" ,
1513+ Triple::normalize (" pc-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1514+ EXPECT_EQ (" a-pc-b-unknown-unknown" ,
1515+ Triple::normalize (" a-b-pc" , Triple::CanonicalForm::FIVE_IDENT));
1516+ EXPECT_EQ (" a-pc-b-c-unknown" ,
1517+ Triple::normalize (" a-b-c-pc" , Triple::CanonicalForm::FIVE_IDENT));
1518+
1519+ EXPECT_EQ (" a-b-linux-unknown-unknown" ,
1520+ Triple::normalize (" a-b-linux" , Triple::CanonicalForm::FIVE_IDENT));
1521+ EXPECT_EQ (" unknown-unknown-linux-b-c" ,
1522+ Triple::normalize (" linux-b-c" , Triple::CanonicalForm::FIVE_IDENT));
1523+ EXPECT_EQ (" a-unknown-linux-c-unknown" ,
1524+ Triple::normalize (" a-linux-c" , Triple::CanonicalForm::FIVE_IDENT));
1525+
1526+ EXPECT_EQ (" i386-pc-a-unknown-unknown" ,
1527+ Triple::normalize (" a-pc-i386" , Triple::CanonicalForm::FIVE_IDENT));
1528+ EXPECT_EQ (" i386-pc-unknown-unknown-unknown" ,
1529+ Triple::normalize (" -pc-i386" , Triple::CanonicalForm::FIVE_IDENT));
1530+ EXPECT_EQ (" unknown-pc-linux-c-unknown" ,
1531+ Triple::normalize (" linux-pc-c" , Triple::CanonicalForm::FIVE_IDENT));
1532+ EXPECT_EQ (" unknown-pc-linux-unknown-unknown" ,
1533+ Triple::normalize (" linux-pc-" , Triple::CanonicalForm::FIVE_IDENT));
1534+
1535+ EXPECT_EQ (" i386-unknown-unknown-unknown-unknown" ,
1536+ Triple::normalize (" i386" , Triple::CanonicalForm::FIVE_IDENT));
1537+ EXPECT_EQ (" unknown-pc-unknown-unknown-unknown" ,
1538+ Triple::normalize (" pc" , Triple::CanonicalForm::FIVE_IDENT));
1539+ EXPECT_EQ (" unknown-unknown-linux-unknown-unknown" ,
1540+ Triple::normalize (" linux" , Triple::CanonicalForm::FIVE_IDENT));
1541+
1542+ EXPECT_EQ (
1543+ " x86_64-unknown-linux-gnu-unknown" ,
1544+ Triple::normalize (" x86_64-gnu-linux" , Triple::CanonicalForm::FIVE_IDENT));
1545+
14201546 // Check that normalizing a permutated set of valid components returns a
14211547 // triple with the unpermuted components.
14221548 //
0 commit comments