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 _));
}
}
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 _));
}
}