Add the Broadcast Data dialog and send N1MM's score breakdown
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
using Nonemm.Contests.Rules;
|
||||
using Nonemm.Core;
|
||||
|
||||
namespace Nonemm.Contests.Tests;
|
||||
|
||||
public class ScoreBreakdownTests
|
||||
{
|
||||
private static readonly Contest Contest = new CqWorldWide(ModeCategory.Cw);
|
||||
|
||||
private static Qso Scored(string call, double kilohertz, Mode mode, int points, bool zone = false, bool country = false) =>
|
||||
TestLog.Contact(call, kilohertz, mode) with
|
||||
{
|
||||
Points = points,
|
||||
IsMultiplier1 = zone,
|
||||
IsMultiplier2 = country,
|
||||
};
|
||||
|
||||
[Fact]
|
||||
public void Rows_are_ordered_by_the_band_as_text_then_by_mode_and_the_total_is_last()
|
||||
{
|
||||
List<Qso> log =
|
||||
[
|
||||
Scored("DL1AAA", 3_525, Modes.Cw, 1),
|
||||
Scored("DL1BBB", 10_120, Modes.Cw, 1),
|
||||
Scored("DL1CCC", 14_025, Modes.Cw, 1),
|
||||
Scored("DL1DDD", 14_200, Modes.Usb, 1),
|
||||
Scored("DL1EEE", 1_830, Modes.Cw, 1),
|
||||
];
|
||||
|
||||
IReadOnlyList<ScoreBreakdownRow> rows = ScoreBreakdown.For(log, Contest);
|
||||
|
||||
Assert.Equal(
|
||||
[(1.8, "CW"), (10.0, "CW"), (14.0, "CW"), (14.0, "USB"), (3.5, "CW"), (ScoreBreakdown.TotalBand, "Both")],
|
||||
rows.Select(r => (r.Band, r.Mode)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void A_row_adds_up_contacts_points_and_multiplier_flags()
|
||||
{
|
||||
List<Qso> log =
|
||||
[
|
||||
Scored("DL1AAA", 14_025, Modes.Cw, 3, zone: true, country: true),
|
||||
Scored("DL1BBB", 14_030, Modes.Cw, 3, country: true),
|
||||
Scored("DL1CCC", 7_010, Modes.Cw, 3, zone: true),
|
||||
];
|
||||
|
||||
ScoreBreakdownRow twenty = ScoreBreakdown.For(log, Contest).Single(r => r.Band == 14.0);
|
||||
ScoreBreakdownRow total = ScoreBreakdown.For(log, Contest).Last();
|
||||
|
||||
Assert.Equal((2, 6, 1, 2, 0), (twenty.Qsos, twenty.Points, twenty.Multipliers[0], twenty.Multipliers[1], twenty.Multipliers[2]));
|
||||
Assert.Equal((3, 9, 2, 2), (total.Qsos, total.Points, total.Multipliers[0], total.Multipliers[1]));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void A_dupe_and_an_unclaimed_contact_are_not_counted()
|
||||
{
|
||||
List<Qso> log =
|
||||
[
|
||||
Scored("DL1AAA", 14_025, Modes.Cw, 3),
|
||||
Scored("DL1AAA", 14_026, Modes.Cw, 0) with { ContactType = "D" },
|
||||
Scored("DL1BBB", 14_027, Modes.Cw, 3) with { IsClaimed = false },
|
||||
];
|
||||
|
||||
Assert.Equal(1, ScoreBreakdown.For(log, Contest).Last().Qsos);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void An_empty_log_has_no_rows_not_even_a_total()
|
||||
{
|
||||
Assert.Empty(ScoreBreakdown.For([], Contest));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user