1package fcc23import (4 "math"5 "os"6 "testing"7)89func TestParseAndLicensed(t *testing.T) {10 raw, err := os.ReadFile("testdata/tvq.txt")11 if err != nil {12 t.Fatal(err)13 }14 all, err := Parse(raw)15 if err != nil {16 t.Fatal(err)17 }18 if len(all) != 5 {19 t.Fatalf("parsed %d records, want 5", len(all))20 }21 lic := Licensed(all)22 got := make(map[string]Facility)23 for _, f := range lic {24 got[f.CallSign] = f25 if f.Status != "LIC" {26 t.Errorf("%s: status %q kept", f.CallSign, f.Status)27 }28 }29 if len(lic) != 3 {30 t.Fatalf("licensed = %d records, want 3 (KBRO-LD, KWGN-TV, KCNC-TV)", len(lic))31 }3233 k := got["KWGN-TV"]34 checks := []struct {35 name string36 got, want float6437 }{38 {"rf", float64(k.RFChannel), 34},39 {"virtual", float64(k.VirtualChannel), 2},40 {"erp", k.ERPkW, 1000},41 {"haat", k.HAATm, 336},42 {"rcamsl", k.RCAMSLm, 2340.6},43 {"distance", k.DistanceKm, 21.06},44 {"bearing", k.BearingDeg, 267.89},45 {"lat", k.Point.Lat, 39 + 43.0/60 + 58.0/3600},46 {"lon", k.Point.Lon, -(105 + 14.0/60 + 10.0/3600)},47 }48 for _, c := range checks {49 if math.Abs(c.got-c.want) > 1e-6 {50 t.Errorf("KWGN-TV %s = %v, want %v", c.name, c.got, c.want)51 }52 }53 if k.BaseCall != "KWGN" || k.City != "Denver" || k.Service != "DTV" {54 t.Errorf("KWGN-TV identity = %q %q %q", k.BaseCall, k.City, k.Service)55 }56 if got["KCNC-TV"].ERPkW != 1000 {57 t.Errorf("KCNC-TV kept the STA record (ERP %v), want the licensed 1000 kW", got["KCNC-TV"].ERPkW)58 }59}6061func TestBandAndFrequency(t *testing.T) {62 tests := []struct {63 rf int64 band string65 mhz float6466 }{67 {2, "VHF-Lo", 57}, {6, "VHF-Lo", 85}, {7, "VHF-Hi", 177}, {13, "VHF-Hi", 213}, {14, "UHF", 473}, {36, "UHF", 605},68 }69 for _, tt := range tests {70 if b := Band(tt.rf); b != tt.band {71 t.Errorf("Band(%d) = %s, want %s", tt.rf, b, tt.band)72 }73 if f := CenterMHz(tt.rf); f != tt.mhz {74 t.Errorf("CenterMHz(%d) = %v, want %v", tt.rf, f, tt.mhz)75 }76 }77}7879func TestBaseCall(t *testing.T) {80 for in, want := range map[string]string{"KWGN-TV": "KWGN", "K11QJ-D": "K11QJ", "KUSA": "KUSA", "kbro-ld": "KBRO"} {81 if got := BaseCall(in); got != want {82 t.Errorf("BaseCall(%q) = %q, want %q", in, got, want)83 }84 }85}