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:
+5
-5
@@ -7,10 +7,10 @@ import (
|
||||
"github.com/netsynth/netsynth/classify"
|
||||
)
|
||||
|
||||
func TestNewBankHas11Layers(t *testing.T) {
|
||||
func TestNewBankHas14Layers(t *testing.T) {
|
||||
b := NewBank(1.0)
|
||||
if len(b.layers) != 11 {
|
||||
t.Errorf("NewBank() has %d layers, want 11", len(b.layers))
|
||||
if len(b.layers) != 14 {
|
||||
t.Errorf("NewBank() has %d layers, want 14", len(b.layers))
|
||||
}
|
||||
// Verify each class has exactly one layer
|
||||
for _, class := range classify.AllClasses() {
|
||||
@@ -76,13 +76,13 @@ func TestRenderWindowNonZeroWithTraffic(t *testing.T) {
|
||||
func TestMixerNoClip(t *testing.T) {
|
||||
b := NewBank(0.01) // fast EMA to quickly ramp up to near-max amplitude
|
||||
counts := make(map[classify.TrafficClass]int64)
|
||||
// All 11 classes at max count — worst-case mixing scenario
|
||||
// All 14 classes at max count — worst-case mixing scenario
|
||||
for _, class := range classify.AllClasses() {
|
||||
counts[class] = 1000
|
||||
}
|
||||
snap := classify.WindowSnapshot{
|
||||
Counts: counts,
|
||||
TotalPackets: 11000,
|
||||
TotalPackets: 14000,
|
||||
WindowIndex: 0,
|
||||
}
|
||||
// Render multiple windows to let EMA converge
|
||||
|
||||
Reference in New Issue
Block a user