< Summary

Information
Class: MusicTheory.Theory.Harmony.ProgressionDiagnostics
Assembly: MusicTheory
File(s): /home/runner/work/MusicTheory/MusicTheory/Theory/Harmony/Diagnostics.cs
Line coverage
100%
Covered lines: 16
Uncovered lines: 0
Coverable lines: 16
Total lines: 42
Line coverage: 100%
Branch coverage
93%
Covered branches: 15
Total branches: 16
Branch coverage: 93.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AnalyzeVoicings(...)93.75%1616100%

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(
 8    List<(int index, VoiceLeadingFlags flags)> PerIndex,
 9    int TotalRange,
 10    int TotalSpacing,
 11    int TotalOverlap,
 12    int TotalParallelPerfects
 13);
 14
 15public static class ProgressionDiagnostics
 16{
 17    public static ProgressionDiagnosticsResult AnalyzeVoicings(IReadOnlyList<FourPartVoicing?> voicings)
 18    {
 119        var list = new List<(int, VoiceLeadingFlags)>(voicings.Count);
 420        int sumR = 0, sumS = 0, sumO = 0, sumP = 0;
 821        for (int i = 0; i < voicings.Count; i++)
 22        {
 1223            bool r = false, s = false, o = false, p = false;
 324            if (voicings[i] is FourPartVoicing v)
 25            {
 326                r = VoiceLeadingRules.HasRangeViolation(v);
 327                s = VoiceLeadingRules.HasSpacingViolations(v);
 328                if (i > 0 && voicings[i - 1] is FourPartVoicing prev)
 29                {
 230                    o = VoiceLeadingRules.HasOverlap(prev, v);
 231                    p = VoiceLeadingRules.HasParallelPerfects(prev, v);
 32                }
 33            }
 634            if (r) sumR++;
 435            if (s) sumS++;
 536            if (o) sumO++;
 337            if (p) sumP++;
 338            list.Add((i, new VoiceLeadingFlags(r, s, o, p)));
 39        }
 140        return new ProgressionDiagnosticsResult(list, sumR, sumS, sumO, sumP);
 41    }
 42}