Skip to content

Commit

Permalink
Add Avx512 support to IndexOfAnyAsciiSearcher (#103710)
Browse files Browse the repository at this point in the history
  • Loading branch information
MihaZupan committed Jun 22, 2024
1 parent 3526759 commit ce1ae77
Show file tree
Hide file tree
Showing 3 changed files with 554 additions and 38 deletions.
13 changes: 8 additions & 5 deletions src/libraries/System.Memory/tests/Span/SearchValues.cs
Original file line number Diff line number Diff line change
Expand Up @@ -526,17 +526,17 @@ private static void Test<T>(Random rng, ReadOnlySpan<T> haystackRandom, ReadOnly

if (expectedIndex != indexOfAnyIndex)
{
AssertionFailed(haystack, needle, expectedIndex, indexOfAnyIndex, nameof(indexOfAny));
AssertionFailed(haystack, needle, searchValuesInstance, expectedIndex, indexOfAnyIndex, nameof(indexOfAny));
}

if (expectedIndex != searchValuesIndex)
{
AssertionFailed(haystack, needle, expectedIndex, searchValuesIndex, nameof(searchValues));
AssertionFailed(haystack, needle, searchValuesInstance, expectedIndex, searchValuesIndex, nameof(searchValues));
}

if ((expectedIndex >= 0) != searchValuesContainsResult)
{
AssertionFailed(haystack, needle, expectedIndex, searchValuesContainsResult ? 0 : -1, nameof(searchValuesContainsResult));
AssertionFailed(haystack, needle, searchValuesInstance, expectedIndex, searchValuesContainsResult ? 0 : -1, nameof(searchValuesContainsResult));
}
}

Expand All @@ -546,13 +546,16 @@ private static ReadOnlySpan<T> GetRandomSlice<T>(Random rng, ReadOnlySpan<T> spa
return slice.Slice(0, Math.Min(slice.Length, rng.Next(maxLength + 1)));
}

private static void AssertionFailed<T>(ReadOnlySpan<T> haystack, ReadOnlySpan<T> needle, int expected, int actual, string approach)
private static void AssertionFailed<T>(ReadOnlySpan<T> haystack, ReadOnlySpan<T> needle, SearchValues<T> searchValues, int expected, int actual, string approach)
where T : INumber<T>
{
Type implType = searchValues.GetType();
string impl = $"{implType.Name} [{string.Join(", ", implType.GenericTypeArguments.Select(t => t.Name))}]";

string readableHaystack = string.Join(", ", haystack.ToArray().Select(c => int.CreateChecked(c)));
string readableNeedle = string.Join(", ", needle.ToArray().Select(c => int.CreateChecked(c)));

Assert.Fail($"Expected {expected}, got {approach}={actual} for needle='{readableNeedle}', haystack='{readableHaystack}'");
Assert.Fail($"Expected {expected}, got {approach}={actual} for impl='{impl}', needle='{readableNeedle}', haystack='{readableHaystack}'");
}
}
}
Expand Down
Loading

0 comments on commit ce1ae77

Please sign in to comment.