mirror of
https://github.com/DarthAffe/RGB.NET.git
synced 2026-11-11 04:57:15 +00:00
Added some optimizations and tests for Colors
This commit is contained in:
1 parent
ead342388b
commit
10ec33c938
7 files changed
+377
-9
No files matched your search
@@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace RGB.NET.Core.Tests.Sampler;
|
||||
|
||||
[TestClass]
|
||||
public class AverageColorSamplerTest
|
||||
{
|
||||
#region Methods
|
||||
|
||||
[TestMethod]
|
||||
public void WhiteTest()
|
||||
{
|
||||
Span<Core.Color> data = new Core.Color[16 * 16];
|
||||
data.Fill(new Core.Color(1f, 1f, 1f, 1f));
|
||||
Core.Color[] result = new Core.Color[1];
|
||||
|
||||
SamplerInfo<Core.Color> info = new(2, 3, data[..6]);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(1f, 1f, 1f, 1f), result[0]);
|
||||
|
||||
info = new SamplerInfo<Core.Color>(16, 16, data);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(1f, 1f, 1f, 1f), result[0]);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void BlackTest()
|
||||
{
|
||||
Span<Core.Color> data = new Core.Color[16 * 16];
|
||||
data.Fill(new Core.Color(1f, 0f, 0f, 0f));
|
||||
Core.Color[] result = new Core.Color[1];
|
||||
|
||||
SamplerInfo<Core.Color> info = new(2, 3, data[..6]);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(1f, 0f, 0f, 0f), result[0]);
|
||||
|
||||
info = new SamplerInfo<Core.Color>(16, 16, data);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(1f, 0f, 0f, 0f), result[0]);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void GrayTest()
|
||||
{
|
||||
Span<Core.Color> data = new Core.Color[16 * 16];
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
data[i] = (i % 2) == 0 ? new Core.Color(1f, 0f, 0f, 0f) : new Core.Color(1f, 1f, 1f, 1f);
|
||||
Core.Color[] result = new Core.Color[1];
|
||||
|
||||
SamplerInfo<Core.Color> info = new(2, 3, data[..6]);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(1f, 0.5f, 0.5f, 0.5f), result[0]);
|
||||
|
||||
info = new SamplerInfo<Core.Color>(16, 16, data);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(1f, 0.5f, 0.5f, 0.5f), result[0]);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MixedTest()
|
||||
{
|
||||
Core.Color[] data = new Core.Color[16 * 16];
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
data[i] = (i % 5) switch
|
||||
{
|
||||
0 => new Core.Color(1f, 1f, 0f, 0f),
|
||||
1 => new Core.Color(1f, 0f, 0.75f, 0f),
|
||||
2 => new Core.Color(0.5f, 0f, 0f, 0.5f),
|
||||
3 => new Core.Color(0f, 1f, 1f, 1f),
|
||||
_ => new Core.Color(0f, 0f, 0f, 0f),
|
||||
};
|
||||
Core.Color[] result = new Core.Color[1];
|
||||
|
||||
SamplerInfo<Core.Color> info = new(2, 3, data[..6]);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(0.5833333f, 0.5f, 0.291666657f, 0.25f), result[0]);
|
||||
|
||||
info = new SamplerInfo<Core.Color>(16, 16, data);
|
||||
new AverageColorSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Core.Color(0.5019531f, 0.40234375f, 0.3486328f, 0.298828125f), result[0]);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.2.5" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.2.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\RGB.NET.Core\RGB.NET.Core.csproj" />
|
||||
<ProjectReference Include="..\..\RGB.NET.Presets\RGB.NET.Presets.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RGB.NET.Core;
|
||||
using RGB.NET.Presets.Textures.Sampler;
|
||||
|
||||
namespace RGB.NET.Presets.Tests.Sampler;
|
||||
|
||||
[TestClass]
|
||||
public class AverageByteSamplerTest
|
||||
{
|
||||
#region Methods
|
||||
|
||||
[TestMethod]
|
||||
public void WhiteTest()
|
||||
{
|
||||
Span<Color> colorData = new Color[16 * 16];
|
||||
colorData.Fill(new Color(1f, 1f, 1f, 1f));
|
||||
byte[] result = new byte[4];
|
||||
|
||||
Span<byte> data = new byte[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].GetA();
|
||||
data[index++] = colorData[i].GetR();
|
||||
data[index++] = colorData[i].GetG();
|
||||
data[index++] = colorData[i].GetB();
|
||||
}
|
||||
|
||||
SamplerInfo<byte> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<byte>(16, 16, data);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void BlackTest()
|
||||
{
|
||||
Span<Color> colorData = new Color[16 * 16];
|
||||
colorData.Fill(new Color(1f, 0f, 0f, 0f));
|
||||
byte[] result = new byte[4];
|
||||
|
||||
Span<byte> data = new byte[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].GetA();
|
||||
data[index++] = colorData[i].GetR();
|
||||
data[index++] = colorData[i].GetG();
|
||||
data[index++] = colorData[i].GetB();
|
||||
}
|
||||
|
||||
SamplerInfo<byte> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<byte>(16, 16, data);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void GrayTest()
|
||||
{
|
||||
Span<Color> colorData = new Color[16 * 16];
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
colorData[i] = (i % 2) == 0 ? new Color(1f, 0f, 0f, 0f) : new Color(1f, 1f, 1f, 1f);
|
||||
byte[] result = new byte[4];
|
||||
|
||||
Span<byte> data = new byte[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].GetA();
|
||||
data[index++] = colorData[i].GetR();
|
||||
data[index++] = colorData[i].GetG();
|
||||
data[index++] = colorData[i].GetB();
|
||||
}
|
||||
|
||||
SamplerInfo<byte> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<byte>(16, 16, data);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MixedTest()
|
||||
{
|
||||
Color[] colorData = new Color[16 * 16];
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
colorData[i] = (i % 5) switch
|
||||
{
|
||||
0 => new Color(1f, 1f, 0f, 0f),
|
||||
1 => new Color(1f, 0f, 0.75f, 0f),
|
||||
2 => new Color(0.5f, 0f, 0f, 0.5f),
|
||||
3 => new Color(0f, 1f, 1f, 1f),
|
||||
_ => new Color(0f, 0f, 0f, 0f),
|
||||
};
|
||||
byte[] result = new byte[4];
|
||||
|
||||
Span<byte> data = new byte[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].GetA();
|
||||
data[index++] = colorData[i].GetR();
|
||||
data[index++] = colorData[i].GetG();
|
||||
data[index++] = colorData[i].GetB();
|
||||
}
|
||||
|
||||
SamplerInfo<byte> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(149, 128, 74, 64), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<byte>(16, 16, data);
|
||||
new AverageByteSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(128, 103, 89, 76), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RGB.NET.Core;
|
||||
using RGB.NET.Presets.Textures.Sampler;
|
||||
|
||||
namespace RGB.NET.Presets.Tests.Sampler;
|
||||
|
||||
[TestClass]
|
||||
public class AverageFloatSamplerTest
|
||||
{
|
||||
#region Methods
|
||||
|
||||
[TestMethod]
|
||||
public void WhiteTest()
|
||||
{
|
||||
Span<Color> colorData = new Color[16 * 16];
|
||||
colorData.Fill(new Color(1f, 1f, 1f, 1f));
|
||||
float[] result = new float[4];
|
||||
|
||||
Span<float> data = new float[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].A;
|
||||
data[index++] = colorData[i].R;
|
||||
data[index++] = colorData[i].G;
|
||||
data[index++] = colorData[i].B;
|
||||
}
|
||||
|
||||
SamplerInfo<float> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<float>(16, 16, data);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void BlackTest()
|
||||
{
|
||||
Span<Color> colorData = new Color[16 * 16];
|
||||
colorData.Fill(new Color(1f, 0f, 0f, 0f));
|
||||
float[] result = new float[4];
|
||||
|
||||
Span<float> data = new float[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].A;
|
||||
data[index++] = colorData[i].R;
|
||||
data[index++] = colorData[i].G;
|
||||
data[index++] = colorData[i].B;
|
||||
}
|
||||
|
||||
SamplerInfo<float> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<float>(16, 16, data);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void GrayTest()
|
||||
{
|
||||
Span<Color> colorData = new Color[16 * 16];
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
colorData[i] = (i % 2) == 0 ? new Color(1f, 0f, 0f, 0f) : new Color(1f, 1f, 1f, 1f);
|
||||
float[] result = new float[4];
|
||||
|
||||
Span<float> data = new float[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].A;
|
||||
data[index++] = colorData[i].R;
|
||||
data[index++] = colorData[i].G;
|
||||
data[index++] = colorData[i].B;
|
||||
}
|
||||
|
||||
SamplerInfo<float> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<float>(16, 16, data);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MixedTest()
|
||||
{
|
||||
Color[] colorData = new Color[16 * 16];
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
colorData[i] = (i % 5) switch
|
||||
{
|
||||
0 => new Color(1f, 1f, 0f, 0f),
|
||||
1 => new Color(1f, 0f, 0.75f, 0f),
|
||||
2 => new Color(0.5f, 0f, 0f, 0.5f),
|
||||
3 => new Color(0f, 1f, 1f, 1f),
|
||||
_ => new Color(0f, 0f, 0f, 0f),
|
||||
};
|
||||
float[] result = new float[4];
|
||||
|
||||
Span<float> data = new float[colorData.Length * 4];
|
||||
int index = 0;
|
||||
for (int i = 0; i < colorData.Length; i++)
|
||||
{
|
||||
data[index++] = colorData[i].A;
|
||||
data[index++] = colorData[i].R;
|
||||
data[index++] = colorData[i].G;
|
||||
data[index++] = colorData[i].B;
|
||||
}
|
||||
|
||||
SamplerInfo<float> info = new(2, 3, data[..(6 * 4)]);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(0.5833333f, 0.5f, 0.291666657f, 0.25f), new Color(result[0], result[1], result[2], result[3]));
|
||||
|
||||
info = new SamplerInfo<float>(16, 16, data);
|
||||
new AverageFloatSampler().Sample(info, result);
|
||||
Assert.AreEqual(new Color(0.5019531f, 0.40234375f, 0.3486328f, 0.298828125f), new Color(result[0], result[1], result[2], result[3]));
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in new issue
Block a user