refactor(test): exclude platform-specific Unpack impl

can't have coverage on SSE3/AVX2 instructions if CPU doesn't support it.
This commit is contained in:
Oliver Booth 2024-06-12 13:27:14 +01:00
parent d022a71ce6
commit db96c9e6fb
Signed by: oliverbooth
GPG Key ID: E60B570D1B7557B5
1 changed files with 23 additions and 14 deletions

View File

@ -1,4 +1,5 @@
#if NET7_0_OR_GREATER
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
using System.Numerics;
using System.Runtime.CompilerServices;
@ -48,6 +49,28 @@ public static class BinaryIntegerExtensions
}
}
UnpackInternal(value, destination);
}
[MethodImpl(CompilerResources.MaxOptimization)]
private static void UnpackInternal_Fallback<TInteger>(this TInteger value, Span<bool> destination)
where TInteger : unmanaged, IBinaryInteger<TInteger>
{
unsafe
{
int bitCount = sizeof(TInteger) * 8;
for (var index = 0; index < bitCount; index++)
{
destination[index] = (value & (TInteger.One << index)) != TInteger.Zero;
}
}
}
[ExcludeFromCodeCoverage]
[MethodImpl(CompilerResources.MaxOptimization)]
private static void UnpackInternal<TInteger>(TInteger value, Span<bool> destination)
where TInteger : unmanaged, IBinaryInteger<TInteger>
{
switch (value)
{
case byte valueByte when Sse3.IsSupported:
@ -71,19 +94,5 @@ public static class BinaryIntegerExtensions
break;
}
}
[MethodImpl(CompilerResources.MaxOptimization)]
internal static void UnpackInternal_Fallback<TInteger>(this TInteger value, Span<bool> destination)
where TInteger : unmanaged, IBinaryInteger<TInteger>
{
unsafe
{
int bitCount = sizeof(TInteger) * 8;
for (var index = 0; index < bitCount; index++)
{
destination[index] = (value & (TInteger.One << index)) != TInteger.Zero;
}
}
}
}
#endif