< Summary

Information
Class: System.Buffers.Any5SearchValues<T1, T2>
Assembly: System.Private.CoreLib
File(s): D:\runner\runtime\src\libraries\System.Private.CoreLib\src\System\SearchValues\Any5SearchValues.cs
Line coverage
87%
Covered lines: 14
Uncovered lines: 2
Coverable lines: 16
Total lines: 54
Line coverage: 87.5%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
GetValues()100%110%
ContainsCore(...)100%88100%
IndexOfAny(...)100%11100%
IndexOfAnyExcept(...)100%11100%
LastIndexOfAny(...)100%11100%
LastIndexOfAnyExcept(...)100%11100%

File(s)

D:\runner\runtime\src\libraries\System.Private.CoreLib\src\System\SearchValues\Any5SearchValues.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Diagnostics;
 5using System.Numerics;
 6using System.Runtime.CompilerServices;
 7using System.Runtime.InteropServices;
 8
 9namespace System.Buffers
 10{
 11    internal sealed class Any5SearchValues<T, TImpl> : SearchValues<T>
 12        where T : struct, IEquatable<T>
 13        where TImpl : struct, INumber<TImpl>
 14    {
 15        private readonly TImpl _e0, _e1, _e2, _e3, _e4;
 16
 72717        public unsafe Any5SearchValues(ReadOnlySpan<TImpl> values)
 18        {
 72719            Debug.Assert(sizeof(T) == sizeof(TImpl));
 72720            Debug.Assert(values.Length == 5);
 72721            (_e0, _e1, _e2, _e3, _e4) = (values[0], values[1], values[2], values[3], values[4]);
 72722        }
 23
 24        internal override unsafe T[] GetValues()
 25        {
 026            TImpl e0 = _e0, e1 = _e1, e2 = _e2, e3 = _e3, e4 = _e4;
 027            return [*(T*)&e0, *(T*)&e1, *(T*)&e2, *(T*)&e3, *(T*)&e4];
 28        }
 29
 30        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 31        internal override unsafe bool ContainsCore(T value) =>
 21385632            *(TImpl*)&value == _e0 ||
 21385633            *(TImpl*)&value == _e1 ||
 21385634            *(TImpl*)&value == _e2 ||
 21385635            *(TImpl*)&value == _e3 ||
 21385636            *(TImpl*)&value == _e4;
 37
 38        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 39        internal override int IndexOfAny(ReadOnlySpan<T> span) =>
 290840            SpanHelpers.IndexOfAnyValueType(ref Unsafe.As<T, TImpl>(ref MemoryMarshal.GetReference(span)), _e0, _e1, _e2
 41
 42        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 43        internal override int IndexOfAnyExcept(ReadOnlySpan<T> span) =>
 290844            SpanHelpers.IndexOfAnyExceptValueType(ref Unsafe.As<T, TImpl>(ref MemoryMarshal.GetReference(span)), _e0, _e
 45
 46        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 47        internal override int LastIndexOfAny(ReadOnlySpan<T> span) =>
 145448            SpanHelpers.LastIndexOfAnyValueType(ref Unsafe.As<T, TImpl>(ref MemoryMarshal.GetReference(span)), _e0, _e1,
 49
 50        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 51        internal override int LastIndexOfAnyExcept(ReadOnlySpan<T> span) =>
 145452            SpanHelpers.LastIndexOfAnyExceptValueType(ref Unsafe.As<T, TImpl>(ref MemoryMarshal.GetReference(span)), _e0
 53    }
 54}