diff --git a/strings-csharp/ConvertInt2String/ConvertInt2String/Benchmark.cs b/strings-csharp/ConvertInt2String/ConvertInt2String/Benchmark.cs
index 20733a8284..2b1094e5ae 100644
--- a/strings-csharp/ConvertInt2String/ConvertInt2String/Benchmark.cs
+++ b/strings-csharp/ConvertInt2String/ConvertInt2String/Benchmark.cs
@@ -1,126 +1,35 @@
-using System;
using System.Text;
-using System.Diagnostics;
+using BenchmarkDotNet.Attributes;
-namespace ConvertInt2String
-{
- public static class Benchmark
- {
- const int formatOffsetLeft = 23;
- const int formatOffsetRight = 10;
-
- static string BenchmarkToString(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = num.ToString();
- }
- watch.Stop();
+namespace ConvertInt2String;
- return $"|{"'ToString'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkConvertToString(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = num.ToString();
- }
- watch.Stop();
-
- return $"|{"'ConvertToString'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkStringFormat(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = string.Format("{0}", num);
- }
- watch.Stop();
+[MemoryDiagnoser]
+public class IntToStringBenchmarks
+{
+ [Params(3, 1_234_567)]
+ public int Number { get; set; }
- return $"|{"'String.Format'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkStringInterpolation(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = $"{num}";
- }
- watch.Stop();
+ [Benchmark(Baseline = true)]
+ public string IntToString() => Number.ToString();
- return $"|{"'String Interpolation'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkStringConcat(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = string.Concat(string.Empty, num);
- }
- watch.Stop();
+ [Benchmark]
+ public string ConvertToString() => Convert.ToString(Number);
- return $"|{"'String.Concat'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkStringJoin(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = string.Join(string.Empty, num);
- }
- watch.Stop();
+ [Benchmark]
+ public string StringFormat() => string.Format("{0}", Number);
- return $"|{"'String.Join'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkPlusSign(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = string.Empty + num;
- }
- watch.Stop();
+ [Benchmark]
+ public string StringInterpolation() => $"{Number}";
- return $"|{"'Plus sign'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
- static string BenchmarkStringBuilderAppend(int num, int reps)
- {
- var watch = new Stopwatch();
- watch.Start();
- for (int i = 0; i < reps; i++)
- {
- var tmpResult = new StringBuilder().Append(num).ToString();
- }
- watch.Stop();
+ [Benchmark]
+ public string StringConcat() => string.Concat(string.Empty, Number);
- return $"|{"'Stringbuilder Append'",formatOffsetLeft} | {watch.ElapsedMilliseconds,formatOffsetRight:N0}|";
- }
+ [Benchmark]
+ public string StringJoin() => string.Join(string.Empty, Number);
- public static string Run(int number, int repetitions)
- {
- var benchmarkResultsBuilder = new StringBuilder($"\r\nBenchmarks with {repetitions:N0} repetitions: \r\n")
- .AppendLine($"|{"Method",formatOffsetLeft} | {"Speed (ms)",formatOffsetRight}|")
- .AppendLine($"|{"-----------------------",formatOffsetLeft}-|-{"----------",formatOffsetRight}|")
- .AppendLine(BenchmarkToString(number, repetitions))
- .AppendLine(BenchmarkConvertToString(number, repetitions))
- .AppendLine(BenchmarkStringFormat(number, repetitions))
- .AppendLine(BenchmarkStringInterpolation(number, repetitions))
- .AppendLine(BenchmarkStringConcat(number, repetitions))
- .AppendLine(BenchmarkStringJoin(number, repetitions))
- .AppendLine(BenchmarkPlusSign(number, repetitions))
- .AppendLine(BenchmarkStringBuilderAppend(number, repetitions));
+ [Benchmark]
+ public string PlusSign() => string.Empty + Number;
- return benchmarkResultsBuilder.ToString();
- }
- }
+ [Benchmark]
+ public string StringBuilderAppend() => new StringBuilder().Append(Number).ToString();
}
diff --git a/strings-csharp/ConvertInt2String/ConvertInt2String/ConvertInt2String.csproj b/strings-csharp/ConvertInt2String/ConvertInt2String/ConvertInt2String.csproj
index 74abf5c976..62be4f867f 100644
--- a/strings-csharp/ConvertInt2String/ConvertInt2String/ConvertInt2String.csproj
+++ b/strings-csharp/ConvertInt2String/ConvertInt2String/ConvertInt2String.csproj
@@ -2,9 +2,13 @@
Exe
- net6.0
+ net10.0
enable
enable
+
+
+
+
diff --git a/strings-csharp/ConvertInt2String/ConvertInt2String/Program.cs b/strings-csharp/ConvertInt2String/ConvertInt2String/Program.cs
index 5ca32b5b00..4b0577cafa 100644
--- a/strings-csharp/ConvertInt2String/ConvertInt2String/Program.cs
+++ b/strings-csharp/ConvertInt2String/ConvertInt2String/Program.cs
@@ -1,5 +1,7 @@
-using ConvertInt2String;
+using System.Globalization;
using System.Text;
+using BenchmarkDotNet.Running;
+using ConvertInt2String;
var luckyNumber = 3;
@@ -14,11 +16,10 @@
Console.WriteLine(luckyNumber + luckyNumber + string.Empty + luckyNumber + luckyNumber);
Console.WriteLine(new StringBuilder().Append(luckyNumber).ToString());
-Console.WriteLine(Benchmark.Run(luckyNumber, 200000));
-Console.WriteLine(Benchmark.Run(luckyNumber, 2000000));
-
-Console.ReadLine();
-
-
+var negativeNumber = -5;
+var swedish = CultureInfo.GetCultureInfo("sv-SE");
+Console.WriteLine(negativeNumber.ToString(swedish) == "-5");
+Console.WriteLine(negativeNumber.ToString(CultureInfo.InvariantCulture) == "-5");
+BenchmarkSwitcher.FromAssembly(typeof(IntToStringBenchmarks).Assembly).Run(args);
diff --git a/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.cs b/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.cs
index a7be5cba64..1c7c54b12f 100644
--- a/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.cs
+++ b/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.cs
@@ -1,4 +1,5 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Globalization;
using System.Text;
namespace ConvertInt2StringTests
@@ -77,5 +78,23 @@ public void GivenInt_WhenConvertedToStringWithStringBuilderAppend_ThenReturnStri
Assert.AreEqual("3", str);
}
+
+ [TestMethod]
+ public void GivenNegativeInt_WhenConvertedWithSwedishCulture_ThenUsesUnicodeMinusSign()
+ {
+ var num = -5;
+ var str = num.ToString(CultureInfo.GetCultureInfo("sv-SE"));
+
+ Assert.AreEqual("\u22125", str);
+ }
+
+ [TestMethod]
+ public void GivenNegativeInt_WhenConvertedWithInvariantCulture_ThenUsesHyphenMinus()
+ {
+ var num = -5;
+ var str = num.ToString(CultureInfo.InvariantCulture);
+
+ Assert.AreEqual("-5", str);
+ }
}
-}
\ No newline at end of file
+}
diff --git a/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.csproj b/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.csproj
index f72bee824b..b01ea88a90 100644
--- a/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.csproj
+++ b/strings-csharp/ConvertInt2String/ConvertInt2StringTests/ConvertInt2StringTests.csproj
@@ -1,17 +1,17 @@
- net6.0
+ net10.0
enable
false
-
-
-
-
+
+
+
+