package synth_test import ( "testing" "github.com/netsynth/netsynth/classify" "github.com/netsynth/netsynth/synth" ) func TestAllClassesHaveConfig(t *testing.T) { for _, class := range classify.AllClasses() { if _, ok := synth.ClassFreqConfigs[class]; !ok { t.Errorf("class %q has no entry in ClassFreqConfigs", class) } } } func TestFrequenciesInRange(t *testing.T) { for class, cfg := range synth.ClassFreqConfigs { // D-05: unknown buckets use 850-1100 Hz dissonant range; known classes use 60-800 Hz if cfg.BaseHz < 60 || cfg.BaseHz > 1100 { t.Errorf("class %q BaseHz=%.1f is out of range [60, 1100]", class, cfg.BaseHz) } } } func TestFrequenciesUnique(t *testing.T) { seen := make(map[float64]classify.TrafficClass) for class, cfg := range synth.ClassFreqConfigs { if prev, exists := seen[cfg.BaseHz]; exists { t.Errorf("classes %q and %q share the same BaseHz=%.1f", prev, class, cfg.BaseHz) } seen[cfg.BaseHz] = class } } func TestHarmonicsNonEmpty(t *testing.T) { for class, cfg := range synth.ClassFreqConfigs { if len(cfg.Harmonics) < 2 { t.Errorf("class %q has fewer than 2 harmonics (got %d)", class, len(cfg.Harmonics)) } } } func TestPanPositionsInRange(t *testing.T) { for class, cfg := range synth.ClassFreqConfigs { if cfg.Pan < -1.0 || cfg.Pan > 1.0 { t.Errorf("class %q Pan=%.2f is out of range [-1.0, 1.0]", class, cfg.Pan) } } } func TestClassFreqConfigsComplete(t *testing.T) { for _, class := range classify.AllClasses() { if _, ok := synth.ClassFreqConfigs[class]; !ok { t.Errorf("ClassFreqConfigs missing entry for class %q", class) } } } func TestNumLayersMatchesAllClasses(t *testing.T) { if synth.NumLayers != len(classify.AllClasses()) { t.Errorf("NumLayers=%d but AllClasses() has %d entries", synth.NumLayers, len(classify.AllClasses())) } }