Read the rest of what a .udc file says, and score what N1MM scores
Two pieces of work on the scoring engine. The .udc reader now takes N1MM's published scoring vocabulary: the full PointsPerContact condition set, the PointsMultBy family, PowerMult, BonusPoints, the multiplier sources and the settings that say which stations bring a multiplier in. MultMult is a weight rather than a switch, as in N1MM's ComputeScore. The entry categories and the sent exchange reach the rules in a new ContestEntry, so a contest can score by the power category it is entered in or by what this station sends. Then every contest in a real N1MM log was scored again from these rules and compared with the points and multiplier flags N1MM wrote. That found five bugs: ARRL DX and IARU read the exchange from the wrong column, a stored " " was read as a value rather than as empty, CQ WW RTTY's own Canadian area names were not counted, a maritime mobile scored nothing, and a contact in a mode the contest does not run scored as if it were in the contest. docs/n1mm-interop.md has the check and what still differs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RoGtneMQaz4M9w7Kk49AVD
This commit is contained in:
@@ -66,4 +66,16 @@ public class CqWpxTests
|
||||
ContestLog log = LogFor(TestLog.Germany);
|
||||
Assert.Empty(log.Judge(TestLog.Contact("DL1ABC/MM")).NewMultipliers);
|
||||
}
|
||||
|
||||
/// A tuning carrier logged by accident, or any contact in a mode the
|
||||
/// contest does not run, scores nothing. The prefix still counts, which is
|
||||
/// what N1MM logs.
|
||||
[Fact]
|
||||
public void AContactInAnotherModeScoresNothingAndKeepsItsMultiplier()
|
||||
{
|
||||
ContestLog log = new(new CqWpx(ModeCategory.Phone), TestLog.Germany, TestLog.CountryFile);
|
||||
Verdict verdict = log.Judge(TestLog.Contact("IK2XYZ", mode: Modes.Rtty, number: 5));
|
||||
Assert.Equal(0, verdict.Points);
|
||||
Assert.Single(verdict.NewMultipliers);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user