XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
using XFESystem.Desktop;
using Xunit;

namespace XFESystem.Desktop.Tests;

public sealed class PresentedPixelsTests
{
    [Fact]
    public void FingerprintUsesRgbRowOrderAndExcludesAlphaAndPitchPadding()
    {
        int[] pixels = [unchecked((int)0xff112233), 0x445566, 0xabcdef, unchecked((int)0xff778899), 0xaabbcc, 0x123456];
        Assert.True(DesktopPresentedPixels.TryFingerprint(pixels, 2, 2, 3, new(0, 0, 2, 2), 7, out var first));
        ulong expected = 14695981039346656037;
        foreach (byte value in new byte[] { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc })
            expected = unchecked((expected ^ value) * 1099511628211);
        Assert.Equal(expected.ToString("x16"), first.Fingerprint);
        Assert.Equal(7, first.PresentationSequence);
        pixels[0] ^= unchecked((int)0xff000000); pixels[2] = 0; pixels[5] = 0;
        Assert.True(DesktopPresentedPixels.TryFingerprint(pixels, 2, 2, 3, new(0, 0, 2, 2), 8, out var second));
        Assert.Equal(first.Fingerprint, second.Fingerprint);
        Assert.Equal(8, second.PresentationSequence);
        pixels[4] ^= 1;
        Assert.True(DesktopPresentedPixels.TryFingerprint(pixels, 2, 2, 3, new(0, 0, 2, 2), 9, out var changed));
        Assert.NotEqual(first.Fingerprint, changed.Fingerprint);
    }

    [Theory]
    [InlineData(-1, 0, 1, 1, 1)] [InlineData(0, -1, 1, 1, 1)]
    [InlineData(0, 0, 0, 1, 1)] [InlineData(0, 0, 1, 0, 1)]
    [InlineData(1, 0, 2, 1, 1)] [InlineData(0, 0, 1, 1, 0)]
    [InlineData(int.MaxValue, 0, int.MaxValue, 1, 1)]
    public void InvalidOrUnpresentedRegionsAreRejected(int x, int y, int width, int height, long sequence)
    {
        Assert.False(DesktopPresentedPixels.TryFingerprint(new int[4], 2, 2, 2, new(x, y, width, height), sequence, out _));
    }

    [Fact]
    public void MissingRowsAndExcessiveDiagnosticRegionsAreRejected()
    {
        Assert.False(DesktopPresentedPixels.TryFingerprint(new int[3], 2, 2, 2, new(0, 0, 1, 1), 1, out _));
        Assert.False(DesktopPresentedPixels.TryFingerprint(new int[4], 2, 2, 1, new(0, 0, 1, 1), 1, out _));
        Assert.False(DesktopPresentedPixels.TryFingerprint(new int[513 * 513], 513, 513, 513, new(0, 0, 513, 513), 1, out _));
    }
}