Skip to content

Commit 41d98d6

Browse files
Update PixelOperationsTests.cs
1 parent beea83b commit 41d98d6

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

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

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ public void FromCompandedScaledVector4(int count)
182182
this.Configuration,
183183
s,
184184
d.GetSpan(),
185-
PixelConversionModifiers.SRgbCompand | PixelConversionModifiers.Scale));
185+
PixelConversionModifiers.SRgbCompand | PixelConversionModifiers.Scale),
186+
false);
186187
}
187188

188189
[Theory]
@@ -302,7 +303,8 @@ void ExpectedAction(ref Vector4 v)
302303
s,
303304
d.GetSpan(),
304305
modifiers | PixelConversionModifiers.SRgbCompand | PixelConversionModifiers.Scale);
305-
});
306+
},
307+
false);
306308
}
307309

308310
[Theory]
@@ -1030,11 +1032,12 @@ internal static Vector4[] CreateExpectedScaledVector4Data(TPixel[] source, RefAc
10301032
internal static void TestOperation<TSource, TDest>(
10311033
TSource[] source,
10321034
TDest[] expected,
1033-
Action<TSource[], IMemoryOwner<TDest>> action)
1035+
Action<TSource[], IMemoryOwner<TDest>> action,
1036+
bool preferExactComparison = true)
10341037
where TSource : struct
10351038
where TDest : struct
10361039
{
1037-
using (var buffers = new TestBuffers<TSource, TDest>(source, expected))
1040+
using (var buffers = new TestBuffers<TSource, TDest>(source, expected, preferExactComparison))
10381041
{
10391042
action(buffers.SourceBuffer, buffers.ActualDestBuffer);
10401043
buffers.Verify();
@@ -1135,11 +1138,14 @@ private class TestBuffers<TSource, TDest> : IDisposable
11351138

11361139
public TDest[] ExpectedDestBuffer { get; }
11371140

1138-
public TestBuffers(TSource[] source, TDest[] expectedDest)
1141+
public bool PreferExactComparison { get; }
1142+
1143+
public TestBuffers(TSource[] source, TDest[] expectedDest, bool preferExactComparison = true)
11391144
{
11401145
this.SourceBuffer = source;
11411146
this.ExpectedDestBuffer = expectedDest;
11421147
this.ActualDestBuffer = Configuration.Default.MemoryAllocator.Allocate<TDest>(expectedDest.Length);
1148+
this.PreferExactComparison = preferExactComparison;
11431149
}
11441150

11451151
public void Dispose() => this.ActualDestBuffer.Dispose();
@@ -1159,7 +1165,7 @@ public void Verify()
11591165
Assert.Equal(expected[i], actual[i], comparer);
11601166
}
11611167
}
1162-
else if (typeof(IPixel).IsAssignableFrom(typeof(TDest)))
1168+
else if (!this.PreferExactComparison && typeof(IPixel).IsAssignableFrom(typeof(TDest)) && IsComplexPixel())
11631169
{
11641170
Span<TDest> expected = this.ExpectedDestBuffer.AsSpan();
11651171
Span<TDest> actual = this.ActualDestBuffer.GetSpan();
@@ -1174,12 +1180,32 @@ public void Verify()
11741180
{
11751181
Span<TDest> expected = this.ExpectedDestBuffer.AsSpan();
11761182
Span<TDest> actual = this.ActualDestBuffer.GetSpan();
1183+
11771184
for (int i = 0; i < count; i++)
11781185
{
11791186
Assert.Equal(expected[i], actual[i]);
11801187
}
11811188
}
11821189
}
1190+
1191+
// TODO: We really need a PixelTypeInfo.BitsPerComponent property!!
1192+
private static bool IsComplexPixel()
1193+
{
1194+
switch (default(TDest))
1195+
{
1196+
case HalfSingle _:
1197+
case HalfVector2 _:
1198+
case L16 _:
1199+
case La32 _:
1200+
case NormalizedShort2 _:
1201+
case Rg32 _:
1202+
case Short2 _:
1203+
return true;
1204+
1205+
default:
1206+
return Unsafe.SizeOf<TDest>() > sizeof(int);
1207+
}
1208+
}
11831209
}
11841210
}
11851211
}

0 commit comments

Comments
 (0)