static void RunTest(string testData, string expected, CultureInfo culture) { using BoundedUtf8Span boundedSpan = new BoundedUtf8Span(testData); Utf8Span inputSpan = boundedSpan.Span; // First try the allocating APIs ustring expectedUtf8 = u8(expected) ?? ustring.Empty; ustring actualUtf8; if (culture is null) { actualUtf8 = inputSpan.ToLowerInvariant(); } else { actualUtf8 = inputSpan.ToLower(culture); } Assert.Equal(expectedUtf8, actualUtf8); // Next, try the non-allocating APIs with too small a buffer if (expectedUtf8.Length > 0) { byte[] bufferTooSmall = new byte[expectedUtf8.Length - 1]; if (culture is null) { Assert.Equal(-1, inputSpan.ToLowerInvariant(bufferTooSmall)); } else { Assert.Equal(-1, inputSpan.ToLower(bufferTooSmall, culture)); } } // Then the non-allocating APIs with a properly sized buffer foreach (int bufferSize in new[] { expectedUtf8.Length, expectedUtf8.Length + 1 }) { byte[] buffer = new byte[expectedUtf8.Length]; if (culture is null) { Assert.Equal(expectedUtf8.Length, inputSpan.ToLowerInvariant(buffer)); } else { Assert.Equal(expectedUtf8.Length, inputSpan.ToLower(buffer, culture)); } Assert.True(expectedUtf8.AsBytes().SequenceEqual(buffer)); } }