diff --git a/PolyShim.Tests/NetCore21/BinaryReaderTests.cs b/PolyShim.Tests/NetCore21/BinaryReaderTests.cs new file mode 100644 index 0000000..d983ff6 --- /dev/null +++ b/PolyShim.Tests/NetCore21/BinaryReaderTests.cs @@ -0,0 +1,56 @@ +using System; +using System.Buffers; +using System.IO; +using FluentAssertions; +using Xunit; + +namespace PolyShim.Tests.NetCore21; + +public class BinaryReaderTests +{ + [Fact] + public void Read_ByteSpan_Test() + { + // Arrange + using var stream = new MemoryStream([1, 2, 3, 4, 5]); + using var reader = new BinaryReader(stream); + var buffer = ArrayPool.Shared.Rent((int)stream.Length); + + try + { + // Act + var bytesRead = reader.Read(buffer.AsSpan(0, (int)stream.Length)); + + // Assert + bytesRead.Should().Be(5); + buffer.Should().StartWith([1, 2, 3, 4, 5]); + } + finally + { + ArrayPool.Shared.Return(buffer); + } + } + + [Fact] + public void Read_CharSpan_Test() + { + // Arrange + using var stream = new MemoryStream("Hello"u8.ToArray()); + using var reader = new BinaryReader(stream); + var buffer = ArrayPool.Shared.Rent(5); + + try + { + // Act + var charsRead = reader.Read(buffer.AsSpan(0, 5)); + + // Assert + charsRead.Should().Be(5); + buffer.Should().StartWith("Hello"); + } + finally + { + ArrayPool.Shared.Return(buffer); + } + } +} diff --git a/PolyShim.Tests/NetCore21/BinaryWriterTests.cs b/PolyShim.Tests/NetCore21/BinaryWriterTests.cs new file mode 100644 index 0000000..4f75a1f --- /dev/null +++ b/PolyShim.Tests/NetCore21/BinaryWriterTests.cs @@ -0,0 +1,66 @@ +using System; +using System.Buffers; +using System.IO; +using FluentAssertions; +using Xunit; + +namespace PolyShim.Tests.NetCore21; + +public class BinaryWriterTests +{ + [Fact] + public void Write_ByteSpan_Test() + { + // Arrange + using var stream = new MemoryStream(); + using var writer = new BinaryWriter(stream); + var buffer = ArrayPool.Shared.Rent(5); + + buffer[0] = 1; + buffer[1] = 2; + buffer[2] = 3; + buffer[3] = 4; + buffer[4] = 5; + + try + { + // Act + writer.Write(buffer.AsSpan(0, 5)); + + // Assert + stream.ToArray().Should().Equal([1, 2, 3, 4, 5]); + } + finally + { + ArrayPool.Shared.Return(buffer); + } + } + + [Fact] + public void Write_CharSpan_Test() + { + // Arrange + using var stream = new MemoryStream(); + using var writer = new BinaryWriter(stream); + var buffer = ArrayPool.Shared.Rent(5); + + buffer[0] = 'H'; + buffer[1] = 'e'; + buffer[2] = 'l'; + buffer[3] = 'l'; + buffer[4] = 'o'; + + try + { + // Act + writer.Write(buffer.AsSpan(0, 5)); + + // Assert + stream.ToArray().Should().Equal("Hello"u8.ToArray()); + } + finally + { + ArrayPool.Shared.Return(buffer); + } + } +} diff --git a/PolyShim/NetCore21/BinaryReader.cs b/PolyShim/NetCore21/BinaryReader.cs new file mode 100644 index 0000000..9d295d1 --- /dev/null +++ b/PolyShim/NetCore21/BinaryReader.cs @@ -0,0 +1,37 @@ +#if (NETCOREAPP && !NETCOREAPP2_1_OR_GREATER) || (NETFRAMEWORK) || (NETSTANDARD && !NETSTANDARD2_1_OR_GREATER) +#nullable enable +#pragma warning disable CS0436 + +using System; +using System.IO; +using System.Diagnostics.CodeAnalysis; + +#if !POLYSHIM_INCLUDE_COVERAGE +[ExcludeFromCodeCoverage] +#endif +internal static class MemberPolyfills_NetCore21_BinaryReader +{ + extension(BinaryReader reader) + { + // https://learn.microsoft.com/dotnet/api/system.io.binaryreader.read#system-io-binaryreader-read(system-span((system-byte))) + public int Read(Span buffer) + { + var bufferArray = new byte[buffer.Length]; + var result = reader.Read(bufferArray, 0, bufferArray.Length); + bufferArray.AsSpan(0, result).CopyTo(buffer); + + return result; + } + + // https://learn.microsoft.com/dotnet/api/system.io.binaryreader.read#system-io-binaryreader-read(system-span((system-char))) + public int Read(Span buffer) + { + var bufferArray = new char[buffer.Length]; + var result = reader.Read(bufferArray, 0, bufferArray.Length); + bufferArray.AsSpan(0, result).CopyTo(buffer); + + return result; + } + } +} +#endif diff --git a/PolyShim/NetCore21/BinaryWriter.cs b/PolyShim/NetCore21/BinaryWriter.cs new file mode 100644 index 0000000..a3adf8c --- /dev/null +++ b/PolyShim/NetCore21/BinaryWriter.cs @@ -0,0 +1,31 @@ +#if (NETCOREAPP && !NETCOREAPP2_1_OR_GREATER) || (NETFRAMEWORK) || (NETSTANDARD && !NETSTANDARD2_1_OR_GREATER) +#nullable enable +#pragma warning disable CS0436 + +using System; +using System.IO; +using System.Diagnostics.CodeAnalysis; + +#if !POLYSHIM_INCLUDE_COVERAGE +[ExcludeFromCodeCoverage] +#endif +internal static class MemberPolyfills_NetCore21_BinaryWriter +{ + extension(BinaryWriter writer) + { + // https://learn.microsoft.com/dotnet/api/system.io.binarywriter.write#system-io-binarywriter-write(system-readonlyspan((system-byte))) + public void Write(ReadOnlySpan buffer) + { + var bufferArray = buffer.ToArray(); + writer.Write(bufferArray, 0, bufferArray.Length); + } + + // https://learn.microsoft.com/dotnet/api/system.io.binarywriter.write#system-io-binarywriter-write(system-readonlyspan((system-char))) + public void Write(ReadOnlySpan buffer) + { + var bufferArray = buffer.ToArray(); + writer.Write(bufferArray, 0, bufferArray.Length); + } + } +} +#endif diff --git a/Signatures.md b/Signatures.md index 49bc126..581cd83 100644 --- a/Signatures.md +++ b/Signatures.md @@ -1,8 +1,8 @@ # Signatures -- **Total:** 541 +- **Total:** 545 - **Types:** 113 -- **Members:** 428 +- **Members:** 432 ___ @@ -45,6 +45,12 @@ ___ - [**[struct]**](https://learn.microsoft.com/dotnet/api/system.runtime.compilerservices.asyncvaluetaskmethodbuilder) .NET Core 2.1 - `AsyncValueTaskMethodBuilder` - [**[struct]**](https://learn.microsoft.com/dotnet/api/system.runtime.compilerservices.asyncvaluetaskmethodbuilder-1) .NET Core 2.1 +- `BinaryReader` + - [`int Read(Span)`](https://learn.microsoft.com/dotnet/api/system.io.binaryreader.read#system-io-binaryreader-read(system-span((system-byte)))) .NET Core 2.1 + - [`int Read(Span)`](https://learn.microsoft.com/dotnet/api/system.io.binaryreader.read#system-io-binaryreader-read(system-span((system-char)))) .NET Core 2.1 +- `BinaryWriter` + - [`void Write(ReadOnlySpan)`](https://learn.microsoft.com/dotnet/api/system.io.binarywriter.write#system-io-binarywriter-write(system-readonlyspan((system-byte)))) .NET Core 2.1 + - [`void Write(ReadOnlySpan)`](https://learn.microsoft.com/dotnet/api/system.io.binarywriter.write#system-io-binarywriter-write(system-readonlyspan((system-char)))) .NET Core 2.1 - `byte` - [`static bool TryParse(ReadOnlySpan, IFormatProvider?, out byte)`](https://learn.microsoft.com/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-byte@)) .NET 7.0 - [`static bool TryParse(string?, IFormatProvider?, out byte)`](https://learn.microsoft.com/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-string-system-iformatprovider-system-byte@)) .NET 7.0