Files
fenrir/internal/sound/indentation_test.go

52 lines
1.6 KiB
Go

// Copyright (c) 2026 Storm Dragon
// SPDX-License-Identifier: GPL-3.0-or-later
package sound
import (
"slices"
"testing"
)
func TestIndentationTriangleCacheAndIndependentProgressCancellation(t *testing.T) {
s := &Service{tones: progress_clips(), indentationTones: indentation_clips()}
s.Set_volume(0.5)
for level, item := range s.indentationTones {
if item == nil || len(item.samples) != len(s.tones[level].samples) || slices.Equal(item.samples, s.tones[level].samples) {
t.Fatal("missing or undifferentiated triangle tone", level)
}
if level > 0 && slices.Equal(item.samples, s.indentationTones[level-1].samples) {
t.Fatal("neighboring levels have the same tone", level)
}
}
for _, level := range []int{0, 1, 50, 100, 101, 10000} {
item := s.indentationTones[min(level, 100)]
progress := s.tones[min(level, 100)]
if len(item.samples) != len(progress.samples) || slices.Equal(item.samples, progress.samples) {
t.Fatal("tone shape/duration", level)
}
if !s.Play_indentation(level) || s.pending.Load() != item || s.progress.Load() != nil {
t.Fatal(level)
}
s.Clear_progress()
s.Discard_progress()
buffer := make([]float32, 100)
s.read_samples(buffer)
if s.current != item || s.progressing {
t.Fatal("progress cancellation affected indentation", level)
}
for index, value := range buffer {
if value != item.samples[index]*0.5 {
t.Fatal("cached tone/volume changed", level)
}
}
}
if s.Play_indentation(-1) {
t.Fatal("negative indentation accepted")
}
s.closed.Store(true)
if s.Play_indentation(1) {
t.Fatal("closed service accepted sound")
}
}