diff --git a/src/AppInstallerCLITests/NameNormalization.cpp b/src/AppInstallerCLITests/NameNormalization.cpp index c4ab35e3fd..744805bda2 100644 --- a/src/AppInstallerCLITests/NameNormalization.cpp +++ b/src/AppInstallerCLITests/NameNormalization.cpp @@ -111,6 +111,13 @@ TEST_CASE("NameNorm_Architecture", "[name_norm]") REQUIRE(normer.Normalize("Name x86", {}).Architecture() == Architecture::X86); REQUIRE(normer.Normalize("Name x86_64", {}).Architecture() == Architecture::X64); REQUIRE(normer.Normalize("Name (64 bit)", {}).Architecture() == Architecture::X64); + REQUIRE(normer.Normalize("Name arm32", {}).Architecture() == Architecture::Arm); + REQUIRE(normer.Normalize("Name arm64", {}).Architecture() == Architecture::Arm64); + REQUIRE(normer.Normalize("Name aarch64", {}).Architecture() == Architecture::Arm64); + REQUIRE(normer.Normalize("Name armadillo", {}).Architecture() == Architecture::Unknown); + REQUIRE(normer.Normalize("Name armadillo", {}).Name() == "Namearmadillo"); + REQUIRE(normer.Normalize("ARM Compiler (x64)", {}).Architecture() == Architecture::X64); + REQUIRE(normer.Normalize("ARM Compiler (x64)", {}).Name() == "ARMCompiler"); REQUIRE(normer.Normalize("Name 32/64 bit", {}).Architecture() == Architecture::Unknown); REQUIRE(normer.Normalize("Fox86", {}).Architecture() == Architecture::Unknown); } diff --git a/src/AppInstallerCommonCore/NameNormalization.cpp b/src/AppInstallerCommonCore/NameNormalization.cpp index 361dfaf90e..1e108bb6b8 100644 --- a/src/AppInstallerCommonCore/NameNormalization.cpp +++ b/src/AppInstallerCommonCore/NameNormalization.cpp @@ -99,6 +99,14 @@ namespace AppInstaller::Utility { result = Architecture::X86; } + else if (Remove(ArchitectureArm64, value)) + { + result = Architecture::Arm64; + } + else if (Remove(ArchitectureArm, value)) + { + result = Architecture::Arm; + } return result; } @@ -242,6 +250,8 @@ namespace AppInstaller::Utility // Architecture Regex::Expression ArchitectureX32{ R"((?<=^|[^\p{L}\p{Nd}])(X32|X86)(?=\P{Nd}|$)(?:\sEDITION)?)", reOptions }; Regex::Expression ArchitectureX64{ R"((?<=^|[^\p{L}\p{Nd}])(X64|AMD64|X86([\p{Pd}\p{Pc}]64))(?=\P{Nd}|$)(?:\sEDITION)?)", reOptions }; + Regex::Expression ArchitectureArm64{ R"((?<=^|[^\p{L}\p{Nd}])(ARM64|AARCH64)(?=\P{Nd}|$)(?:\sEDITION)?)", reOptions }; + Regex::Expression ArchitectureArm{ R"((?<=^|[^\p{L}\p{Nd}])(ARM32)(?=\P{Nd}|$)(?:\sEDITION)?)", reOptions }; Regex::Expression Architecture32Bit{ R"((?<=^|[^\p{L}\p{Nd}])(32[\p{Pd}\p{Pc}\p{Z}]?BIT)S?(?:\sEDITION)?)", reOptions }; Regex::Expression Architecture64Bit{ R"((?<=^|[^\p{L}\p{Nd}])(64[\p{Pd}\p{Pc}\p{Z}]?BIT)S?(?:\sEDITION)?)", reOptions }; Regex::Expression Architecture32Or64Bit{ R"((?<=^|[^\p{L}\p{Nd}])((64[\\\/]32|32[\\\/]64)[\p{Pd}\p{Pc}\p{Z}]?BIT)S?(?:\sEDITION)?)", reOptions };