diff --git a/src/libraries/System.Numerics.Vectors/System.Numerics.Vectors.sln b/src/libraries/System.Numerics.Vectors/System.Numerics.Vectors.sln index c829f21df46ba..e05d844d41695 100644 --- a/src/libraries/System.Numerics.Vectors/System.Numerics.Vectors.sln +++ b/src/libraries/System.Numerics.Vectors/System.Numerics.Vectors.sln @@ -26,18 +26,27 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{ED90FF1C-59D4-4AB0-860E-2872ECA1BFEC}" EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{634a3b2b-09f5-4810-b630-ade4d36c47df}*SharedItemsImports = 5 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|Any CPU.ActiveCfg = Checked|x64 + {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|Any CPU.Build.0 = Checked|x64 + {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x64.ActiveCfg = Checked|x64 + {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x64.Build.0 = Checked|x64 + {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x86.ActiveCfg = Checked|x86 + {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x86.Build.0 = Checked|x86 {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Debug|Any CPU.ActiveCfg = Debug|x64 {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Debug|Any CPU.Build.0 = Debug|x64 {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Debug|x64.ActiveCfg = Debug|x64 @@ -50,12 +59,12 @@ Global {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Release|x64.Build.0 = Release|x64 {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Release|x86.ActiveCfg = Release|x86 {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Release|x86.Build.0 = Release|x86 - {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|Any CPU.ActiveCfg = Checked|x64 - {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|Any CPU.Build.0 = Checked|x64 - {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x64.ActiveCfg = Checked|x64 - {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x64.Build.0 = Checked|x64 - {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x86.ActiveCfg = Checked|x86 - {634A3B2B-09F5-4810-B630-ADE4D36C47DF}.Checked|x86.Build.0 = Checked|x86 + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x64.ActiveCfg = Debug|Any CPU + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x64.Build.0 = Debug|Any CPU + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x86.ActiveCfg = Debug|Any CPU + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x86.Build.0 = Debug|Any CPU {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Debug|Any CPU.Build.0 = Debug|Any CPU {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -68,12 +77,12 @@ Global {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Release|x64.Build.0 = Release|Any CPU {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Release|x86.ActiveCfg = Release|Any CPU {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Release|x86.Build.0 = Release|Any CPU - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x64.ActiveCfg = Debug|Any CPU - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x64.Build.0 = Debug|Any CPU - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x86.ActiveCfg = Debug|Any CPU - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F}.Checked|x86.Build.0 = Debug|Any CPU + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|Any CPU.Build.0 = Debug|Any CPU + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x64.ActiveCfg = Debug|Any CPU + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x64.Build.0 = Debug|Any CPU + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x86.ActiveCfg = Debug|Any CPU + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x86.Build.0 = Debug|Any CPU {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Debug|Any CPU.Build.0 = Debug|Any CPU {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -86,12 +95,12 @@ Global {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Release|x64.Build.0 = Release|Any CPU {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Release|x86.ActiveCfg = Release|Any CPU {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Release|x86.Build.0 = Release|Any CPU - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|Any CPU.Build.0 = Debug|Any CPU - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x64.ActiveCfg = Debug|Any CPU - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x64.Build.0 = Debug|Any CPU - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x86.ActiveCfg = Debug|Any CPU - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7}.Checked|x86.Build.0 = Debug|Any CPU + {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|Any CPU.Build.0 = Debug|Any CPU + {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x64.ActiveCfg = Debug|Any CPU + {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x64.Build.0 = Debug|Any CPU + {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x86.ActiveCfg = Debug|Any CPU + {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x86.Build.0 = Debug|Any CPU {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -104,12 +113,12 @@ Global {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Release|x64.Build.0 = Release|Any CPU {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Release|x86.ActiveCfg = Release|Any CPU {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Release|x86.Build.0 = Release|Any CPU - {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|Any CPU.Build.0 = Debug|Any CPU - {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x64.ActiveCfg = Debug|Any CPU - {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x64.Build.0 = Debug|Any CPU - {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x86.ActiveCfg = Debug|Any CPU - {ED450846-85A0-4CED-B4D9-9EB769CF794B}.Checked|x86.Build.0 = Debug|Any CPU + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|Any CPU.Build.0 = Debug|Any CPU + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x64.ActiveCfg = Debug|Any CPU + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x64.Build.0 = Debug|Any CPU + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x86.ActiveCfg = Debug|Any CPU + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x86.Build.0 = Debug|Any CPU {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Debug|Any CPU.Build.0 = Debug|Any CPU {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -122,12 +131,12 @@ Global {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Release|x64.Build.0 = Release|Any CPU {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Release|x86.ActiveCfg = Release|Any CPU {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Release|x86.Build.0 = Release|Any CPU - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|Any CPU.Build.0 = Debug|Any CPU - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x64.ActiveCfg = Debug|Any CPU - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x64.Build.0 = Debug|Any CPU - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x86.ActiveCfg = Debug|Any CPU - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B}.Checked|x86.Build.0 = Debug|Any CPU + {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|Any CPU.Build.0 = Debug|Any CPU + {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x64.ActiveCfg = Debug|Any CPU + {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x64.Build.0 = Debug|Any CPU + {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x86.ActiveCfg = Debug|Any CPU + {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x86.Build.0 = Debug|Any CPU {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Debug|Any CPU.Build.0 = Debug|Any CPU {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -140,12 +149,12 @@ Global {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Release|x64.Build.0 = Release|Any CPU {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Release|x86.ActiveCfg = Release|Any CPU {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Release|x86.Build.0 = Release|Any CPU - {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|Any CPU.Build.0 = Debug|Any CPU - {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x64.ActiveCfg = Debug|Any CPU - {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x64.Build.0 = Debug|Any CPU - {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x86.ActiveCfg = Debug|Any CPU - {88F4A78E-4EF9-4EB6-995E-CD24152C4704}.Checked|x86.Build.0 = Debug|Any CPU + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|Any CPU.Build.0 = Debug|Any CPU + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x64.ActiveCfg = Debug|Any CPU + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x64.Build.0 = Debug|Any CPU + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x86.ActiveCfg = Debug|Any CPU + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x86.Build.0 = Debug|Any CPU {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Debug|Any CPU.Build.0 = Debug|Any CPU {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -158,12 +167,12 @@ Global {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Release|x64.Build.0 = Release|Any CPU {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Release|x86.ActiveCfg = Release|Any CPU {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Release|x86.Build.0 = Release|Any CPU - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|Any CPU.Build.0 = Debug|Any CPU - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x64.ActiveCfg = Debug|Any CPU - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x64.Build.0 = Debug|Any CPU - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x86.ActiveCfg = Debug|Any CPU - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237}.Checked|x86.Build.0 = Debug|Any CPU + {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|Any CPU.Build.0 = Debug|Any CPU + {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x64.ActiveCfg = Debug|Any CPU + {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x64.Build.0 = Debug|Any CPU + {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x86.ActiveCfg = Debug|Any CPU + {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x86.Build.0 = Debug|Any CPU {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Debug|Any CPU.Build.0 = Debug|Any CPU {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -176,12 +185,12 @@ Global {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Release|x64.Build.0 = Release|Any CPU {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Release|x86.ActiveCfg = Release|Any CPU {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Release|x86.Build.0 = Release|Any CPU - {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|Any CPU.Build.0 = Debug|Any CPU - {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x64.ActiveCfg = Debug|Any CPU - {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x64.Build.0 = Debug|Any CPU - {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x86.ActiveCfg = Debug|Any CPU - {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598}.Checked|x86.Build.0 = Debug|Any CPU + {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x64.ActiveCfg = Debug|Any CPU + {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x64.Build.0 = Debug|Any CPU + {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x86.ActiveCfg = Debug|Any CPU + {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x86.Build.0 = Debug|Any CPU {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -194,12 +203,12 @@ Global {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Release|x64.Build.0 = Release|Any CPU {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Release|x86.ActiveCfg = Release|Any CPU {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Release|x86.Build.0 = Release|Any CPU - {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x64.ActiveCfg = Debug|Any CPU - {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x64.Build.0 = Debug|Any CPU - {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x86.ActiveCfg = Debug|Any CPU - {C6EDFA8A-956E-4398-B31F-FA87312BDF9B}.Checked|x86.Build.0 = Debug|Any CPU + {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x64.ActiveCfg = Debug|Any CPU + {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x64.Build.0 = Debug|Any CPU + {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x86.ActiveCfg = Debug|Any CPU + {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x86.Build.0 = Debug|Any CPU {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -212,27 +221,21 @@ Global {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Release|x64.Build.0 = Release|Any CPU {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Release|x86.ActiveCfg = Release|Any CPU {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Release|x86.Build.0 = Release|Any CPU - {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x64.ActiveCfg = Debug|Any CPU - {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x64.Build.0 = Debug|Any CPU - {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x86.ActiveCfg = Debug|Any CPU - {F99EAF58-533E-4941-A0C5-5101309D8AB9}.Checked|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {634A3B2B-09F5-4810-B630-ADE4D36C47DF} = {FC10C682-DF71-4EEA-A3A5-E716C1C88AC0} + {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F} = {2C4425BA-8478-4BCB-B616-E6FC28ADEAB9} + {5B2027FA-F43A-4E80-880F-B3A7A2720AA7} = {ED90FF1C-59D4-4AB0-860E-2872ECA1BFEC} {ED450846-85A0-4CED-B4D9-9EB769CF794B} = {FC10C682-DF71-4EEA-A3A5-E716C1C88AC0} + {B38797B1-BB45-4B30-9D4F-79D9F4B3735B} = {2C4425BA-8478-4BCB-B616-E6FC28ADEAB9} {88F4A78E-4EF9-4EB6-995E-CD24152C4704} = {FC10C682-DF71-4EEA-A3A5-E716C1C88AC0} + {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237} = {ED90FF1C-59D4-4AB0-860E-2872ECA1BFEC} {7FAD5E59-D362-4ED6-B3D5-FAD9CD5A2598} = {FC10C682-DF71-4EEA-A3A5-E716C1C88AC0} {C6EDFA8A-956E-4398-B31F-FA87312BDF9B} = {FC10C682-DF71-4EEA-A3A5-E716C1C88AC0} {F99EAF58-533E-4941-A0C5-5101309D8AB9} = {FC10C682-DF71-4EEA-A3A5-E716C1C88AC0} - {9EDBE037-EFE0-4B72-B602-E4C3F0C05F2F} = {2C4425BA-8478-4BCB-B616-E6FC28ADEAB9} - {B38797B1-BB45-4B30-9D4F-79D9F4B3735B} = {2C4425BA-8478-4BCB-B616-E6FC28ADEAB9} - {5B2027FA-F43A-4E80-880F-B3A7A2720AA7} = {ED90FF1C-59D4-4AB0-860E-2872ECA1BFEC} - {DFC21F4E-EC4F-4310-A4DA-B7094AA4D237} = {ED90FF1C-59D4-4AB0-860E-2872ECA1BFEC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F9EDC1DC-52BE-4C40-90D2-41EE6FB7FA5C} diff --git a/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs b/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs index 556e6672b806c..b7fbaec38f14f 100644 --- a/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs +++ b/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Reflection; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using Xunit; using Xunit.Sdk; @@ -14,6 +15,7 @@ namespace System.Numerics.Tests /// /// Vector{T} tests that use random number generation and a unified generic test structure /// + [RequiresPreviewFeatures] public class GenericVectorTests { // Static constructor in top-level class\ @@ -515,7 +517,7 @@ private void TestIndexerOutOfRange() where T : struct public void StaticOneVectorSingle() { TestStaticOneVector(); } [Fact] public void StaticOneVectorDouble() { TestStaticOneVector(); } - private void TestStaticOneVector() where T : struct + private void TestStaticOneVector() where T : struct, INumber { Vector vector = Vector.One; T oneValue = Util.One(); @@ -546,7 +548,7 @@ private void TestStaticOneVector() where T : struct public void StaticZeroVectorSingle() { TestStaticZeroVector(); } [Fact] public void StaticZeroVectorDouble() { TestStaticZeroVector(); } - private void TestStaticZeroVector() where T : struct + private void TestStaticZeroVector() where T : struct, INumber { Vector vector = Vector.Zero; T zeroValue = Util.Zero(); @@ -812,7 +814,7 @@ private void TestEqualsObject() where T : struct public void EqualsVectorSingle() { TestEqualsVector(); } [Fact] public void EqualsVectorDouble() { TestEqualsVector(); } - private void TestEqualsVector() where T : struct + private void TestEqualsVector() where T : struct, INumber { T[] values = GenerateRandomValuesForVector(); Vector vector1 = new Vector(values); @@ -963,7 +965,7 @@ private void TestToString(string format, IFormatProvider provider) where T : [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void AdditionDouble() { TestAddition(); } - private void TestAddition() where T : struct + private void TestAddition() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -993,7 +995,7 @@ private void TestAddition() where T : struct public void AdditionOverflowUInt64() { TestAdditionOverflow(); } [Fact] public void AdditionOverflowInt64() { TestAdditionOverflow(); } - private void TestAdditionOverflow() where T : struct + private void TestAdditionOverflow() where T : struct, INumber { T maxValue = GetMaxValueExact(); Vector maxValueVector = new Vector(maxValue); @@ -1030,7 +1032,7 @@ private void TestAdditionOverflow() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void SubtractionDouble() { TestSubtraction(); } - private void TestSubtraction() where T : struct + private void TestSubtraction() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1060,7 +1062,7 @@ private void TestSubtraction() where T : struct public void SubtractionOverflowUInt64() { TestSubtractionOverflow(); } [Fact] public void SubtractionOverflowInt64() { TestSubtractionOverflow(); } - private void TestSubtractionOverflow() where T : struct + private void TestSubtractionOverflow() where T : struct, INumber { T minValue = GetMinValueExact(); Vector minValueVector = new Vector(minValue); @@ -1097,7 +1099,7 @@ private void TestSubtractionOverflow() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void MultiplicationDouble() { TestMultiplication(); } - private void TestMultiplication() where T : struct + private void TestMultiplication() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1133,7 +1135,7 @@ private void TestMultiplication() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void MultiplicationWithScalarDouble() { TestMultiplicationWithScalar(); } - private void TestMultiplicationWithScalar() where T : struct + private void TestMultiplicationWithScalar() where T : struct, INumber { T[] values = GenerateRandomValuesForVector(); T factor = Util.GenerateSingleValue(GetMinValue(), GetMaxValue()); @@ -1177,7 +1179,7 @@ private void TestMultiplicationWithScalar() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void DivisionDouble() { TestDivision(); } - private void TestDivision() where T : struct + private void TestDivision() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); values1 = values1.Select(val => val.Equals(Util.Zero()) ? Util.One() : val).ToArray(); // Avoid divide-by-zero @@ -1239,7 +1241,7 @@ private void TestDivisionByZeroException() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void UnaryMinusDouble() { TestUnaryMinus(); } - private void TestUnaryMinus() where T : struct + private void TestUnaryMinus() where T : struct, INumber { T[] values = GenerateRandomValuesForVector(); Vector vector = new Vector(values); @@ -1336,7 +1338,7 @@ private void TestBitwiseOrOperator() where T : struct public void BitwiseXorOperatorUInt64() { TestBitwiseXorOperator(); } [Fact] public void BitwiseXorOperatorInt64() { TestBitwiseXorOperator(); } - private void TestBitwiseXorOperator() where T : struct + private void TestBitwiseXorOperator() where T : struct, IBitwiseOperators { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1368,7 +1370,7 @@ private void TestBitwiseXorOperator() where T : struct public void BitwiseOnesComplementOperatorUInt64() { TestBitwiseOnesComplementOperator(); } [Fact] public void BitwiseOnesComplementOperatorInt64() { TestBitwiseOnesComplementOperator(); } - private void TestBitwiseOnesComplementOperator() where T : struct + private void TestBitwiseOnesComplementOperator() where T : struct, IBitwiseOperators { T[] values1 = GenerateRandomValuesForVector(); Vector randomVector1 = new Vector(values1); @@ -1398,7 +1400,7 @@ private void TestBitwiseOnesComplementOperator() where T : struct public void BitwiseAndNotUInt64() { TestBitwiseAndNot(); } [Fact] public void BitwiseAndNotInt64() { TestBitwiseAndNot(); } - private void TestBitwiseAndNot() where T : struct + private void TestBitwiseAndNot() where T : struct, IBitwiseOperators { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1441,7 +1443,7 @@ private void TestBitwiseAndNot() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void VectorGreaterThanDouble() { TestVectorGreaterThan(); } - private void TestVectorGreaterThan() where T : struct + private void TestVectorGreaterThan() where T : struct, INumber { var values1 = GenerateRandomValuesForVector(); var values2 = GenerateRandomValuesForVector(); @@ -1480,7 +1482,7 @@ private void TestVectorGreaterThan() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void GreaterThanOrEqualDouble() { TestVectorGreaterThanOrEqual(); } - private void TestVectorGreaterThanOrEqual() where T : struct + private void TestVectorGreaterThanOrEqual() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1735,7 +1737,7 @@ private void TestVectorGreaterThanOrEqualAll() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void LessThanDouble() { TestVectorLessThan(); } - private void TestVectorLessThan() where T : struct + private void TestVectorLessThan() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1774,7 +1776,7 @@ private void TestVectorLessThan() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void LessThanOrEqualDouble() { TestVectorLessThanOrEqual(); } - private void TestVectorLessThanOrEqual() where T : struct + private void TestVectorLessThanOrEqual() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -1813,7 +1815,7 @@ private void TestVectorLessThanOrEqual() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void LessThanAnyDouble() { TestVectorLessThanAny(); } - private void TestVectorLessThanAny() where T : struct + private void TestVectorLessThanAny() where T : struct, INumber { T[] values1 = new T[Vector.Count]; for (int g = 0; g < Vector.Count; g++) @@ -1848,7 +1850,7 @@ private void TestVectorLessThanAny() where T : struct public void LessThanAllSingle() { TestVectorLessThanAll(); } [Fact] public void LessThanAllDouble() { TestVectorLessThanAll(); } - private void TestVectorLessThanAll() where T : struct + private void TestVectorLessThanAll() where T : struct, INumber { T[] values1 = new T[Vector.Count]; for (int g = 0; g < Vector.Count; g++) @@ -2003,7 +2005,7 @@ private void TestVectorLessThanOrEqualAll() where T : struct public void VectorEqualsSingle() { TestVectorEquals(); } [Fact] public void VectorEqualsDouble() { TestVectorEquals(); } - private void TestVectorEquals() where T : struct + private void TestVectorEquals() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2; @@ -2048,7 +2050,7 @@ private void TestVectorEquals() where T : struct public void VectorEqualsAnySingle() { TestVectorEqualsAny(); } [Fact] public void VectorEqualsAnyDouble() { TestVectorEqualsAny(); } - private void TestVectorEqualsAny() where T : struct + private void TestVectorEqualsAny() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2; @@ -2096,7 +2098,7 @@ private void TestVectorEqualsAny() where T : struct public void VectorEqualsAllSingle() { TestVectorEqualsAll(); } [Fact] public void VectorEqualsAllDouble() { TestVectorEqualsAll(); } - private void TestVectorEqualsAll() where T : struct + private void TestVectorEqualsAll() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2; @@ -2141,7 +2143,7 @@ private void TestVectorEqualsAll() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void ConditionalSelectDouble() { TestConditionalSelect(); } - private void TestConditionalSelect() where T : struct + private void TestConditionalSelect() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -2195,7 +2197,7 @@ private void TestConditionalSelect() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void DotProductDouble() { TestDotProduct(); } - private void TestDotProduct() where T : struct + private void TestDotProduct() where T : struct, INumber { T[] values1 = Util.GenerateRandomValues(Vector.Count); T[] values2 = Util.GenerateRandomValues(Vector.Count); @@ -2233,7 +2235,7 @@ private void TestDotProduct() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void MaxDouble() { TestMax(); } - private void TestMax() where T : struct + private void TestMax() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -2271,7 +2273,7 @@ private void TestMax() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void MinDouble() { TestMin(); } - private void TestMin() where T : struct + private void TestMin() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -2309,7 +2311,7 @@ private void TestMin() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void SquareRootDouble() { TestSquareRoot(15); } - private void TestSquareRoot(int precision = -1) where T : struct, IEquatable + private void TestSquareRoot(int precision = -1) where T : struct, INumber, IEquatable { T[] values = GenerateRandomValuesForVector(); Vector vector = new Vector(values); @@ -2405,7 +2407,7 @@ public void FloorDouble() [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void AbsDouble() { TestAbs(); } - private void TestAbs() where T : struct + private void TestAbs() where T : struct, INumber { T[] values = Util.GenerateRandomValues(Vector.Count, GetMinValue() + 1, GetMaxValue()); Vector vector = new Vector(values); @@ -2445,7 +2447,7 @@ private void TestAbs() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void MultiplicationReflectionDouble() { TestMultiplicationReflection(); } - private void TestMultiplicationReflection() where T : struct + private void TestMultiplicationReflection() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -2484,7 +2486,7 @@ private void TestMultiplicationReflection() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void AdditionReflectionDouble() { TestAdditionReflection(); } - private void TestAdditionReflection() where T : struct + private void TestAdditionReflection() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); T[] values2 = GenerateRandomValuesForVector(); @@ -2523,7 +2525,7 @@ private void TestAdditionReflection() where T : struct [Fact] [ActiveIssue("https://github.com/dotnet/runtime/issues/60347", typeof(PlatformDetection), nameof(PlatformDetection.IsMonoRuntime), nameof(PlatformDetection.IsX86Process))] public void DivisionReflectionDouble() { TestDivisionReflection(); } - private void TestDivisionReflection() where T : struct + private void TestDivisionReflection() where T : struct, INumber { T[] values1 = GenerateRandomValuesForVector(); values1 = values1.Select(val => val.Equals(Util.Zero()) ? Util.One() : val).ToArray(); // Avoid divide-by-zero diff --git a/src/libraries/System.Numerics.Vectors/tests/System.Numerics.Vectors.Tests.csproj b/src/libraries/System.Numerics.Vectors/tests/System.Numerics.Vectors.Tests.csproj index c8cff8865d09d..ff4201deb1b70 100644 --- a/src/libraries/System.Numerics.Vectors/tests/System.Numerics.Vectors.Tests.csproj +++ b/src/libraries/System.Numerics.Vectors/tests/System.Numerics.Vectors.Tests.csproj @@ -17,4 +17,8 @@ + + + + diff --git a/src/libraries/System.Numerics.Vectors/tests/Util.cs b/src/libraries/System.Numerics.Vectors/tests/Util.cs index 135b3fc0e65e4..74affb1bd52ab 100644 --- a/src/libraries/System.Numerics.Vectors/tests/Util.cs +++ b/src/libraries/System.Numerics.Vectors/tests/Util.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Runtime.Versioning; + namespace System.Numerics.Tests { public static class Util @@ -89,150 +91,65 @@ public static T GenerateSingleValue(int min = 1, int max = 100) where T : str return value; } - public static T Abs(T value) where T : struct + [RequiresPreviewFeatures] + public static T Abs(T value) where T : INumber { - // unsigned types - if (value is byte) return value; - else if (value is ushort) return value; - else if (value is uint) return value; - else if (value is ulong) return value; - // signed types - else if (value is short) return (T)(ValueType)(short) ( Math.Abs((short) (ValueType)value) ); - else if (value is int) return (T)(ValueType)(int) ( Math.Abs((int) (ValueType)value) ); - else if (value is long) return (T)(ValueType)(long) ( Math.Abs((long) (ValueType)value) ); - else if (value is sbyte) return (T)(ValueType)(sbyte) ( Math.Abs((sbyte) (ValueType)value) ); - else if (value is float) return (T)(ValueType)(float) ( Math.Abs((float) (ValueType)value) ); - else if (value is double) return (T)(ValueType)(double) ( Math.Abs((double)(ValueType)value) ); - else throw new NotImplementedException(); + return T.Abs(value); } - - public static T Sqrt(T value) where T : struct + [RequiresPreviewFeatures] + public static T Sqrt(T value) where T : struct, INumber { - unchecked - { - if (value is short) return (T)(ValueType)(short) ( Math.Sqrt((short) (ValueType)value) ); - else if (value is int) return (T)(ValueType)(int) ( Math.Sqrt((int) (ValueType)value) ); - else if (value is long) return (T)(ValueType)(long) ( Math.Sqrt((long) (ValueType)value) ); - else if (value is ushort) return (T)(ValueType)(ushort) ( Math.Sqrt((ushort)(ValueType)value) ); - else if (value is uint) return (T)(ValueType)(uint) ( Math.Sqrt((uint) (ValueType)value) ); - else if (value is ulong) return (T)(ValueType)(ulong) ( Math.Sqrt((ulong) (ValueType)value) ); - else if (value is byte) return (T)(ValueType)(byte) ( Math.Sqrt((byte) (ValueType)value) ); - else if (value is sbyte) return (T)(ValueType)(sbyte) ( Math.Sqrt((sbyte) (ValueType)value) ); - else if (value is float) return (T)(ValueType)(float) ( Math.Sqrt((float) (ValueType)value) ); - else if (value is double) return (T)(ValueType)(double) ( Math.Sqrt((double)(ValueType)value) ); - else throw new NotImplementedException(); - } + double dValue = Create(value); + double dSqrt = Math.Sqrt(dValue); + return T.CreateTruncating(dSqrt); } - public static T Multiply(T left, T right) where T : struct + [RequiresPreviewFeatures] + private static TSelf Create(TOther value) + where TOther : INumber + where TSelf : INumber + => TSelf.Create(value); + + [RequiresPreviewFeatures] + public static T Multiply(T left, T right) where T : INumber { - unchecked - { - if (left is short) return (T)(ValueType)(short) ( (short) (ValueType)left * (short) (ValueType)right ); - else if (left is int) return (T)(ValueType)(int) ( (int) (ValueType)left * (int) (ValueType)right ); - else if (left is long) return (T)(ValueType)(long) ( (long) (ValueType)left * (long) (ValueType)right ); - else if (left is ushort) return (T)(ValueType)(ushort) ( (ushort)(ValueType)left * (ushort)(ValueType)right ); - else if (left is uint) return (T)(ValueType)(uint) ( (uint) (ValueType)left * (uint) (ValueType)right ); - else if (left is ulong) return (T)(ValueType)(ulong) ( (ulong) (ValueType)left * (ulong) (ValueType)right ); - else if (left is byte) return (T)(ValueType)(byte) ( (byte) (ValueType)left * (byte) (ValueType)right ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( (sbyte) (ValueType)left * (sbyte) (ValueType)right ); - else if (left is float) return (T)(ValueType)(float) ( (float) (ValueType)left * (float) (ValueType)right ); - else if (left is double) return (T)(ValueType)(double) ( (double)(ValueType)left * (double)(ValueType)right ); - else throw new NotImplementedException(); - } + return left * right; } - public static T Divide(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static T Divide(T left, T right) where T : INumber { - if (left is short) return (T)(ValueType)(short) ( (short) (ValueType)left / (short) (ValueType)right ); - else if (left is int) return (T)(ValueType)(int) ( (int) (ValueType)left / (int) (ValueType)right ); - else if (left is long) return (T)(ValueType)(long) ( (long) (ValueType)left / (long) (ValueType)right ); - else if (left is ushort) return (T)(ValueType)(ushort) ( (ushort)(ValueType)left / (ushort)(ValueType)right ); - else if (left is uint) return (T)(ValueType)(uint) ( (uint) (ValueType)left / (uint) (ValueType)right ); - else if (left is ulong) return (T)(ValueType)(ulong) ( (ulong) (ValueType)left / (ulong) (ValueType)right ); - else if (left is byte) return (T)(ValueType)(byte) ( (byte) (ValueType)left / (byte) (ValueType)right ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( (sbyte) (ValueType)left / (sbyte) (ValueType)right ); - else if (left is float) return (T)(ValueType)(float) ( (float) (ValueType)left / (float) (ValueType)right ); - else if (left is double) return (T)(ValueType)(double) ( (double)(ValueType)left / (double)(ValueType)right ); - else throw new NotImplementedException(); + return left / right; } - public static T Add(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static T Add(T left, T right) where T : INumber { - unchecked - { - if (left is short) return (T)(ValueType)(short) ( (short) (ValueType)left + (short) (ValueType)right ); - else if (left is int) return (T)(ValueType)(int) ( (int) (ValueType)left + (int) (ValueType)right ); - else if (left is long) return (T)(ValueType)(long) ( (long) (ValueType)left + (long) (ValueType)right ); - else if (left is ushort) return (T)(ValueType)(ushort) ( (ushort)(ValueType)left + (ushort)(ValueType)right ); - else if (left is uint) return (T)(ValueType)(uint) ( (uint) (ValueType)left + (uint) (ValueType)right ); - else if (left is ulong) return (T)(ValueType)(ulong) ( (ulong) (ValueType)left + (ulong) (ValueType)right ); - else if (left is byte) return (T)(ValueType)(byte) ( (byte) (ValueType)left + (byte) (ValueType)right ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( (sbyte) (ValueType)left + (sbyte) (ValueType)right ); - else if (left is float) return (T)(ValueType)(float) ( (float) (ValueType)left + (float) (ValueType)right ); - else if (left is double) return (T)(ValueType)(double) ( (double)(ValueType)left + (double)(ValueType)right ); - else throw new NotImplementedException(); - } + return left + right; } - public static T Subtract(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static T Subtract(T left, T right) where T : INumber { - unchecked - { - if (left is short) return (T)(ValueType)(short) ( (short) (ValueType)left - (short) (ValueType)right ); - else if (left is int) return (T)(ValueType)(int) ( (int) (ValueType)left - (int) (ValueType)right ); - else if (left is long) return (T)(ValueType)(long) ( (long) (ValueType)left - (long) (ValueType)right ); - else if (left is ushort) return (T)(ValueType)(ushort) ( (ushort)(ValueType)left - (ushort)(ValueType)right ); - else if (left is uint) return (T)(ValueType)(uint) ( (uint) (ValueType)left - (uint) (ValueType)right ); - else if (left is ulong) return (T)(ValueType)(ulong) ( (ulong) (ValueType)left - (ulong) (ValueType)right ); - else if (left is byte) return (T)(ValueType)(byte) ( (byte) (ValueType)left - (byte) (ValueType)right ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( (sbyte) (ValueType)left - (sbyte) (ValueType)right ); - else if (left is float) return (T)(ValueType)(float) ( (float) (ValueType)left - (float) (ValueType)right ); - else if (left is double) return (T)(ValueType)(double) ( (double)(ValueType)left - (double)(ValueType)right ); - else throw new NotImplementedException(); - } + return left - right; } - public static T Xor(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static T Xor(T left, T right) where T : IBitwiseOperators { - if (left is short) return (T)(ValueType)(short) ( (short) (ValueType)left ^ (short) (ValueType)right ); - else if (left is int) return (T)(ValueType)(int) ( (int) (ValueType)left ^ (int) (ValueType)right ); - else if (left is long) return (T)(ValueType)(long) ( (long) (ValueType)left ^ (long) (ValueType)right ); - else if (left is ushort) return (T)(ValueType)(ushort) ( (ushort)(ValueType)left ^ (ushort)(ValueType)right ); - else if (left is uint) return (T)(ValueType)(uint) ( (uint) (ValueType)left ^ (uint) (ValueType)right ); - else if (left is ulong) return (T)(ValueType)(ulong) ( (ulong) (ValueType)left ^ (ulong) (ValueType)right ); - else if (left is byte) return (T)(ValueType)(byte) ( (byte) (ValueType)left ^ (byte) (ValueType)right ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( (sbyte) (ValueType)left ^ (sbyte) (ValueType)right ); - else throw new NotImplementedException(); + return left ^ right; } - public static T AndNot(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static T AndNot(T left, T right) where T : IBitwiseOperators { - if (left is short) return (T)(ValueType)(short) ( (short) (ValueType)left & ~(short) (ValueType)right ); - else if (left is int) return (T)(ValueType)(int) ( (int) (ValueType)left & ~(int) (ValueType)right ); - else if (left is long) return (T)(ValueType)(long) ( (long) (ValueType)left & ~(long) (ValueType)right ); - else if (left is ushort) return (T)(ValueType)(ushort) ( (ushort)(ValueType)left & ~(ushort)(ValueType)right ); - else if (left is uint) return (T)(ValueType)(uint) ( (uint) (ValueType)left & ~(uint) (ValueType)right ); - else if (left is ulong) return (T)(ValueType)(ulong) ( (ulong) (ValueType)left & ~(ulong) (ValueType)right ); - else if (left is byte) return (T)(ValueType)(byte) ( (byte) (ValueType)left & ~(byte) (ValueType)right ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( (sbyte) (ValueType)left & ~(sbyte) (ValueType)right ); - else throw new NotImplementedException(); + return left & ~ right; } - public static T OnesComplement(T left) where T : struct + [RequiresPreviewFeatures] + public static T OnesComplement(T left) where T : IBitwiseOperators { - unchecked - { - if (left is short) return (T)(ValueType)(short) ( ~(short) (ValueType)left ); - else if (left is int) return (T)(ValueType)(int) ( ~(int) (ValueType)left ); - else if (left is long) return (T)(ValueType)(long) ( ~(long) (ValueType)left ); - else if (left is ushort) return (T)(ValueType)(ushort) ( ~(ushort)(ValueType)left ); - else if (left is uint) return (T)(ValueType)(uint) ( ~(uint) (ValueType)left ); - else if (left is ulong) return (T)(ValueType)(ulong) ( ~(ulong) (ValueType)left ); - else if (left is byte) return (T)(ValueType)(byte) ( ~(byte) (ValueType)left ); - else if (left is sbyte) return (T)(ValueType)(sbyte) ( ~(sbyte) (ValueType)left ); - else throw new NotImplementedException(); - } + return ~left; } public static float Clamp(float value, float min, float max) @@ -240,101 +157,48 @@ public static float Clamp(float value, float min, float max) return value > max ? max : value < min ? min : value; } - public static T Zero() where T : struct + [RequiresPreviewFeatures] + public static T Zero() where T : struct, INumber { - if (typeof(T) == typeof(short)) return (T)(ValueType)(short) 0; - else if (typeof(T) == typeof(int)) return (T)(ValueType)(int) 0; - else if (typeof(T) == typeof(long)) return (T)(ValueType)(long) 0; - else if (typeof(T) == typeof(ushort)) return (T)(ValueType)(ushort) 0; - else if (typeof(T) == typeof(uint)) return (T)(ValueType)(uint) 0; - else if (typeof(T) == typeof(ulong)) return (T)(ValueType)(ulong) 0; - else if (typeof(T) == typeof(byte)) return (T)(ValueType)(byte) 0; - else if (typeof(T) == typeof(sbyte)) return (T)(ValueType)(sbyte) 0; - else if (typeof(T) == typeof(float)) return (T)(ValueType)(float) 0; - else if (typeof(T) == typeof(double)) return (T)(ValueType)(double) 0; - else throw new NotImplementedException(); + return T.Zero; } - public static T One() where T : struct + [RequiresPreviewFeatures] + public static T One() where T : struct, INumber { - if (typeof(T) == typeof(short)) return (T)(ValueType)(short) 1; - else if (typeof(T) == typeof(int)) return (T)(ValueType)(int) 1; - else if (typeof(T) == typeof(long)) return (T)(ValueType)(long) 1; - else if (typeof(T) == typeof(ushort)) return (T)(ValueType)(ushort) 1; - else if (typeof(T) == typeof(uint)) return (T)(ValueType)(uint) 1; - else if (typeof(T) == typeof(ulong)) return (T)(ValueType)(ulong) 1; - else if (typeof(T) == typeof(byte)) return (T)(ValueType)(byte) 1; - else if (typeof(T) == typeof(sbyte)) return (T)(ValueType)(sbyte) 1; - else if (typeof(T) == typeof(float)) return (T)(ValueType)(float) 1; - else if (typeof(T) == typeof(double)) return (T)(ValueType)(double) 1; - else throw new NotImplementedException(); + return T.One; } - public static bool GreaterThan(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static bool GreaterThan(T left, T right) where T : INumber { - if (left is short) return (short)(ValueType) left > (short)(ValueType) right; - else if (left is int) return (int)(ValueType) left > (int)(ValueType) right; - else if (left is long) return (long)(ValueType) left > (long)(ValueType) right; - else if (left is ushort) return (ushort)(ValueType) left > (ushort)(ValueType) right; - else if (left is uint) return (uint)(ValueType) left > (uint)(ValueType) right; - else if (left is ulong) return (ulong)(ValueType) left > (ulong)(ValueType) right; - else if (left is byte) return (byte)(ValueType) left > (byte)(ValueType) right; - else if (left is sbyte) return (sbyte)(ValueType) left > (sbyte)(ValueType) right; - else if (left is float) return (float)(ValueType) left > (float)(ValueType) right; - else if (left is double) return (double)(ValueType) left > (double)(ValueType) right; - else throw new NotImplementedException(); + return left > right; } - public static bool GreaterThanOrEqual(T left, T right) where T : struct - { - if (left is short) return (short)(ValueType) left >= (short)(ValueType) right; - else if (left is int) return (int)(ValueType) left >= (int)(ValueType) right; - else if (left is long) return (long)(ValueType) left >= (long)(ValueType) right; - else if (left is ushort) return (ushort)(ValueType) left >= (ushort)(ValueType) right; - else if (left is uint) return (uint)(ValueType) left >= (uint)(ValueType) right; - else if (left is ulong) return (ulong)(ValueType) left >= (ulong)(ValueType) right; - else if (left is byte) return (byte)(ValueType) left >= (byte)(ValueType) right; - else if (left is sbyte) return (sbyte)(ValueType) left >= (sbyte)(ValueType) right; - else if (left is float) return (float)(ValueType) left >= (float)(ValueType) right; - else if (left is double) return (double)(ValueType) left >= (double)(ValueType) right; - else throw new NotImplementedException(); + [RequiresPreviewFeatures] + public static bool GreaterThanOrEqual(T left, T right) where T : INumber + { + return left >= right; } - public static bool LessThan(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static bool LessThan(T left, T right) where T : INumber { - if (left is short) return (short)(ValueType) left < (short)(ValueType) right; - else if (left is int) return (int)(ValueType) left < (int)(ValueType) right; - else if (left is long) return (long)(ValueType) left < (long)(ValueType) right; - else if (left is ushort) return (ushort)(ValueType) left < (ushort)(ValueType) right; - else if (left is uint) return (uint)(ValueType) left < (uint)(ValueType) right; - else if (left is ulong) return (ulong)(ValueType) left < (ulong)(ValueType) right; - else if (left is byte) return (byte)(ValueType) left < (byte)(ValueType) right; - else if (left is sbyte) return (sbyte)(ValueType) left < (sbyte)(ValueType) right; - else if (left is float) return (float)(ValueType) left < (float)(ValueType) right; - else if (left is double) return (double)(ValueType) left < (double)(ValueType) right; - else throw new NotImplementedException(); + return left < right; } - public static bool LessThanOrEqual(T left, T right) where T : struct + [RequiresPreviewFeatures] + public static bool LessThanOrEqual(T left, T right) where T : INumber { - if (left is short) return (short)(ValueType) left <= (short)(ValueType) right; - else if (left is int) return (int)(ValueType) left <= (int)(ValueType) right; - else if (left is long) return (long)(ValueType) left <= (long)(ValueType) right; - else if (left is ushort) return (ushort)(ValueType) left <= (ushort)(ValueType) right; - else if (left is uint) return (uint)(ValueType) left <= (uint)(ValueType) right; - else if (left is ulong) return (ulong)(ValueType) left <= (ulong)(ValueType) right; - else if (left is byte) return (byte)(ValueType) left <= (byte)(ValueType) right; - else if (left is sbyte) return (sbyte)(ValueType) left <= (sbyte)(ValueType) right; - else if (left is float) return (float)(ValueType) left <= (float)(ValueType) right; - else if (left is double) return (double)(ValueType) left <= (double)(ValueType) right; - else throw new NotImplementedException(); + return left <= right; } - public static bool AnyEqual(T[] left, T[] right) where T : struct + [RequiresPreviewFeatures] + public static bool AnyEqual(T[] left, T[] right) where T : INumber { for (int g = 0; g < left.Length; g++) { - if (((IEquatable)left[g]).Equals(right[g])) + if(left[g] == right[g]) { return true; } @@ -342,11 +206,12 @@ public static bool AnyEqual(T[] left, T[] right) where T : struct return false; } - public static bool AllEqual(T[] left, T[] right) where T : struct + [RequiresPreviewFeatures] + public static bool AllEqual(T[] left, T[] right) where T : INumber { for (int g = 0; g < left.Length; g++) { - if (!((IEquatable)left[g]).Equals(right[g])) + if (left[g] != right[g]) { return false; }