test(08-01): future-proof frequency bounds and rename test

- Replace hardcoded [60, 1100] Hz bounds with Nyquist-based validation (0, 22050)
- Rename TestNumLayersMatchesAllClasses to TestClassFreqConfigsMatchAllClasses
- Remove duplicate TestClassFreqConfigsComplete (subset of TestAllClassesHaveConfig)
- All tests green
This commit is contained in:
2026-03-27 08:54:34 +01:00
parent fd17061b0d
commit 4800e8e463
+7 -12
View File
@@ -16,10 +16,13 @@ func TestAllClassesHaveConfig(t *testing.T) {
} }
func TestFrequenciesInRange(t *testing.T) { func TestFrequenciesInRange(t *testing.T) {
const nyquist = float64(synth.SampleRate) / 2.0 // 22050 Hz
for class, cfg := range synth.ClassFreqConfigs { 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 <= 0 {
if cfg.BaseHz < 60 || cfg.BaseHz > 1100 { t.Errorf("class %q BaseHz=%.1f must be positive", class, cfg.BaseHz)
t.Errorf("class %q BaseHz=%.1f is out of range [60, 1100]", class, cfg.BaseHz) }
if cfg.BaseHz >= nyquist {
t.Errorf("class %q BaseHz=%.1f exceeds Nyquist (%.1f Hz)", class, cfg.BaseHz, nyquist)
} }
} }
} }
@@ -50,15 +53,7 @@ func TestPanPositionsInRange(t *testing.T) {
} }
} }
func TestClassFreqConfigsComplete(t *testing.T) { func TestClassFreqConfigsMatchAllClasses(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 len(synth.ClassFreqConfigs) != len(classify.AllClasses()) { if len(synth.ClassFreqConfigs) != len(classify.AllClasses()) {
t.Errorf("ClassFreqConfigs has %d entries but AllClasses() has %d entries", t.Errorf("ClassFreqConfigs has %d entries but AllClasses() has %d entries",
len(synth.ClassFreqConfigs), len(classify.AllClasses())) len(synth.ClassFreqConfigs), len(classify.AllClasses()))