Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

33 строки
1.2KB

  1. package main
  2. import (
  3. "testing"
  4. "time"
  5. "sdr-wideband-suite/internal/pipeline"
  6. )
  7. func TestEnforceDecisionBudgets(t *testing.T) {
  8. decisions := []pipeline.SignalDecision{
  9. {Candidate: pipeline.Candidate{ID: 1, SNRDb: 5}, ShouldRecord: true, ShouldAutoDecode: true},
  10. {Candidate: pipeline.Candidate{ID: 2, SNRDb: 15}, ShouldRecord: true, ShouldAutoDecode: true},
  11. {Candidate: pipeline.Candidate{ID: 3, SNRDb: 10}, ShouldRecord: true, ShouldAutoDecode: false},
  12. }
  13. q := newDecisionQueues()
  14. policy := pipeline.Policy{SignalPriorities: []string{"digital"}, MaxRecordingStreams: 1, MaxDecodeJobs: 1}
  15. budget := pipeline.BudgetModelFromPolicy(policy)
  16. stats := q.Apply(decisions, budget, time.Now(), policy)
  17. if stats.RecordSelected != 1 || stats.DecodeSelected != 1 {
  18. t.Fatalf("unexpected counts: record=%d decode=%d", stats.RecordSelected, stats.DecodeSelected)
  19. }
  20. if !decisions[1].ShouldRecord || !decisions[1].ShouldAutoDecode {
  21. t.Fatalf("expected highest SNR decision to remain allowed")
  22. }
  23. if decisions[0].ShouldRecord || decisions[0].ShouldAutoDecode {
  24. t.Fatalf("expected lowest SNR decision to be budgeted off")
  25. }
  26. if decisions[2].ShouldRecord {
  27. t.Fatalf("expected mid SNR decision to be budgeted off by record budget")
  28. }
  29. }