Wideband autonomous SDR analysis engine forked from sdr-visual-suite
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.3KB

  1. package pipeline
  2. import "testing"
  3. func TestMonitorWindowStatsAttribution(t *testing.T) {
  4. policy := Policy{
  5. MonitorWindows: finalizeMonitorWindows([]MonitorWindow{
  6. {Label: "wide", StartHz: 100, EndHz: 300, SpanHz: 200},
  7. {Label: "narrow", StartHz: 150, EndHz: 250, SpanHz: 100},
  8. }),
  9. MinCandidateSNRDb: 5,
  10. MaxRefinementJobs: 5,
  11. }
  12. candidates := []Candidate{
  13. {ID: 1, CenterHz: 160, BandwidthHz: 10, SNRDb: 8},
  14. {ID: 2, CenterHz: 260, BandwidthHz: 10, SNRDb: 2},
  15. {ID: 3, CenterHz: 500, BandwidthHz: 10, SNRDb: 12},
  16. }
  17. plan := BuildRefinementPlan(candidates, policy)
  18. if plan.DroppedByMonitor != 1 {
  19. t.Fatalf("expected 1 dropped by monitor, got %d", plan.DroppedByMonitor)
  20. }
  21. if len(plan.MonitorWindowStats) != 2 {
  22. t.Fatalf("expected 2 window stats, got %d", len(plan.MonitorWindowStats))
  23. }
  24. var wide, narrow *MonitorWindowStats
  25. for i := range plan.MonitorWindowStats {
  26. stat := &plan.MonitorWindowStats[i]
  27. switch stat.Label {
  28. case "wide":
  29. wide = stat
  30. case "narrow":
  31. narrow = stat
  32. }
  33. }
  34. if wide == nil || narrow == nil {
  35. t.Fatalf("expected both window stats to be present")
  36. }
  37. if wide.Candidates != 2 || wide.Planned != 1 || wide.Dropped != 1 {
  38. t.Fatalf("unexpected wide stats: %+v", *wide)
  39. }
  40. if narrow.Candidates != 1 || narrow.Planned != 1 || narrow.Dropped != 0 {
  41. t.Fatalf("unexpected narrow stats: %+v", *narrow)
  42. }
  43. }