Files
wehub-resource-sync ead81af521
Deploy to GitHub Pages / deploy (push) Failing after 0s
CI / go (push) Has been cancelled
CI / build (darwin, macos-14) (push) Has been cancelled
CI / build (windows, windows-2025) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:13 +08:00

87 lines
2.6 KiB
Go

package ui
import (
"testing"
"time"
)
func TestTickIntervalClassicPeakSettlingUsesAdaptiveCadence(t *testing.T) {
v := NewVisualizer(44100)
activateMode(t, v, VisClassicPeak)
driver := classicPeakDriverFor(t, v)
v.Rows = DefaultVisRows
v.bands = uniformBands(0.3)
driver.barPos = repeatedClassicPeakSlice(8, 0.3)
driver.peakPos = repeatedClassicPeakSlice(8, 0.5)
driver.peakVel = repeatedClassicPeakSlice(8, 0)
withPanelWidth(t, 8)
if !driver.animating(v) {
t.Fatal("animating() = false, want true while ClassicPeak caps are still settling")
}
wantFPS := classicPeakLaunchMax * float64(DefaultVisRows*len(classicPeakGlyphs))
wantFPS = min(classicPeakMaxFPS, max(classicPeakMinFPS, wantFPS))
want := time.Duration(float64(time.Second) / wantFPS)
ctx := VisTickContext{}
if got := v.TickInterval(ctx); got != want {
t.Fatalf("TickInterval() = %v, want %v while ClassicPeak caps are still settling", got, want)
}
}
func TestClassicPeakAnalysisIntervalUsesFFTOverlapLimit(t *testing.T) {
v := NewVisualizer(44100)
activateMode(t, v, VisClassicPeak)
driver := classicPeakDriverFor(t, v)
v.Rows = 24
frame := driver.frameInterval(v)
if frame != tickClassicPeak {
t.Fatalf("frameInterval() = %v, want %v when rows clamp to max FPS", frame, tickClassicPeak)
}
spec := driver.AnalysisSpec(v)
window := time.Duration(float64(time.Second) * float64(spec.FFTSize) / v.sr)
want := max(frame, max(classicPeakSampleFloor, time.Duration(float64(window)/classicPeakFFTOverlap)))
if got := driver.analysisInterval(v); got != want {
t.Fatalf("analysisInterval() = %v, want %v", got, want)
}
}
func TestTickClassicPeakStoppedDecayKeepsAnimatingTowardSilence(t *testing.T) {
v := NewVisualizer(44100)
activateMode(t, v, VisClassicPeak)
driver := classicPeakDriverFor(t, v)
v.Rows = DefaultVisRows
spec := driver.AnalysisSpec(v)
v.prevBySpec[spec] = uniformBandsN(spec.BandCount, 0.6)
v.bands = uniformBandsN(spec.BandCount, 0.6)
driver.barPos = repeatedClassicPeakSlice(8, 0.6)
driver.peakPos = repeatedClassicPeakSlice(8, 0.6)
driver.peakVel = repeatedClassicPeakSlice(8, 0)
driver.peakHold = repeatedClassicPeakSlice(8, 0)
withPanelWidth(t, 8)
calls := 0
driver.Tick(v, VisTickContext{
Now: time.Now(),
Analyze: func(VisAnalysisSpec) []float64 {
calls++
return uniformBands(1)
},
})
if calls != 0 {
t.Fatalf("Analyze() calls = %d, want 0 while stopped decay runs toward silence", calls)
}
if got := v.bands[0]; got >= 0.6 {
t.Fatalf("tickClassicPeak() kept stopped band at %v, want decay below 0.6", got)
}
if !driver.animating(v) {
t.Fatal("animating() = false after stopped decay, want true while bars settle toward silence")
}
}