test_audiobuf.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "common.h"
  2. #include <assert.h>
  3. #include <string.h>
  4. #include "util/audiobuf.h"
  5. static void test_audiobuf_simple(void) {
  6. struct sc_audiobuf buf;
  7. uint32_t data[20];
  8. bool ok = sc_audiobuf_init(&buf, 4, 20);
  9. assert(ok);
  10. uint32_t samples[] = {1, 2, 3, 4, 5};
  11. uint32_t w = sc_audiobuf_write(&buf, samples, 5);
  12. assert(w == 5);
  13. uint32_t r = sc_audiobuf_read(&buf, data, 4);
  14. assert(r == 4);
  15. assert(!memcmp(data, samples, 16));
  16. uint32_t samples2[] = {6, 7, 8};
  17. w = sc_audiobuf_write(&buf, samples2, 3);
  18. assert(w == 3);
  19. uint32_t single = 9;
  20. w = sc_audiobuf_write(&buf, &single, 1);
  21. assert(w == 1);
  22. r = sc_audiobuf_read(&buf, &data[4], 8);
  23. assert(r == 5);
  24. uint32_t expected[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  25. assert(!memcmp(data, expected, 36));
  26. sc_audiobuf_destroy(&buf);
  27. }
  28. static void test_audiobuf_boundaries(void) {
  29. struct sc_audiobuf buf;
  30. uint32_t data[20];
  31. bool ok = sc_audiobuf_init(&buf, 4, 20);
  32. assert(ok);
  33. uint32_t samples[] = {1, 2, 3, 4, 5, 6};
  34. uint32_t w = sc_audiobuf_write(&buf, samples, 6);
  35. assert(w == 6);
  36. w = sc_audiobuf_write(&buf, samples, 6);
  37. assert(w == 6);
  38. w = sc_audiobuf_write(&buf, samples, 6);
  39. assert(w == 6);
  40. uint32_t r = sc_audiobuf_read(&buf, data, 9);
  41. assert(r == 9);
  42. uint32_t expected[] = {1, 2, 3, 4, 5, 6, 1, 2, 3};
  43. assert(!memcmp(data, expected, 36));
  44. uint32_t samples2[] = {7, 8, 9, 10, 11};
  45. w = sc_audiobuf_write(&buf, samples2, 5);
  46. assert(w == 5);
  47. uint32_t single = 12;
  48. w = sc_audiobuf_write(&buf, &single, 1);
  49. assert(w == 1);
  50. w = sc_audiobuf_read(&buf, NULL, 3);
  51. assert(w == 3);
  52. assert(sc_audiobuf_can_read(&buf) == 12);
  53. r = sc_audiobuf_read(&buf, data, 12);
  54. assert(r == 12);
  55. uint32_t expected2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
  56. assert(!memcmp(data, expected2, 48));
  57. sc_audiobuf_destroy(&buf);
  58. }
  59. static void test_audiobuf_partial_read_write(void) {
  60. struct sc_audiobuf buf;
  61. uint32_t data[15];
  62. bool ok = sc_audiobuf_init(&buf, 4, 10);
  63. assert(ok);
  64. uint32_t samples[] = {1, 2, 3, 4, 5, 6};
  65. uint32_t w = sc_audiobuf_write(&buf, samples, 6);
  66. assert(w == 6);
  67. w = sc_audiobuf_write(&buf, samples, 6);
  68. assert(w == 4);
  69. w = sc_audiobuf_write(&buf, samples, 6);
  70. assert(w == 0);
  71. uint32_t r = sc_audiobuf_read(&buf, data, 3);
  72. assert(r == 3);
  73. uint32_t expected[] = {1, 2, 3};
  74. assert(!memcmp(data, expected, 12));
  75. w = sc_audiobuf_write(&buf, samples, 6);
  76. assert(w == 3);
  77. r = sc_audiobuf_read(&buf, data, 15);
  78. assert(r == 10);
  79. uint32_t expected2[] = {4, 5, 6, 1, 2, 3, 4, 1, 2, 3};
  80. assert(!memcmp(data, expected2, 12));
  81. sc_audiobuf_destroy(&buf);
  82. }
  83. int main(int argc, char *argv[]) {
  84. (void) argc;
  85. (void) argv;
  86. test_audiobuf_simple();
  87. test_audiobuf_boundaries();
  88. test_audiobuf_partial_read_write();
  89. return 0;
  90. }