nativeaudio

audio playback for Go
Log | Files | Refs | README | LICENSE

commit 78c8ffd8542e3f09b6cf37164aa536dd12f6bda9
parent 35931843c2f9d6dd8d1c7e50e4fcd654df5dcde1
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Thu, 18 May 2023 20:38:54 +0800

test: add test files that exercise C code in various ways

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
Ainternal/test/main.c | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ainternal/test/main_test.c | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 144 insertions(+), 0 deletions(-)

diff --git a/internal/test/main.c b/internal/test/main.c @@ -0,0 +1,68 @@ +#include "../../audio_windows.h" + +#ifdef _MSC_VER +#define _CRT_SECURE_NO_WARNINGS +#endif + +int main(int argc, char** argv) { + if (argc < 2) { + printf("supply file name"); + goto done; + } + + printf("press return to start media framework...\n"); + getchar(); + + StartMediaFramework(); + + printf("press return to decode...\n"); + getchar(); + + const char* fname = argv[1]; + FILE* f = fopen(fname, "rb"); + + if (f == NULL) { + fprintf(stderr, "cannot open file '%s': %s\n", fname, strerror(errno)); + goto done; + } + + fseek(f, 0, SEEK_END); + const int fsize = ftell(f); + + fseek(f, 0, SEEK_SET); + byte* b = malloc(fsize); + + fread(b, fsize, 1, f); + fclose(f); + + Buffer* buf; + buf = BufferNew(); + + DecodeResult r; + + r = Decode(b, fsize); + + free(b); + + if (r.Err != NULL) { + fprintf(stderr, "decoding: %s\n", r.Err->Str); + goto done; + } + + printf("press return to free memory...\n"); + getchar(); + + BufferFree(r.Uncompressed); + + printf("press return to end media framework...\n"); + getchar(); + + EndMediaFramework(); + + printf("press return to exit...\n"); + getchar(); + +done: + return 0; +} + diff --git a/internal/test/main_test.c b/internal/test/main_test.c @@ -0,0 +1,76 @@ +#include "../../audio_windows.h" + +#ifdef _MSC_VER +#define _CRT_SECURE_NO_WARNINGS +#endif + +#if _WIN32 +# define C_RED(s) s +# define C_GREEN(s) s +#else +# define C_RED(s) "\033[31;1m" s "\033[0m" +# define C_GREEN(s) "\033[32;1m" s "\033[0m" +#endif + +#define TEST(s, x) \ + do { \ + if (x) { \ + printf(C_GREEN("PASS") " %s\n", s); \ + (*count_pass)++; \ + } else { \ + printf(C_RED("FAIL") " %s\n", s); \ + (*count_fail)++; \ + } \ + } while (0) + +void +TestBuffer(int *count_fail, int *count_pass) { + + Buffer *b = NULL; + + b = BufferNew(); + + TEST("BufferNew zero len", b->Len == 0); + TEST("BufferNew not null", b->Data != NULL); + TEST("BufferNew default size", b->Cap == BUFFER_DEFAULT_SIZE); + + BYTE *data = malloc(1024); + BufferWrite(b, 1024, data); + free(data); + + TEST("BufferWrite data pointer no null", b->Data != NULL); + TEST("BufferWrite len matches data written", b->Len == 1024); + TEST("BufferWrite cap unchanged", b->Cap == BUFFER_DEFAULT_SIZE); + + for (int ii = 0; ii < 1024; ii++) { + BYTE *data = malloc(1024); + BufferWrite(b, 1024, data); + free(data); + } + + TEST("BufferWrite data pointer not null", b->Data != NULL); + TEST("BufferWrite len matches data written", b->Len == 1024*1025); + TEST("BufferWrite exceed cap should grow", b->Cap != BUFFER_DEFAULT_SIZE); + + BufferFree(b); +} + +void +TestCharWiden(int *count_fail, int *count_pass) { + +} + +int +main(int argc, char** argv) { + + int count_fail = 0; + int count_pass = 0; + + TestBuffer(&count_fail, &count_pass); + TestCharWiden(&count_fail, &count_pass); + + printf("%d fail, %d pass\n", count_fail, count_pass); + return count_fail != 0; +} + +