using Nonemm.Contests.Rules; using Nonemm.Core; namespace Nonemm.Contests.Tests; public class SweepstakesTests { private static ContestLog Log() => new(new Sweepstakes(ModeCategory.Cw), TestLog.UnitedStates, TestLog.CountryFile); [Fact] public void EveryContactScoresTwo() => Assert.Equal(2, Log().Judge(TestLog.Contact("K1ABC", section: "CT")).Points); [Fact] public void AStationWorkedOnOneBandIsADupeOnEveryOther() { ContestLog log = Log(); log.Add(TestLog.Contact("K1ABC", section: "CT")); Assert.True(log.Judge(TestLog.Contact("K1ABC", 7_025, section: "CT")).IsDupe); } [Fact] public void SectionsCountOnceForTheWholeContest() { ContestLog log = Log(); log.Add(TestLog.Contact("K1ABC", section: "CT")); Assert.Empty(log.Judge(TestLog.Contact("K2ABC", 7_025, section: "CT")).NewMultipliers); Assert.Single(log.Judge(TestLog.Contact("K2ABC", 7_025, section: "WMA")).NewMultipliers); } [Fact] public void SomethingThatIsNotASectionCountsForNothing() => Assert.Empty(Log().Judge(TestLog.Contact("K1ABC", section: "ZZ")).NewMultipliers); /// The whole exchange goes in one box, in any order, and comes back out in /// four columns. These are the shapes N1MM's box takes. [Theory] [InlineData("72 A 74 SCV")] [InlineData("72A 74SCV")] [InlineData("72 A 74SCV")] public void TheOneBoxIsReadBackAsFourFields(string typed) { SweepstakesExchange exchange = SweepstakesExchange.Parse(typed); Assert.Equal(72, exchange.Number); Assert.Equal("A", exchange.Precedence); Assert.Equal(74, exchange.Check); Assert.Equal("SCV", exchange.Section); } [Fact] public void TheOneBoxFillsTheContact() { Qso logged = new Sweepstakes(ModeCategory.Cw) .FromExchange1(TestLog.Contact("K1ABC"), "72A 74SCV"); Assert.Equal(72, logged.ReceivedNumber); Assert.Equal("A", logged.Precedence); Assert.Equal(74, logged.Check); Assert.Equal("SCV", logged.Section); } /// The exchange is one box and four log columns, as it is in N1MM. [Fact] public void TheLogKeepsTheFourPartsApart() { Sweepstakes contest = new(ModeCategory.Cw); Assert.Equal( [ExchangeSlot.SentNumber, ExchangeSlot.Exchange1], contest.ExchangeFieldsFor(TestLog.UnitedStates).Select(f => f.Slot).ToList()); Assert.Equal( [ ExchangeSlot.SerialNumber, ExchangeSlot.Precedence, ExchangeSlot.Check, ExchangeSlot.Section, ], contest.LogFieldsFor(TestLog.UnitedStates).Select(f => f.Slot).ToList()); } }