52 lines
1.6 KiB
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")
|
|
}
|
|
}
|