ModernUO/Projects/Server.Tests/Buffers/CircularBufferWriterTests.cs
Kamron Batman 525cda5413
Cleanup & Fixes for .NET 5 (#309)
- [X] Fixes several bugs
- [X] Updates more ordinal issues
- [X] Cleans up the code a bit
- [X] Turns classes static that should have been
- [X] Changes TcpServer.Instances to a HashSet

Bumps release version
2020-11-15 10:03:50 -08:00

92 lines
3.9 KiB
C#

using System;
using System.Buffers;
using System.IO;
using Xunit;
namespace Server.Tests.Buffers
{
public class CircularBufferWriterTests
{
[Theory, InlineData("Test String", "us-ascii", -1, 1024, 1024, 0),
InlineData("Test String", "utf-8", -1, 1024, 1024, 0), InlineData("Test String", "utf-16BE", -1, 1024, 1024, 0),
InlineData("Test String", "utf-16", -1, 1024, 1024, 0), InlineData("Test String", "us-ascii", -1, 1024, 1024, 1030),
InlineData("Test String", "utf-8", -1, 1024, 1024, 1030),
InlineData("Test String", "utf-16BE", -1, 1024, 1024, 1030),
InlineData("Test String", "utf-16", -1, 1024, 1024, 1030),
InlineData("Test String", "us-ascii", -1, 1024, 1024, 1020),
InlineData("Test String", "utf-8", -1, 1024, 1024, 1020),
InlineData("Test String", "utf-16BE", -1, 1024, 1024, 1020),
InlineData("Test String", "utf-16", -1, 1024, 1024, 1020), InlineData("Test String", "us-ascii", 8, 1024, 1024, 0),
InlineData("Test String", "utf-16BE", 8, 1024, 1024, 0), InlineData("Test String", "utf-16", 8, 1024, 1024, 0),
InlineData("Test String", "us-ascii", 8, 1024, 1024, 1030),
InlineData("Test String", "utf-16BE", 8, 1024, 1024, 1030),
InlineData("Test String", "utf-16", 8, 1024, 1024, 1030),
InlineData("Test String", "us-ascii", 8, 1024, 1024, 1020),
InlineData("Test String", "utf-16BE", 8, 1024, 1024, 1020),
InlineData("Test String", "utf-16", 8, 1024, 1024, 1020), InlineData("Test String", "us-ascii", 20, 1024, 1024, 0),
InlineData("Test String", "utf-16BE", 20, 1024, 1024, 0), InlineData("Test String", "utf-16", 20, 1024, 1024, 0),
InlineData("Test String", "us-ascii", 20, 1024, 1024, 1030),
InlineData("Test String", "utf-16BE", 20, 1024, 1024, 1030),
InlineData("Test String", "utf-16", 20, 1024, 1024, 1030),
InlineData("Test String", "us-ascii", 20, 1024, 1024, 1020),
InlineData("Test String", "utf-16BE", 20, 1024, 1024, 1020),
InlineData("Test String", "utf-16", 20, 1024, 1024, 1020)]
// First only, beginning
// Second only
// Split
// First only, beginning, fixed length smaller
// Second only, fixed length smaller
// Split, fixed length smaller
// First only, beginning, fixed length bigger
// Second only, fixed length bigger
// Split, fixed length bigger
public void TestWriteString(
string value,
string encodingStr,
int fixedLength,
int firstSize,
int secondSize,
int offset
)
{
Span<byte> buffer = stackalloc byte[firstSize + secondSize];
buffer.Clear();
var encoding = EncodingHelpers.GetEncoding(encodingStr);
var strLength = fixedLength > -1 ? Math.Min(value.Length, fixedLength) : value.Length;
var chars = value.AsSpan(0, strLength);
var writer = new CircularBufferWriter(buffer.Slice(0, firstSize), buffer.Slice(firstSize));
writer.Seek(offset, SeekOrigin.Begin);
writer.WriteString(chars, encoding);
if (offset > 0)
{
Span<byte> testEmpty = stackalloc byte[offset];
testEmpty.Clear();
AssertThat.Equal(buffer.Slice(0, offset), testEmpty);
}
Span<byte> expectedStr = stackalloc byte[encoding.GetByteCount(chars)];
encoding.GetBytes(chars, expectedStr.Slice(0));
AssertThat.Equal(buffer.Slice(offset, expectedStr.Length), expectedStr);
offset += expectedStr.Length;
if (offset < buffer.Length)
{
Span<byte> testEmpty = stackalloc byte[buffer.Length - offset];
testEmpty.Clear();
AssertThat.Equal(buffer.Slice(offset), testEmpty);
}
}
}
}