awards
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package award
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"hamlog/internal/qso"
|
||||
)
|
||||
|
||||
func TestWPXPrefix(t *testing.T) {
|
||||
cases := map[string]string{
|
||||
"F4BPO": "F4",
|
||||
"EA8ABC": "EA8",
|
||||
"9A1AA": "9A1",
|
||||
"OH2BH": "OH2",
|
||||
"K1ABC": "K1",
|
||||
"RAEM": "RA0",
|
||||
"F4BPO/P": "F4",
|
||||
"F4BPO/9": "F9",
|
||||
"VP8/F4BPO": "VP8",
|
||||
"PA0XYZ": "PA0",
|
||||
}
|
||||
for in, want := range cases {
|
||||
if got := wpxPrefix(in); got != want {
|
||||
t.Errorf("wpxPrefix(%q) = %q, want %q", in, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func ip(n int) *int { return &n }
|
||||
|
||||
func TestComputeDXCCAndConfirm(t *testing.T) {
|
||||
qsos := []qso.QSO{
|
||||
{Callsign: "K1ABC", Band: "20m", DXCC: ip(291), State: "MA", LOTWRcvd: "Y"},
|
||||
{Callsign: "K2DEF", Band: "40m", DXCC: ip(291), State: "NY"}, // worked, not confirmed
|
||||
{Callsign: "DL1XYZ", Band: "20m", DXCC: ip(230), QSLRcvd: "Y"}, // DXCC Germany confirmed
|
||||
{Callsign: "F4BPO", Band: "20m", DXCC: ip(227), Notes: "nice qso D74", EQSLRcvd: "Y"}, // France dept 74 in note
|
||||
{Callsign: "F5ABC", Band: "40m", DXCC: ip(227), Notes: "D2A Corsica", QSLRcvd: "Y"}, // France dept 2A, confirmed
|
||||
}
|
||||
res := Compute(Defaults(), qsos, nil)
|
||||
by := map[string]Result{}
|
||||
for _, r := range res {
|
||||
by[r.Code] = r
|
||||
}
|
||||
|
||||
dxcc := by["DXCC"]
|
||||
if dxcc.Worked != 3 { // USA, Germany, France
|
||||
t.Errorf("DXCC worked = %d, want 3", dxcc.Worked)
|
||||
}
|
||||
// DXCC confirms on lotw|qsl → USA(lotw) + Germany(qsl) + France(qsl via F5ABC).
|
||||
if dxcc.Confirmed != 3 {
|
||||
t.Errorf("DXCC confirmed = %d, want 3", dxcc.Confirmed)
|
||||
}
|
||||
|
||||
was := by["WAS"]
|
||||
if was.Worked != 2 { // MA, NY only (France excluded by DXCC filter)
|
||||
t.Errorf("WAS worked = %d, want 2", was.Worked)
|
||||
}
|
||||
|
||||
// DDFM scans the Note field with pattern D(\d{1,2}[AB]?): 74 and 2A.
|
||||
ddfm := by["DDFM"]
|
||||
if ddfm.Worked != 2 {
|
||||
t.Errorf("DDFM worked = %d, want 2 (refs %v)", ddfm.Worked, refCodes(ddfm))
|
||||
}
|
||||
if ddfm.Confirmed != 1 { // 2A confirmed via QSL; 74 only eQSL (not accepted)
|
||||
t.Errorf("DDFM confirmed = %d, want 1", ddfm.Confirmed)
|
||||
}
|
||||
}
|
||||
|
||||
func refCodes(r Result) []string {
|
||||
out := make([]string, 0, len(r.Refs))
|
||||
for _, rf := range r.Refs {
|
||||
out = append(out, rf.Ref)
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user