package dsp import ( "math" "testing" ) func TestMPXLimiterPassesQuiet(t *testing.T) { lim := NewMPXLimiter(1.0, 0.1, 50, 228000) for i := 0; i < 100; i++ { in := 0.3 * math.Sin(float64(i)) out := lim.Process(in) if math.Abs(out-in) > 1e-9 { t.Fatalf("limiter altered quiet signal at sample %d: in=%.6f out=%.6f", i, in, out) } } } func TestMPXLimiterClamps(t *testing.T) { lim := NewMPXLimiter(1.0, 0.01, 50, 228000) // Feed a signal well above ceiling var maxOut float64 for i := 0; i < 10000; i++ { in := 3.0 * math.Sin(2*math.Pi*1000*float64(i)/228000) out := lim.Process(in) if math.Abs(out) > maxOut { maxOut = math.Abs(out) } } // After attack settles, output should approach ceiling if maxOut > 1.5 { t.Fatalf("limiter didn't reduce level enough: maxOut=%.4f", maxOut) } } func TestHardClip(t *testing.T) { if HardClip(1.5, 1.0) != 1.0 { t.Fatal("expected clip to 1.0") } if HardClip(-1.5, 1.0) != -1.0 { t.Fatal("expected clip to -1.0") } if HardClip(0.5, 1.0) != 0.5 { t.Fatal("expected passthrough") } }