🎉 live server seems to be working now
This commit is contained in:
171
third_party/sendspin-go/pkg/audio/decode/pcm_test.go
vendored
Normal file
171
third_party/sendspin-go/pkg/audio/decode/pcm_test.go
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
// ABOUTME: Tests for PCM decoder
|
||||
// ABOUTME: Tests 16-bit and 24-bit PCM decoding
|
||||
package decode
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/Sendspin/sendspin-go/pkg/audio"
|
||||
)
|
||||
|
||||
func TestNewPCM(t *testing.T) {
|
||||
format := audio.Format{
|
||||
Codec: "pcm",
|
||||
SampleRate: 48000,
|
||||
Channels: 2,
|
||||
BitDepth: 16,
|
||||
}
|
||||
|
||||
decoder, err := NewPCM(format)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create decoder: %v", err)
|
||||
}
|
||||
|
||||
if decoder == nil {
|
||||
t.Fatal("expected decoder to be created")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPCMDecode16Bit(t *testing.T) {
|
||||
format := audio.Format{
|
||||
Codec: "pcm",
|
||||
SampleRate: 48000,
|
||||
Channels: 2,
|
||||
BitDepth: 16,
|
||||
}
|
||||
|
||||
decoder, err := NewPCM(format)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create decoder: %v", err)
|
||||
}
|
||||
|
||||
input := []byte{0x00, 0x01, 0x02, 0x03}
|
||||
output, err := decoder.Decode(input)
|
||||
if err != nil {
|
||||
t.Fatalf("decode failed: %v", err)
|
||||
}
|
||||
|
||||
expectedSamples := len(input) / 2
|
||||
if len(output) != expectedSamples {
|
||||
t.Errorf("expected %d samples, got %d", expectedSamples, len(output))
|
||||
}
|
||||
|
||||
// Verify little-endian conversion with 24-bit scaling
|
||||
// 0x00, 0x01 -> 0x0100 = 256 (16-bit) -> 256<<8 = 65536 (24-bit)
|
||||
// 0x02, 0x03 -> 0x0302 = 770 (16-bit) -> 770<<8 = 197120 (24-bit)
|
||||
expected0 := int32(256 << 8)
|
||||
if output[0] != expected0 {
|
||||
t.Errorf("expected first sample %d, got %d", expected0, output[0])
|
||||
}
|
||||
expected1 := int32(770 << 8)
|
||||
if output[1] != expected1 {
|
||||
t.Errorf("expected second sample %d, got %d", expected1, output[1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestPCMDecode24Bit(t *testing.T) {
|
||||
format := audio.Format{
|
||||
Codec: "pcm",
|
||||
SampleRate: 192000,
|
||||
Channels: 2,
|
||||
BitDepth: 24,
|
||||
}
|
||||
|
||||
decoder, err := NewPCM(format)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create decoder: %v", err)
|
||||
}
|
||||
|
||||
input := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05}
|
||||
output, err := decoder.Decode(input)
|
||||
if err != nil {
|
||||
t.Fatalf("decode failed: %v", err)
|
||||
}
|
||||
|
||||
expectedSamples := len(input) / 3
|
||||
if len(output) != expectedSamples {
|
||||
t.Errorf("expected %d samples, got %d", expectedSamples, len(output))
|
||||
}
|
||||
|
||||
// Verify 24-bit little-endian conversion
|
||||
// 0x00, 0x01, 0x02 -> 0x020100 = 131328
|
||||
expected0 := int32(0x020100)
|
||||
if output[0] != expected0 {
|
||||
t.Errorf("expected first sample %d, got %d", expected0, output[0])
|
||||
}
|
||||
|
||||
// 0x03, 0x04, 0x05 -> 0x050403 = 328707
|
||||
expected1 := int32(0x050403)
|
||||
if output[1] != expected1 {
|
||||
t.Errorf("expected second sample %d, got %d", expected1, output[1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewPCM_InvalidCodec(t *testing.T) {
|
||||
format := audio.Format{
|
||||
Codec: "opus",
|
||||
SampleRate: 48000,
|
||||
Channels: 2,
|
||||
BitDepth: 16,
|
||||
}
|
||||
|
||||
decoder, err := NewPCM(format)
|
||||
if err == nil {
|
||||
t.Fatal("expected error for invalid codec, got nil")
|
||||
}
|
||||
|
||||
if decoder != nil {
|
||||
t.Fatal("expected decoder to be nil for invalid codec")
|
||||
}
|
||||
|
||||
expectedError := "invalid codec for PCM decoder: opus"
|
||||
if err.Error() != expectedError {
|
||||
t.Errorf("expected error %q, got %q", expectedError, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewPCM_UnsupportedBitDepth(t *testing.T) {
|
||||
format := audio.Format{
|
||||
Codec: "pcm",
|
||||
SampleRate: 48000,
|
||||
Channels: 2,
|
||||
BitDepth: 32,
|
||||
}
|
||||
|
||||
decoder, err := NewPCM(format)
|
||||
if err == nil {
|
||||
t.Fatal("expected error for unsupported bit depth, got nil")
|
||||
}
|
||||
|
||||
if decoder != nil {
|
||||
t.Fatal("expected decoder to be nil for unsupported bit depth")
|
||||
}
|
||||
|
||||
expectedError := "unsupported bit depth: 32 (supported: 16, 24)"
|
||||
if err.Error() != expectedError {
|
||||
t.Errorf("expected error %q, got %q", expectedError, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func TestPCMDecode_EmptyInput(t *testing.T) {
|
||||
format := audio.Format{
|
||||
Codec: "pcm",
|
||||
SampleRate: 48000,
|
||||
Channels: 2,
|
||||
BitDepth: 16,
|
||||
}
|
||||
|
||||
decoder, err := NewPCM(format)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create decoder: %v", err)
|
||||
}
|
||||
|
||||
output, err := decoder.Decode([]byte{})
|
||||
if err != nil {
|
||||
t.Fatalf("decode failed with empty input: %v", err)
|
||||
}
|
||||
|
||||
if len(output) != 0 {
|
||||
t.Errorf("expected 0 samples from empty input, got %d", len(output))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user