Browse Source

Add discontigous buffers and intrinsics tests

js/color-alpha-handling
James Jackson-South 6 years ago
parent
commit
b383dd4496
  1. 44
      tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs
  2. 47
      tests/ImageSharp.Tests/TestUtilities/FeatureTesting/FeatureTestRunner.cs

44
tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs

@ -6,7 +6,6 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Microsoft.DotNet.RemoteExecutor;
using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -44,9 +43,8 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
[InlineData(20, 4, -10f)] [InlineData(20, 4, -10f)]
[InlineData(20, 4, 0f)] [InlineData(20, 4, 0f)]
public void VerifyBokehBlurProcessorArguments_Fail(int radius, int components, float gamma) public void VerifyBokehBlurProcessorArguments_Fail(int radius, int components, float gamma)
{ => Assert.Throws<ArgumentOutOfRangeException>(
Assert.Throws<ArgumentOutOfRangeException>(() => new BokehBlurProcessor(radius, components, gamma)); () => new BokehBlurProcessor(radius, components, gamma));
}
[Fact] [Fact]
public void VerifyComplexComponents() public void VerifyComplexComponents()
@ -137,12 +135,10 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
[WithTestPatternImages(nameof(BokehBlurValues), 30, 20, PixelTypes.Rgba32)] [WithTestPatternImages(nameof(BokehBlurValues), 30, 20, PixelTypes.Rgba32)]
public void BokehBlurFilterProcessor<TPixel>(TestImageProvider<TPixel> provider, BokehBlurInfo value) public void BokehBlurFilterProcessor<TPixel>(TestImageProvider<TPixel> provider, BokehBlurInfo value)
where TPixel : unmanaged, IPixel<TPixel> where TPixel : unmanaged, IPixel<TPixel>
{ => provider.RunValidatingProcessorTest(
provider.RunValidatingProcessorTest(
x => x.BokehBlur(value.Radius, value.Components, value.Gamma), x => x.BokehBlur(value.Radius, value.Components, value.Gamma),
testOutputDetails: value.ToString(), testOutputDetails: value.ToString(),
appendPixelTypeToFileName: false); appendPixelTypeToFileName: false);
}
[Theory] [Theory]
/* /*
@ -152,18 +148,23 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
[WithTestPatternImages(200, 200, PixelTypes.Bgr24 | PixelTypes.Bgra32)] [WithTestPatternImages(200, 200, PixelTypes.Bgr24 | PixelTypes.Bgra32)]
public void BokehBlurFilterProcessor_WorksWithAllPixelTypes<TPixel>(TestImageProvider<TPixel> provider) public void BokehBlurFilterProcessor_WorksWithAllPixelTypes<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> where TPixel : unmanaged, IPixel<TPixel>
{ => provider.RunValidatingProcessorTest(
provider.RunValidatingProcessorTest( x => x.BokehBlur(8, 2, 3),
x => x.BokehBlur(8, 2, 3), appendSourceFileOrDescription: false);
appendSourceFileOrDescription: false);
}
[Theory] [Theory]
[WithFileCollection(nameof(TestFiles), nameof(BokehBlurValues), PixelTypes.Rgba32)] [WithFileCollection(nameof(TestFiles), nameof(BokehBlurValues), PixelTypes.Rgba32)]
public void BokehBlurFilterProcessor_Bounded<TPixel>(TestImageProvider<TPixel> provider, BokehBlurInfo value) public void BokehBlurFilterProcessor_Bounded(TestImageProvider<Rgba32> provider, BokehBlurInfo value)
where TPixel : unmanaged, IPixel<TPixel>
{ {
provider.RunValidatingProcessorTest( static void RunTest(string arg1, string arg2)
{
TestImageProvider<Rgba32> provider =
FeatureTestRunner.DeserializeForXunit<TestImageProvider<Rgba32>>(arg1);
BokehBlurInfo value =
FeatureTestRunner.DeserializeForXunit<BokehBlurInfo>(arg2);
provider.RunValidatingProcessorTest(
x => x =>
{ {
Size size = x.GetCurrentSize(); Size size = x.GetCurrentSize();
@ -172,6 +173,19 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution
}, },
testOutputDetails: value.ToString(), testOutputDetails: value.ToString(),
appendPixelTypeToFileName: false); appendPixelTypeToFileName: false);
}
FeatureTestRunner.RunWithHwIntrinsicsFeature(
RunTest,
HwIntrinsics.DisableSSE41,
provider,
value);
} }
[Theory]
[WithTestPatternImages(100, 300, PixelTypes.Bgr24)]
public void WorksWithDiscoBuffers<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel>
=> provider.RunBufferCapacityLimitProcessorTest(260, c => c.BokehBlur());
} }
} }

47
tests/ImageSharp.Tests/TestUtilities/FeatureTesting/FeatureTestRunner.cs

@ -211,6 +211,53 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities
} }
} }
/// <summary>
/// Runs the given test <paramref name="action"/> within an environment
/// where the given <paramref name="intrinsics"/> features.
/// </summary>
/// <param name="action">The test action to run.</param>
/// <param name="intrinsics">The intrinsics features.</param>
/// <param name="arg1">The value to pass as a parameter to the test action.</param>
/// <param name="arg2">The second value to pass as a parameter to the test action.</param>
public static void RunWithHwIntrinsicsFeature<T, T2>(
Action<string, string> action,
HwIntrinsics intrinsics,
T arg1,
T2 arg2)
where T : IXunitSerializable
where T2 : IXunitSerializable
{
if (!RemoteExecutor.IsSupported)
{
return;
}
foreach (KeyValuePair<HwIntrinsics, string> intrinsic in intrinsics.ToFeatureKeyValueCollection())
{
var processStartInfo = new ProcessStartInfo();
if (intrinsic.Key != HwIntrinsics.AllowAll)
{
processStartInfo.Environment[$"COMPlus_{intrinsic.Value}"] = "0";
RemoteExecutor.Invoke(
action,
BasicSerializer.Serialize(arg1),
BasicSerializer.Serialize(arg1),
new RemoteInvokeOptions
{
StartInfo = processStartInfo
})
.Dispose();
}
else
{
// Since we are running using the default architecture there is no
// point creating the overhead of running the action in a separate process.
action(BasicSerializer.Serialize(arg1), BasicSerializer.Serialize(arg2));
}
}
}
/// <summary> /// <summary>
/// Runs the given test <paramref name="action"/> within an environment /// Runs the given test <paramref name="action"/> within an environment
/// where the given <paramref name="intrinsics"/> features. /// where the given <paramref name="intrinsics"/> features.

Loading…
Cancel
Save