diff --git a/src/Nonemm.Contests/Rules/OceaniaDx.cs b/src/Nonemm.Contests/Rules/OceaniaDx.cs index 3cf7479..02f918d 100644 --- a/src/Nonemm.Contests/Rules/OceaniaDx.cs +++ b/src/Nonemm.Contests/Rules/OceaniaDx.cs @@ -64,13 +64,21 @@ public sealed class OceaniaDx : Contest public bool IsWorkable(QsoContext qso) => qso.Continent == "OC" || qso.Me.Continent == "OC"; + /// What a contact is worth on each of the contest's six bands. The high + /// bands pay more than 20 metres, which is the other way round from most + /// contests: from Oceania they are the hard ones. A band that is not in + /// this table is not in the contest — the WARC bands and 6 metres — and + /// scores nothing, which is how N1MM's `COceania.ComputePoints` ends as + /// well. private static int PointsOn(Band? band) => band?.Name switch { "160M" => 20, "80M" => 10, "40M" => 5, - null => 0, - _ => 1, + "20M" => 1, + "15M" => 2, + "10M" => 3, + _ => 0, }; private string ModeLabel() => mode == ModeCategory.Cw ? "CW" : "SSB"; diff --git a/tests/Nonemm.Contests.Tests/OceaniaDxTests.cs b/tests/Nonemm.Contests.Tests/OceaniaDxTests.cs index 4d5efce..351801d 100644 --- a/tests/Nonemm.Contests.Tests/OceaniaDxTests.cs +++ b/tests/Nonemm.Contests.Tests/OceaniaDxTests.cs @@ -13,11 +13,25 @@ public class OceaniaDxTests [InlineData(3_650, 10)] [InlineData(7_050, 5)] [InlineData(14_150, 1)] - public void TheLowerTheBandTheMorePoints(double kilohertz, int expected) => + [InlineData(21_150, 2)] + [InlineData(28_150, 3)] + public void EachBandOfTheContestHasItsOwnPoints(double kilohertz, int expected) => Assert.Equal( expected, LogFor().Judge(TestLog.Contact("VK4XYZ", kilohertz, mode: Modes.Usb)).Points); + /// The contest is on six bands. A contact on any other — the WARC bands, + /// 6 metres — is worth nothing, which is where N1MM's table ends too. + [Theory] + [InlineData(10_120)] + [InlineData(18_100)] + [InlineData(24_930)] + [InlineData(50_150)] + public void ABandOutsideTheContestScoresNothing(double kilohertz) => + Assert.Equal( + 0, + LogFor().Judge(TestLog.Contact("VK4XYZ", kilohertz, mode: Modes.Usb)).Points); + /// One side of the contact has to be in Oceania. [Fact] public void AContactOutsideOceaniaScoresNothing()