Skip to content

Commit 1739fb8

Browse files
committed
Improved code coverage
1 parent 9b21cd0 commit 1739fb8

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

UnitTests/UnitTests.HighPerformance.Shared/Buffers/Test_StringPool.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Linq;
77
using System.Reflection;
8+
using System.Runtime.CompilerServices;
89
using System.Text;
910
using Microsoft.Toolkit.HighPerformance.Buffers;
1011
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -126,6 +127,40 @@ public void Test_StringPool_Add_Misc()
126127
Assert.AreSame(windowsCommunityToolkit, windowsCommunityToolkit2);
127128
}
128129

130+
[TestCategory("StringPool")]
131+
[TestMethod]
132+
public void Test_StringPool_Add_Overwrite()
133+
{
134+
var pool = new StringPool();
135+
136+
var today = DateTime.Today;
137+
138+
var text1 = ToStringNoInlining(today);
139+
140+
pool.Add(text1);
141+
142+
Assert.IsTrue(pool.TryGet(text1.AsSpan(), out string? result));
143+
144+
Assert.AreSame(text1, result);
145+
146+
var text2 = ToStringNoInlining(today);
147+
148+
pool.Add(text2);
149+
150+
Assert.IsTrue(pool.TryGet(text2.AsSpan(), out result));
151+
152+
Assert.AreNotSame(text1, result);
153+
Assert.AreSame(text2, result);
154+
}
155+
156+
// Separate method just to ensure the JIT can't optimize things away
157+
// and make the test fail because different string instances are interned
158+
[MethodImpl(MethodImplOptions.NoInlining)]
159+
private static string ToStringNoInlining(object obj)
160+
{
161+
return obj.ToString();
162+
}
163+
129164
[TestCategory("StringPool")]
130165
[TestMethod]
131166
public void Test_StringPool_GetOrAdd_String_Empty()

0 commit comments

Comments
 (0)