using System.Buffers.Binary;
using Common;

namespace server.test;

public class CommonTest
{
    [Fact]
    public void ReverseBytesTest()
    {
        var rnd = new Random();
        var bytesLen = 8;
        var bytesArray = new byte[bytesLen];
        rnd.NextBytes(bytesArray);

        var rev2Bytes = new byte[] {
            bytesArray[1],
            bytesArray[0],
            bytesArray[3],
            bytesArray[2],
            bytesArray[5],
            bytesArray[4],
            bytesArray[7],
            bytesArray[6],
        };
        Assert.Equal(Number.ReverseBytes(bytesArray, 2).Value, rev2Bytes);

        var rev4Bytes = new byte[] {
            bytesArray[3],
            bytesArray[2],
            bytesArray[1],
            bytesArray[0],
            bytesArray[7],
            bytesArray[6],
            bytesArray[5],
            bytesArray[4],
        };
        Assert.Equal(Number.ReverseBytes(bytesArray, 4).Value, rev4Bytes);
    }

    [Fact]
    public void ToBitTest()
    {
        Assert.Equal(true, Number.ToBit(0xFF, 3).Value);
        Assert.Equal(false, Number.ToBit(0x00, 3).Value);
        Assert.Equal(true, Number.ToBit(0xAA, 3).Value);
        Assert.Equal(false, Number.ToBit(0xAA, 2).Value);
    }

    [Fact]
    public void ReverseBits()
    {
        Assert.Equal((byte)0x05, Common.Number.ReverseBits((byte)0xA0));

        var bytesSrc = new byte[] { 0xAB, 0x00, 0x00, 0x01 };
        var bytes = new byte[4];
        for (int i = 0; i < 4; i++)
            bytes[i] = Common.Number.ReverseBits(bytesSrc[i]);
        Assert.Equal(new byte[] { 0xD5, 0x00, 0x00, 0x80 }, bytes);
    }
}
