< Summary

Information
Class: FixedMathSharp.Geometry.CurvedPrismContactSelection
Assembly: FixedMathSharp
File(s): /home/runner/work/FixedMathSharp/FixedMathSharp/src/FixedMathSharp/Geometry/Wide/Convex/CurvedPrismContactSelection.cs
Line coverage
100%
Covered lines: 20
Uncovered lines: 0
Coverable lines: 20
Total lines: 56
Line coverage: 100%
Branch coverage
100%
Covered branches: 12
Total branches: 12
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%11100%
get_Candidate()100%11100%
Keep(...)100%1010100%
CopyPadded(...)100%22100%

File(s)

/home/runner/work/FixedMathSharp/FixedMathSharp/src/FixedMathSharp/Geometry/Wide/Convex/CurvedPrismContactSelection.cs

#LineLine coverage
 1//=======================================================================
 2// CurvedPrismContactSelection.cs
 3//=======================================================================
 4// MIT License, Copyright (c) 2024-present David Oravsky (mrdav30)
 5// See LICENSE file in the project root for full license information.
 6//=======================================================================
 7
 8using System;
 9
 10namespace FixedMathSharp.Geometry;
 11
 12/// <summary>One exactly ranked curved support feature against the complete prism.</summary>
 13internal ref struct CurvedPrismContactSelection
 14{
 15    internal const int Bottom = -1, Free = 0, Top = 1;
 16    internal readonly Span<ulong> Values;
 17    internal readonly Span<int> Signs;
 18    internal int GapSign, Vertex, Feature;
 19    internal bool HasValue;
 20    internal int Window, Certificate;
 21    internal readonly PrismCurvedContactDomain Domain;
 22
 23    internal CurvedPrismContactSelection(Span<ulong> values, Span<int> signs)
 24    {
 399825        Values = values; Signs = signs;
 799626        GapSign = Vertex = Feature = Window = 0; HasValue = false; Certificate = -1; Domain = default;
 199927    }
 28
 29    internal CurvedPrismContactSelection(Span<ulong> values, Span<int> signs, PrismCurvedContactDomain domain)
 19230        : this(values, signs) { Domain = domain; }
 31
 1596532    internal readonly ConvexContactCandidate Candidate => new(Values, Signs, GapSign);
 33
 34    internal void Keep(in CurvedPrismContactGeometry geometry, scoped ReadOnlySpan<ulong> values, scoped ReadOnlySpan<in
 35        int gapSign, int vertex, int feature, int fieldWords = ConvexContactCandidate.Words)
 36    {
 37        System.Diagnostics.Debug.Assert(!Domain.Enabled || fieldWords == ConvexContactCandidate.Words);
 1803938        if (HasValue && WideConvexPrismRelations.CompareConvexContactCandidates(
 1803939                new ConvexContactCandidate(values, signs, gapSign, fieldWords), Candidate) >= 0)
 1421140            return;
 765641        int window = 0, certificate = -1;
 382842        if (Domain.Enabled && !CurvedPrismContact.TryAdmitAnalyticCandidate(geometry, Domain, values, signs,
 594443            gapSign, vertex, feature, out window, out certificate)) return;
 178744        if (fieldWords == ConvexContactCandidate.Words) values.CopyTo(Values);
 163745        else CopyPadded(values, fieldWords, Values);
 513646        signs.CopyTo(Signs); Window = window; Certificate = certificate;
 684847        GapSign = gapSign; Vertex = vertex; Feature = feature; HasValue = true;
 171248    }
 49    private static void CopyPadded(scoped ReadOnlySpan<ulong> source, int words, scoped Span<ulong> target)
 50    {
 163751        target.Clear();
 3928852        for (int slot = 0; slot < ConvexContactCandidate.Slots; slot++)
 1800753            source.Slice(slot * words, words).CopyTo(target.Slice(slot * ConvexContactCandidate.Words, words));
 163754    }
 55
 56}