feat(03-01): extend TrafficClass to 14 classes with hash-bucketed unknowns
- Replace ClassUnknown with ClassUnknown1-4 (unknown-1 through unknown-4) - AllClasses() now returns 14 elements - Add hashBucket() function routing unrecognized traffic deterministically - Update synth/config.go: NumLayers=14, 4 dissonant unknown tone configs at 862-1047 Hz - Add TestAllClassesCount and TestHashBucketDistribution tests - Add TestClassFreqConfigsComplete and TestNumLayersMatchesAllClasses to config_test.go - Update TestNewBankHas14Layers, TestMixerNoClip for 14 classes - All classify and synth tests pass
This commit is contained in:
+17
-2
@@ -17,8 +17,9 @@ func TestAllClassesHaveConfig(t *testing.T) {
|
||||
|
||||
func TestFrequenciesInRange(t *testing.T) {
|
||||
for class, cfg := range synth.ClassFreqConfigs {
|
||||
if cfg.BaseHz < 60 || cfg.BaseHz > 800 {
|
||||
t.Errorf("class %q BaseHz=%.1f is out of range [60, 800]", class, cfg.BaseHz)
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,3 +49,17 @@ func TestPanPositionsInRange(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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()))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user