using Nonemm.Contests.Rules; using Nonemm.Core; using Nonemm.Core.Country; namespace Nonemm.Contests.Tests; public class OkOmDxTests { private static readonly Contest Ssb = new OkOmDx(ModeCategory.Phone); private static ContestLog LogFor(StationInfo me) => new(Ssb, me, TestLog.CountryFile); private static Qso FromOkOm(string call, string county, double kilohertz = 14_025) => TestLog.Contact(call, kilohertz, mode: Modes.Usb, section: county); private static Qso FromDx(string call, string number, double kilohertz = 14_025) => TestLog.Contact(call, kilohertz, mode: Modes.Usb, exchange: number); [Theory] [InlineData("OM3XYZ", 2)] [InlineData("OK1XYZ", 3)] public void AtHomeCzechiaAndSlovakiaAreTwoCountries(string call, int expected) => Assert.Equal(expected, LogFor(TestLog.Slovakia).Judge(FromOkOm(call, "NOV")).Points); [Theory] [InlineData("IK2XYZ", 3)] [InlineData("JA1XYZ", 5)] public void TheRestOfTheWorldIsScoredByContinent(string call, int expected) => Assert.Equal(expected, LogFor(TestLog.Slovakia).Judge(FromDx(call, "014")).Points); [Theory] [InlineData("OM3XYZ", 10)] [InlineData("DL9XYZ", 1)] [InlineData("IK2XYZ", 3)] [InlineData("JA1XYZ", 5)] public void AStationOutsideScoresTenForAnOkOmContact(string call, int expected) => Assert.Equal(expected, LogFor(TestLog.Germany).Judge(FromOkOm(call, "NOV")).Points); [Fact] public void CountriesAndCountiesBothCountOncePerBand() { ContestLog log = LogFor(TestLog.Slovakia); Assert.Equal( [1, 2], log.Judge(FromOkOm("OM3XYZ", "NOV")).NewMultipliers.Select(m => m.Index).ToList()); log.Add(FromOkOm("OM3XYZ", "NOV")); Assert.Empty(log.Judge(FromOkOm("OM4XYZ", "NOV")).NewMultipliers); Assert.Single(log.Judge(FromOkOm("OM4XYZ", "PAR")).NewMultipliers); } [Fact] public void AStationOutsideOkOmBringsItsCountryAndNoCounty() => Assert.Equal( [1], LogFor(TestLog.Slovakia).Judge(FromDx("IK2XYZ", "014")).NewMultipliers .Select(m => m.Index) .ToList()); /// The entry window walks the county box for an OK or OM station and the /// serial box for everyone else. [Fact] public void OnlyOneOfTheTwoBoxesIsWalked() { IReadOnlyList fields = Ssb.ExchangeFieldsFor(TestLog.Slovakia); CountryLookup? okom = TestLog.CountryFile.Find("OM3XYZ"); CountryLookup? dx = TestLog.CountryFile.Find("IK2XYZ"); Assert.Equal( [ExchangeSlot.ReceivedReport, ExchangeSlot.Exchange1], fields.Where(f => !Ssb.SkipsField(f, dx)).Select(f => f.Slot).ToList()); Assert.Equal( [ExchangeSlot.ReceivedReport, ExchangeSlot.Section], fields.Where(f => !Ssb.SkipsField(f, okom)).Select(f => f.Slot).ToList()); } }