mirror of https://github.com/SixLabors/ImageSharp
4 changed files with 162 additions and 6 deletions
@ -0,0 +1,83 @@ |
|||||
|
// Copyright (c) Six Labors and contributors.
|
||||
|
// Licensed under the Apache License, Version 2.0.
|
||||
|
|
||||
|
using System.Threading; |
||||
|
|
||||
|
using SixLabors.ImageSharp.Memory; |
||||
|
using SixLabors.Primitives; |
||||
|
|
||||
|
using Xunit; |
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Tests.Helpers |
||||
|
{ |
||||
|
public class ParallelHelperTests |
||||
|
{ |
||||
|
[Theory] |
||||
|
[InlineData(1, 0, 100, -1, 100)] |
||||
|
[InlineData(2, 0, 9, 5, 4)] |
||||
|
[InlineData(2, 10, 19, 5, 4)] |
||||
|
[InlineData(4, 0, 200, 50, 50)] |
||||
|
[InlineData(4, 123, 323, 50, 50)] |
||||
|
public void IterateRows_OverMinimumPixelsLimit( |
||||
|
int maxDegreeOfParallelism, |
||||
|
int minY, |
||||
|
int maxY, |
||||
|
int expectedStep, |
||||
|
int expectedLastStep) |
||||
|
{ |
||||
|
Configuration cfg = Configuration.Default.ShallowCopy(); |
||||
|
cfg.MinimumPixelsProcessedPerTask = 1; |
||||
|
cfg.MaxDegreeOfParallelism = maxDegreeOfParallelism; |
||||
|
|
||||
|
var rectangle = new Rectangle(0, minY, 10, maxY); |
||||
|
|
||||
|
int actualNumberOfSteps = 0; |
||||
|
ParallelHelper.IterateRows(rectangle, cfg, |
||||
|
rows => |
||||
|
{ |
||||
|
Assert.True(rows.Min >= minY); |
||||
|
int step = rows.Max - rows.Min; |
||||
|
int expected = rows.Max < maxY ? expectedStep : expectedLastStep; |
||||
|
|
||||
|
Interlocked.Increment(ref actualNumberOfSteps); |
||||
|
Assert.Equal(expected, step); |
||||
|
}); |
||||
|
|
||||
|
Assert.Equal(maxDegreeOfParallelism, actualNumberOfSteps); |
||||
|
} |
||||
|
|
||||
|
[Theory] |
||||
|
[InlineData(2, 200, 50, 2, 1, -1, 2)] |
||||
|
[InlineData(2, 200, 200, 1, 1, -1, 1)] |
||||
|
[InlineData(4, 200, 100, 4, 2, 1, 1)] |
||||
|
[InlineData(4, 300, 100, 8, 3, 3, 2)] |
||||
|
public void IterateRows_WithEffectiveMinimumPixelsLimit( |
||||
|
int maxDegreeOfParallelism, |
||||
|
int minimumPixelsProcessedPerTask, |
||||
|
int width, |
||||
|
int height, |
||||
|
int expectedNumberOfSteps, |
||||
|
int expectedStep, |
||||
|
int expectedLastStep) |
||||
|
{ |
||||
|
Configuration cfg = Configuration.Default.ShallowCopy(); |
||||
|
cfg.MinimumPixelsProcessedPerTask = minimumPixelsProcessedPerTask; |
||||
|
cfg.MaxDegreeOfParallelism = maxDegreeOfParallelism; |
||||
|
|
||||
|
var rectangle = new Rectangle(0, 0, width, height); |
||||
|
|
||||
|
int actualNumberOfSteps = 0; |
||||
|
ParallelHelper.IterateRows(rectangle, cfg, |
||||
|
rows => |
||||
|
{ |
||||
|
int step = rows.Max - rows.Min; |
||||
|
int expected = rows.Max < height ? expectedStep : expectedLastStep; |
||||
|
|
||||
|
Interlocked.Increment(ref actualNumberOfSteps); |
||||
|
Assert.Equal(expected, step); |
||||
|
}); |
||||
|
|
||||
|
Assert.Equal(expectedNumberOfSteps, actualNumberOfSteps); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue