using Nonemm.Core; namespace Nonemm.Spotting.Tests; public class QsxTests { private static readonly Frequency Spot = Frequency.FromKilohertz(14_025); private static double Kilohertz(string comment) => Qsx.Parse(comment, Spot).Kilohertz; [Fact] public void AWholeFrequencyAfterQsxIsTakenAsItIs() => Assert.Equal(14_205, Kilohertz("QSX 14205")); [Fact] public void ABareNumberAfterQsxIsKilohertzInTheBand() => Assert.Equal(14_205, Kilohertz("QSX 205")); [Fact] public void UpAndDownAreOffsetsFromTheSpot() { Assert.Equal(14_027, Kilohertz("UP 2")); Assert.Equal(14_020, Kilohertz("DN 5")); Assert.Equal(14_020, Kilohertz("DOWN 5")); } [Fact] public void ACommentThatSaysNothingAboutSplitGivesNothing() { Assert.Equal(0, Kilohertz("CQ TEST")); Assert.Equal(0, Kilohertz("")); } [Fact] public void AGridSquareIsNotAnOffset() => Assert.Equal(0, Kilohertz("TNX QSO DN70")); [Fact] public void AWordThatOnlyHoldsTheLettersIsNotAnOffset() => Assert.Equal(0, Kilohertz("GROUP 5")); [Fact] public void ABigNumberAfterAnythingButQsxIsNotAnOffset() => Assert.Equal(0, Kilohertz("UP 14205")); [Fact] public void AListeningFrequencyOutsideTheBandIsDropped() => Assert.Equal(0, Kilohertz("QSX 7205")); [Fact] public void TheSpotLineCarriesTheListeningFrequency() { Spot? spot = SpotLine.Parse( "DX de W3LPL: 14025.0 JA1XYZ UP 2 1234Z", new DateTime(2026, 8, 28, 12, 0, 0, DateTimeKind.Utc)); Assert.Equal(14_027_000, Assert.IsType(spot).Qsx.Hertz); Assert.True(spot.IsSplit); } }