Browse Source

Add pixel operation tests

af/merge-core
James Jackson-South 8 years ago
parent
commit
4f7888cb91
  1. 137
      tests/ImageSharp.Tests/PixelFormats/PixelOperationsTests.cs

137
tests/ImageSharp.Tests/PixelFormats/PixelOperationsTests.cs

@ -3,6 +3,7 @@
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats;
@ -203,7 +204,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromXyzBytes(int count)
public void PackFromRgb24Bytes(int count)
{
byte[] source = CreateByteTestData(count * 3);
var expected = new TPixel[count];
@ -224,7 +225,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void ToXyzBytes(int count)
public void ToRgb24Bytes(int count)
{
TPixel[] source = CreatePixelTestData(count);
byte[] expected = new byte[count * 3];
@ -248,7 +249,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromXyzwBytes(int count)
public void PackFromRgba32Bytes(int count)
{
byte[] source = CreateByteTestData(count * 4);
var expected = new TPixel[count];
@ -269,7 +270,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void ToXyzwBytes(int count)
public void ToRgba32Bytes(int count)
{
TPixel[] source = CreatePixelTestData(count);
byte[] expected = new byte[count * 4];
@ -294,7 +295,109 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromZyxBytes(int count)
public void PackFromRgb48Bytes(int count)
{
byte[] source = CreateByteTestData(count * 6);
Span<byte> sourceSpan = source.AsSpan();
var expected = new TPixel[count];
var rgba64 = new Rgba64(0, 0, 0, 65535);
for (int i = 0; i < count; i++)
{
int i6 = i * 6;
rgba64.Rgb = MemoryMarshal.Cast<byte, Rgb48>(sourceSpan.Slice(i6, 6))[0];
expected[i].PackFromRgba64(rgba64);
}
TestOperation(
source,
expected,
(s, d) => Operations.PackFromRgb48Bytes(s, d.Span, count)
);
}
[Theory]
[MemberData(nameof(ArraySizesData))]
public void ToRgb48Bytes(int count)
{
TPixel[] source = CreatePixelTestData(count);
byte[] expected = new byte[count * 6];
Rgb48 rgb = default;
for (int i = 0; i < count; i++)
{
int i6 = i * 6;
source[i].ToRgb48(ref rgb);
Rgba64Bytes rgb48Bytes = Unsafe.As<Rgb48, Rgba64Bytes>(ref rgb);
expected[i6] = rgb48Bytes[0];
expected[i6 + 1] = rgb48Bytes[1];
expected[i6 + 2] = rgb48Bytes[2];
expected[i6 + 3] = rgb48Bytes[3];
expected[i6 + 4] = rgb48Bytes[4];
expected[i6 + 5] = rgb48Bytes[5];
}
TestOperation(
source,
expected,
(s, d) => Operations.ToRgb48Bytes(s, d.Span, count)
);
}
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromRgba64Bytes(int count)
{
byte[] source = CreateByteTestData(count * 8);
Span<byte> sourceSpan = source.AsSpan();
var expected = new TPixel[count];
for (int i = 0; i < count; i++)
{
int i8 = i * 8;
expected[i].PackFromRgba64(MemoryMarshal.Cast<byte, Rgba64>(sourceSpan.Slice(i8, 8))[0]);
}
TestOperation(
source,
expected,
(s, d) => Operations.PackFromRgba64Bytes(s, d.Span, count)
);
}
[Theory]
[MemberData(nameof(ArraySizesData))]
public void ToRgba64Bytes(int count)
{
TPixel[] source = CreatePixelTestData(count);
byte[] expected = new byte[count * 8];
Rgba64 rgba = default;
for (int i = 0; i < count; i++)
{
int i8 = i * 8;
source[i].ToRgba64(ref rgba);
Rgba64Bytes rgba64Bytes = Unsafe.As<Rgba64, Rgba64Bytes>(ref rgba);
expected[i8] = rgba64Bytes[0];
expected[i8 + 1] = rgba64Bytes[1];
expected[i8 + 2] = rgba64Bytes[2];
expected[i8 + 3] = rgba64Bytes[3];
expected[i8 + 4] = rgba64Bytes[4];
expected[i8 + 5] = rgba64Bytes[5];
expected[i8 + 6] = rgba64Bytes[6];
expected[i8 + 7] = rgba64Bytes[7];
}
TestOperation(
source,
expected,
(s, d) => Operations.ToRgba64Bytes(s, d.Span, count)
);
}
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromBgr24Bytes(int count)
{
byte[] source = CreateByteTestData(count * 3);
var expected = new TPixel[count];
@ -315,7 +418,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void ToZyxBytes(int count)
public void ToBgr24Bytes(int count)
{
TPixel[] source = CreatePixelTestData(count);
byte[] expected = new byte[count * 3];
@ -339,7 +442,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromZyxwBytes(int count)
public void PackFromBgra32Bytes(int count)
{
byte[] source = CreateByteTestData(count * 4);
var expected = new TPixel[count];
@ -385,7 +488,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void PackFromWzyxBytes(int count)
public void PackFromArgb32Bytes(int count)
{
byte[] source = CreateByteTestData(count * 4);
var expected = new TPixel[count];
@ -406,7 +509,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
[Theory]
[MemberData(nameof(ArraySizesData))]
public void ToWzyxBytes(int count)
public void ToArgb32Bytes(int count)
{
TPixel[] source = CreatePixelTestData(count);
byte[] expected = new byte[count * 4];
@ -557,5 +660,21 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats
(float)rnd.NextDouble()
);
}
[StructLayout(LayoutKind.Sequential)]
private unsafe struct Rgba64Bytes
{
public fixed byte Data[8];
public byte this[int idx]
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ref byte self = ref Unsafe.As<Rgba64Bytes, byte>(ref this);
return Unsafe.Add(ref self, idx);
}
}
}
}
}
Loading…
Cancel
Save