Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

56 wiersze
1.5KB

  1. package ingest
  2. import "testing"
  3. func TestChunkToFramesMonoDuplicate(t *testing.T) {
  4. frames, err := ChunkToFrames(PCMChunk{
  5. Channels: 1,
  6. Samples: []int32{2147483647, -2147483648},
  7. })
  8. if err != nil {
  9. t.Fatalf("unexpected error: %v", err)
  10. }
  11. if len(frames) != 2 {
  12. t.Fatalf("expected 2 frames, got %d", len(frames))
  13. }
  14. if frames[0].L != frames[0].R {
  15. t.Fatalf("expected mono duplication, got L=%v R=%v", frames[0].L, frames[0].R)
  16. }
  17. if frames[1].L != frames[1].R {
  18. t.Fatalf("expected mono duplication, got L=%v R=%v", frames[1].L, frames[1].R)
  19. }
  20. }
  21. func TestChunkToFramesStereoPassThrough(t *testing.T) {
  22. frames, err := ChunkToFrames(PCMChunk{
  23. Channels: 2,
  24. Samples: []int32{100, 200, -300, -400},
  25. })
  26. if err != nil {
  27. t.Fatalf("unexpected error: %v", err)
  28. }
  29. if len(frames) != 2 {
  30. t.Fatalf("expected 2 frames, got %d", len(frames))
  31. }
  32. if !(frames[0].L < frames[0].R) {
  33. t.Fatalf("expected left < right for first frame, got %v >= %v", frames[0].L, frames[0].R)
  34. }
  35. if !(frames[1].L > frames[1].R) {
  36. t.Fatalf("expected left > right for second frame, got %v <= %v", frames[1].L, frames[1].R)
  37. }
  38. }
  39. func TestChunkToFramesRejectsUnsupportedChannels(t *testing.T) {
  40. _, err := ChunkToFrames(PCMChunk{Channels: 3, Samples: []int32{1, 2, 3}})
  41. if err == nil {
  42. t.Fatal("expected error for unsupported channels")
  43. }
  44. }
  45. func TestChunkToFramesRejectsInvalidInterleaving(t *testing.T) {
  46. _, err := ChunkToFrames(PCMChunk{Channels: 2, Samples: []int32{1, 2, 3}})
  47. if err == nil {
  48. t.Fatal("expected error for invalid interleaving")
  49. }
  50. }