mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-04-22 22:19:37 +00:00
189 lines
5.8 KiB
C#
189 lines
5.8 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using SharpCompress.Common;
|
|
using SharpCompress.IO;
|
|
using Xunit;
|
|
|
|
namespace SharpCompress.Test;
|
|
|
|
public class BinaryReaderParityTests : TestBase
|
|
{
|
|
private readonly byte[] _testData;
|
|
|
|
public BinaryReaderParityTests()
|
|
{
|
|
// Create test data with various patterns
|
|
_testData = new byte[256];
|
|
for (int i = 0; i < 256; i++)
|
|
{
|
|
_testData[i] = (byte)i;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadByte_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
byte syncByte = syncReader.ReadByte();
|
|
byte asyncByte = await asyncReader.ReadByteAsync();
|
|
Assert.Equal(syncByte, asyncByte);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadBytes_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
var syncBytes = syncReader.ReadBytes(32);
|
|
var asyncBuffer = new byte[32];
|
|
await asyncReader.ReadBytesAsync(asyncBuffer, 0, 32);
|
|
|
|
Assert.Equal(syncBytes, asyncBuffer);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadUInt16_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
ushort syncValue = syncReader.ReadUInt16();
|
|
ushort asyncValue = await asyncReader.ReadUInt16Async();
|
|
|
|
Assert.Equal(syncValue, asyncValue);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadUInt32_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
uint syncValue = syncReader.ReadUInt32();
|
|
uint asyncValue = await asyncReader.ReadUInt32Async();
|
|
|
|
Assert.Equal(syncValue, asyncValue);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadUInt64_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
ulong syncValue = syncReader.ReadUInt64();
|
|
ulong asyncValue = await asyncReader.ReadUInt64Async();
|
|
|
|
Assert.Equal(syncValue, asyncValue);
|
|
}
|
|
|
|
[Fact]
|
|
public void Position_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
// Read some bytes
|
|
syncReader.ReadBytes(10);
|
|
var asyncBuffer = new byte[10];
|
|
asyncReader.ReadBytesAsync(asyncBuffer, 0, 10).AsTask().Wait();
|
|
|
|
Assert.Equal(syncStream.Position, asyncStream.Position);
|
|
Assert.Equal(syncReader.BaseStream.Position, asyncReader.BaseStream.Position);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task MultipleReads_Parity()
|
|
{
|
|
using var syncStream = new MemoryStream(_testData);
|
|
using var asyncStream = new MemoryStream(_testData);
|
|
using var syncReader = new BinaryReader(syncStream);
|
|
using var asyncReader = new AsyncBinaryReader(asyncStream);
|
|
|
|
// Mix of different read operations
|
|
Assert.Equal(syncReader.ReadByte(), await asyncReader.ReadByteAsync());
|
|
|
|
var syncBytes = new byte[16];
|
|
var asyncBytes = new byte[16];
|
|
syncStream.Read(syncBytes, 0, 16);
|
|
await asyncReader.ReadBytesAsync(asyncBytes, 0, 16);
|
|
Assert.Equal(syncBytes, asyncBytes);
|
|
|
|
Assert.Equal(syncReader.ReadUInt16(), await asyncReader.ReadUInt16Async());
|
|
Assert.Equal(syncReader.ReadUInt32(), await asyncReader.ReadUInt32Async());
|
|
Assert.Equal(syncReader.ReadUInt64(), await asyncReader.ReadUInt64Async());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadByte_Async_Properly_Async()
|
|
{
|
|
using var stream = new MemoryStream(_testData);
|
|
using var reader = new AsyncBinaryReader(stream);
|
|
|
|
var bytes = new byte[10];
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
bytes[i] = await reader.ReadByteAsync();
|
|
}
|
|
|
|
Assert.Equal(_testData.Take(10).ToArray(), bytes);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadBytes_Async_Properly_Async()
|
|
{
|
|
using var stream = new MemoryStream(_testData);
|
|
using var reader = new AsyncBinaryReader(stream);
|
|
|
|
var buffer = new byte[64];
|
|
await reader.ReadBytesAsync(buffer, 0, 64);
|
|
|
|
Assert.Equal(_testData.Take(64).ToArray(), buffer);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task SkipAsync_Moves_Position_Correctly()
|
|
{
|
|
using var stream = new MemoryStream(_testData);
|
|
using var reader = new AsyncBinaryReader(stream);
|
|
|
|
await reader.SkipAsync(10);
|
|
|
|
Assert.Equal(10, stream.Position);
|
|
Assert.Equal(10, reader.BaseStream.Position);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task SkipAsync_Then_Read_Works_Correctly()
|
|
{
|
|
using var stream = new MemoryStream(_testData);
|
|
using var reader = new AsyncBinaryReader(stream);
|
|
|
|
await reader.SkipAsync(10);
|
|
byte b = await reader.ReadByteAsync();
|
|
|
|
Assert.Equal(_testData[10], b);
|
|
}
|
|
}
|