< Summary

Information
Class: MusicTheory.Theory.Harmony.ProgressionDiagnosticsResult
Assembly: MusicTheory
File(s): /home/runner/work/MusicTheory/MusicTheory/Theory/Harmony/Diagnostics.cs
Line coverage
100%
Covered lines: 5
Uncovered lines: 0
Coverable lines: 5
Total lines: 42
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_PerIndex()100%11100%
get_TotalRange()100%11100%
get_TotalSpacing()100%11100%
get_TotalOverlap()100%11100%
get_TotalParallelPerfects()100%11100%

File(s)

/home/runner/work/MusicTheory/MusicTheory/Theory/Harmony/Diagnostics.cs

#LineLine coverage
 1using System.Collections.Generic;
 2
 3namespace MusicTheory.Theory.Harmony;
 4
 5public readonly record struct VoiceLeadingFlags(bool Range, bool Spacing, bool Overlap, bool ParallelPerfects);
 6
 7public readonly record struct ProgressionDiagnosticsResult(
 48    List<(int index, VoiceLeadingFlags flags)> PerIndex,
 19    int TotalRange,
 110    int TotalSpacing,
 111    int TotalOverlap,
 112    int TotalParallelPerfects
 13);
 14
 15public static class ProgressionDiagnostics
 16{
 17    public static ProgressionDiagnosticsResult AnalyzeVoicings(IReadOnlyList<FourPartVoicing?> voicings)
 18    {
 19        var list = new List<(int, VoiceLeadingFlags)>(voicings.Count);
 20        int sumR = 0, sumS = 0, sumO = 0, sumP = 0;
 21        for (int i = 0; i < voicings.Count; i++)
 22        {
 23            bool r = false, s = false, o = false, p = false;
 24            if (voicings[i] is FourPartVoicing v)
 25            {
 26                r = VoiceLeadingRules.HasRangeViolation(v);
 27                s = VoiceLeadingRules.HasSpacingViolations(v);
 28                if (i > 0 && voicings[i - 1] is FourPartVoicing prev)
 29                {
 30                    o = VoiceLeadingRules.HasOverlap(prev, v);
 31                    p = VoiceLeadingRules.HasParallelPerfects(prev, v);
 32                }
 33            }
 34            if (r) sumR++;
 35            if (s) sumS++;
 36            if (o) sumO++;
 37            if (p) sumP++;
 38            list.Add((i, new VoiceLeadingFlags(r, s, o, p)));
 39        }
 40        return new ProgressionDiagnosticsResult(list, sumR, sumS, sumO, sumP);
 41    }
 42}