Sysnya/test/Nyanbyte.Sysnya.CoreTests/Binary/BinaryMapperTests.cs

74 lines
2.2 KiB
C#
Raw Normal View History

2023-12-01 13:48:10 +01:00
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Threading.Tasks;
using Nyanbyte.Sysnya.Binary;
namespace Nyanbyte.Sysnya.CoreTests.Binary;
public class BinaryMapperTests
{
private class Dummy
{
public short Int16 { get; set; }
public ushort UInt16 { get; set; }
public int Int32 { get; set; }
public uint UInt32 { get; set; }
public long Int64 { get; set; }
public ulong UInt64 { get; set; }
}
[Fact]
public void Map32Bit()
{
// Given
Span<byte> bytes = stackalloc byte[8];
BinaryPrimitives.WriteUInt32BigEndian(bytes, 0xfeedbeef);
BinaryPrimitives.WriteInt32BigEndian(bytes[4..], 0xbeef);
BinaryStructMapperBuilder<Dummy> b = new(0, true);
// When
var mapper = b.BindU32(p => p.UInt32).BindI32(p => p.Int32).Build();
var dummy = mapper.Map(bytes.ToArray());
// Then
Assert.Equal(0xfeedbeef, dummy.UInt32);
Assert.Equal(0xbeef, dummy.Int32);
}
[Fact]
public void MapAll()
{
// Given
Span<byte> bytes = stackalloc byte[28];
BinaryPrimitives.WriteUInt16BigEndian(bytes[0..], 0xbabe);
BinaryPrimitives.WriteInt16BigEndian(bytes[2..], 0xbf);
BinaryPrimitives.WriteUInt32BigEndian(bytes[4..], 0xfeedbeef);
BinaryPrimitives.WriteInt32BigEndian(bytes[8..], 0xbeef);
BinaryPrimitives.WriteUInt64BigEndian(bytes[12..], 0xbad1dea0babebebe);
BinaryPrimitives.WriteInt64BigEndian(bytes[20..], 0x1dea0babebebe);
BinaryStructMapperBuilder<Dummy> b = new(0, true);
// When
var mapper = b
.BindU16(p => p.UInt16).BindI16(p => p.Int16)
.BindU32(p => p.UInt32).BindI32(p => p.Int32)
.BindU64(p => p.UInt64).BindI64(p => p.Int64)
.Build();
var dummy = mapper.Map(bytes.ToArray());
// Then
Assert.Equal(0xbabe, dummy.UInt16);
Assert.Equal(0xbf, dummy.Int16);
Assert.Equal(0xfeedbeef, dummy.UInt32);
Assert.Equal(0xbeef, dummy.Int32);
Assert.Equal(0xbad1dea0babebebe, dummy.UInt64);
Assert.Equal(0x1dea0babebebe, dummy.Int64);
}
}