diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/CharArrayToStringBenchmarks.cs b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/CharArrayToStringBenchmarks.cs new file mode 100644 index 0000000000..d6fa84616b --- /dev/null +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/CharArrayToStringBenchmarks.cs @@ -0,0 +1,25 @@ +using BenchmarkDotNet.Attributes; + +namespace ConvertCharArray2String.Benchmarks; + +[MemoryDiagnoser] +public class CharArrayToStringBenchmarks +{ + private char[] _charArray = []; + + [Params(9, 1000)] + public int Length { get; set; } + + [GlobalSetup] + public void Setup() => + _charArray = Enumerable.Range(0, Length).Select(i => (char)('a' + i % 26)).ToArray(); + + [Benchmark(Baseline = true)] + public string StringConstructor() => new string(_charArray); + + [Benchmark] + public string StringConcat() => string.Concat(_charArray); + + [Benchmark] + public string StringJoin() => string.Join("", _charArray); +} diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/ConvertCharArray2String.Benchmarks.csproj b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/ConvertCharArray2String.Benchmarks.csproj new file mode 100644 index 0000000000..62be4f867f --- /dev/null +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/ConvertCharArray2String.Benchmarks.csproj @@ -0,0 +1,14 @@ + + + + Exe + net10.0 + enable + enable + + + + + + + diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/Program.cs b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/Program.cs new file mode 100644 index 0000000000..9d02bda805 --- /dev/null +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.Benchmarks/Program.cs @@ -0,0 +1,4 @@ +using BenchmarkDotNet.Running; +using ConvertCharArray2String.Benchmarks; + +BenchmarkRunner.Run(args: args); diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.sln b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.sln index 1e8030f5cc..7581bf4144 100644 --- a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.sln +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String.sln @@ -1,31 +1,62 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.1.31911.260 +VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2String", "ConvertCharArray2String\ConvertCharArray2String.csproj", "{F21AE7B0-5961-431F-9573-CF567C362730}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2String", "ConvertCharArray2String\ConvertCharArray2String.csproj", "{CC387591-8080-46EE-8045-62FB77775F15}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2StringTests", "ConvertCharArray2StringTests\ConvertCharArray2StringTests.csproj", "{8359457A-7DEA-438D-9A3B-8725C41729C8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2StringTests", "ConvertCharArray2StringTests\ConvertCharArray2StringTests.csproj", "{269D6433-F548-49D7-AE0A-346ADBDEAFF3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConvertCharArray2String.Benchmarks", "ConvertCharArray2String.Benchmarks\ConvertCharArray2String.Benchmarks.csproj", "{9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution 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 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E526D224-B8CE-4E46-AF6C-AB5A3987323C}.Release|Any CPU.Build.0 = Release|Any CPU - {C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1B5D5EE-1714-49E8-BAAA-5A31DA4C852E}.Release|Any CPU.Build.0 = Release|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Debug|x64.ActiveCfg = Debug|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Debug|x64.Build.0 = Debug|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Debug|x86.ActiveCfg = Debug|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Debug|x86.Build.0 = Debug|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Release|Any CPU.Build.0 = Release|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Release|x64.ActiveCfg = Release|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Release|x64.Build.0 = Release|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Release|x86.ActiveCfg = Release|Any CPU + {CC387591-8080-46EE-8045-62FB77775F15}.Release|x86.Build.0 = Release|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x64.ActiveCfg = Debug|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x64.Build.0 = Debug|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x86.ActiveCfg = Debug|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Debug|x86.Build.0 = Debug|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|Any CPU.Build.0 = Release|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x64.ActiveCfg = Release|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x64.Build.0 = Release|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x86.ActiveCfg = Release|Any CPU + {269D6433-F548-49D7-AE0A-346ADBDEAFF3}.Release|x86.Build.0 = Release|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x64.ActiveCfg = Debug|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x64.Build.0 = Debug|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x86.ActiveCfg = Debug|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Debug|x86.Build.0 = Debug|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|Any CPU.Build.0 = Release|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x64.ActiveCfg = Release|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x64.Build.0 = Release|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x86.ActiveCfg = Release|Any CPU + {9FF511B2-F0CB-4DD1-9EFF-965E49B7D636}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6A5466CD-321D-46D4-B2B3-1E36EAF17EEC} - EndGlobalSection EndGlobal diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/ConvertCharArray2String.csproj b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/ConvertCharArray2String.csproj index 74abf5c976..dfb40caafc 100644 --- a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/ConvertCharArray2String.csproj +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/ConvertCharArray2String.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net10.0 enable enable diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/Program.cs b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/Program.cs index e53ca9e642..de5f5e0482 100644 --- a/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/Program.cs +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2String/Program.cs @@ -1,23 +1,27 @@ -using System.Text; - -namespace ConvertCharArray2String -{ - public class Program - { - public static void Main(string[] args) - { - char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' }; - - var convertedToString = new string(charArray); - Console.WriteLine(convertedToString); - - var joinedToString = string.Join("", charArray); - Console.WriteLine(joinedToString); - - var concatedToString = string.Concat(charArray); - Console.WriteLine(concatedToString); - - Console.ReadLine(); - } - } -} \ No newline at end of file +char[] charArray = ['c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e']; + +var convertedToString = new string(charArray); + +Console.WriteLine(convertedToString); + +var partOfArray = new string(charArray, 0, 4); + +Console.WriteLine(partOfArray); + +var joinedToString = string.Join("", charArray); + +Console.WriteLine(joinedToString); + +var withDashes = string.Join("-", charArray); + +Console.WriteLine(withDashes); + +var concatedToString = string.Concat(charArray); + +Console.WriteLine(concatedToString); + +char letter = 'c'; + +var fromChar = letter.ToString(); + +Console.WriteLine(fromChar); diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArray2StringTests.csproj b/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArray2StringTests.csproj index f72bee824b..560313bf07 100644 --- a/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArray2StringTests.csproj +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArray2StringTests.csproj @@ -1,17 +1,17 @@ - net6.0 + net10.0 + enable enable - false - - - - + + + + diff --git a/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArrayTests.cs b/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArrayTests.cs index b3b00f6bed..c8b93cccbd 100644 --- a/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArrayTests.cs +++ b/strings-csharp/ConvertCharArray2String/ConvertCharArray2StringTests/ConvertCharArrayTests.cs @@ -1,38 +1,78 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; -namespace ConvertCharArray2StringTests +namespace ConvertCharArray2StringTests; + +[TestClass] +public class ConvertCharArrayTests { - [TestClass] - public class ConvertCharArrayTests + private readonly char[] _charArray = ['c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e']; + + [TestMethod] + public void GivenCharArray_WhenConvertedByConstructor_ThenReturnString() + { + var convertedToString = new string(_charArray); + + Assert.AreEqual("code maze", convertedToString); + } + + [TestMethod] + public void GivenCharArray_WhenConvertedByJoin_ThenReturnString() + { + var joinedToString = string.Join("", _charArray); + + Assert.AreEqual("code maze", joinedToString); + } + + [TestMethod] + public void GivenCharArray_WhenConvertedByConcat_ThenReturnString() + { + var concatedToString = string.Concat(_charArray); + + Assert.AreEqual("code maze", concatedToString); + } + + [TestMethod] + public void GivenCharArray_WhenConvertedByConstructorWithRange_ThenReturnPartOfString() { - [TestMethod] - public void GivenCharArray_WhenConvertedByConstructor_ThenReturnString() - { - char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' }; + var partOfArray = new string(_charArray, 0, 4); - var convertedToString = new string(charArray); - - Assert.AreEqual("code maze", convertedToString); - } + Assert.AreEqual("code", partOfArray); + } - [TestMethod] - public void GivenCharArray_WhenConvertedByJoin_ThenReturnString() - { - char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' }; + [TestMethod] + public void GivenSingleChar_WhenConvertedByToString_ThenReturnString() + { + char letter = 'c'; - var joinedToString = string.Join("", charArray); + var fromChar = letter.ToString(); - Assert.AreEqual("code maze", joinedToString); - } + Assert.AreEqual("c", fromChar); + } - [TestMethod] - public void GivenCharArray_WhenConvertedByConcat_ThenReturnString() - { - char[] charArray = { 'c', 'o', 'd', 'e', ' ', 'm', 'a', 'z', 'e' }; + [TestMethod] + public void GivenCharArray_WhenJoinedWithSeparator_ThenReturnSeparatedString() + { + var withDashes = string.Join("-", _charArray); + + Assert.AreEqual("c-o-d-e- -m-a-z-e", withDashes); + } - var concatedToString = string.Concat(charArray); + [TestMethod] + public void GivenNullCharArray_WhenConvertedByConstructor_ThenReturnEmptyString() + { + char[]? nothing = null; + + var convertedToString = new string(nothing); + + Assert.AreEqual(string.Empty, convertedToString); + } + + [TestMethod] + public void GivenNullCharArray_WhenConvertedByConcatOrJoin_ThenThrowArgumentNullException() + { + char[]? nothing = null; - Assert.AreEqual("code maze", concatedToString); - } + Assert.ThrowsExactly(() => string.Concat(nothing!)); + Assert.ThrowsExactly(() => string.Join("", nothing!)); } -} \ No newline at end of file +}