// 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") } }