diff options
| author | Andre Weissflog <floooh@gmail.com> | 2023-10-03 14:39:54 +0200 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2023-10-03 14:39:54 +0200 |
| commit | 9a1421dd1e4b6dad8312e66cf78e75d3fc7d2fc3 (patch) | |
| tree | b964166b974954ffb2d3f6fb4479d9fed5a8ed87 /tests/functional | |
| parent | df394f8e0105030ead34776048e1a4236b1f3c69 (diff) | |
| parent | 5bfa84212b7428ed8ca3b55ffce214aff9e4954b (diff) | |
Merge branch 'master' into sgfx-wgpu
Diffstat (limited to 'tests/functional')
| -rw-r--r-- | tests/functional/sokol_args_test.c | 48 | ||||
| -rw-r--r-- | tests/functional/sokol_fetch_test.c | 77 |
2 files changed, 111 insertions, 14 deletions
diff --git a/tests/functional/sokol_args_test.c b/tests/functional/sokol_args_test.c index 097395f2..e2928d10 100644 --- a/tests/functional/sokol_args_test.c +++ b/tests/functional/sokol_args_test.c @@ -252,3 +252,51 @@ UTEST(sokol_args, escape_sequence) { TSTR(sargs_value_at(2), "val2\tval3"); sargs_shutdown(); } + +static char* argv_11[] = { "exe_name", "kvp0 kvp1", "kvp2 = val2", "kvp3", "kvp4=val4" }; +UTEST(sokol_args, key_only_args) { + sargs_setup(&(sargs_desc){ + .argc = NUM_ARGS(argv_11), + .argv = argv_11, + }); + T(sargs_isvalid()); + T(sargs_num_args() == 5); + T(0 == sargs_find("kvp0")); + T(1 == sargs_find("kvp1")); + T(2 == sargs_find("kvp2")); + T(3 == sargs_find("kvp3")); + T(4 == sargs_find("kvp4")) + T(-1 == sargs_find("kvp5")); + T(-1 == sargs_find("val2")); + T(-1 == sargs_find("val4")); + T(sargs_exists("kvp0")); + T(sargs_exists("kvp1")); + T(sargs_exists("kvp2")); + T(sargs_exists("kvp3")); + T(sargs_exists("kvp4")); + T(!sargs_exists("kvp5")); + TSTR(sargs_value("kvp0"), ""); + TSTR(sargs_value("kvp1"), ""); + TSTR(sargs_value("kvp2"), "val2"); + TSTR(sargs_value("kvp3"), ""); + TSTR(sargs_value("kvp4"), "val4"); + TSTR(sargs_value("kvp5"), ""); + TSTR(sargs_value_def("kvp0", "bla0"), "bla0"); + TSTR(sargs_value_def("kvp1", "bla1"), "bla1"); + TSTR(sargs_value_def("kvp2", "bla2"), "val2"); + TSTR(sargs_value_def("kvp3", "bla3"), "bla3"); + TSTR(sargs_value_def("kvp4", "bla4"), "val4"); + TSTR(sargs_value_def("kvp5", "bla5"), "bla5"); + TSTR(sargs_key_at(0), "kvp0"); + TSTR(sargs_key_at(1), "kvp1"); + TSTR(sargs_key_at(2), "kvp2"); + TSTR(sargs_key_at(3), "kvp3"); + TSTR(sargs_key_at(4), "kvp4"); + TSTR(sargs_key_at(5), ""); + TSTR(sargs_value_at(0), ""); + TSTR(sargs_value_at(1), ""); + TSTR(sargs_value_at(2), "val2"); + TSTR(sargs_value_at(3), ""); + TSTR(sargs_value_at(4), "val4"); + TSTR(sargs_value_at(5), ""); +} diff --git a/tests/functional/sokol_fetch_test.c b/tests/functional/sokol_fetch_test.c index 417979d5..8318a9e2 100644 --- a/tests/functional/sokol_fetch_test.c +++ b/tests/functional/sokol_fetch_test.c @@ -612,9 +612,9 @@ UTEST(sokol_fetch, load_file_chunked) { /* load N big files in small chunks interleaved on the same channel via lanes */ #define LOAD_FILE_LANES_NUM_LANES (4) -uint8_t load_file_lanes_chunk_buf[LOAD_FILE_LANES_NUM_LANES][8192]; -uint8_t load_file_lanes_content[LOAD_FILE_LANES_NUM_LANES][500000]; -int load_file_lanes_passed[LOAD_FILE_LANES_NUM_LANES]; +static uint8_t load_file_lanes_chunk_buf[LOAD_FILE_LANES_NUM_LANES][8192]; +static uint8_t load_file_lanes_content[LOAD_FILE_LANES_NUM_LANES][500000]; +static int load_file_lanes_passed[LOAD_FILE_LANES_NUM_LANES]; static void load_file_lanes_callback(const sfetch_response_t* response) { assert((response->channel == 0) && (response->lane < LOAD_FILE_LANES_NUM_LANES)); if (response->fetched) { @@ -669,9 +669,9 @@ UTEST(sokol_fetch, load_file_lanes) { #define LOAD_FILE_THROTTLE_NUM_PASSES (3) #define LOAD_FILE_THROTTLE_NUM_REQUESTS (12) // lanes * passes -uint8_t load_file_throttle_chunk_buf[LOAD_FILE_THROTTLE_NUM_LANES][128000]; -uint8_t load_file_throttle_content[LOAD_FILE_THROTTLE_NUM_PASSES][LOAD_FILE_THROTTLE_NUM_LANES][500000]; -int load_file_throttle_passed[LOAD_FILE_THROTTLE_NUM_LANES]; +static uint8_t load_file_throttle_chunk_buf[LOAD_FILE_THROTTLE_NUM_LANES][128000]; +static uint8_t load_file_throttle_content[LOAD_FILE_THROTTLE_NUM_PASSES][LOAD_FILE_THROTTLE_NUM_LANES][500000]; +static int load_file_throttle_passed[LOAD_FILE_THROTTLE_NUM_LANES]; static void load_file_throttle_callback(const sfetch_response_t* response) { assert((response->channel == 0) && (response->lane < LOAD_FILE_LANES_NUM_LANES)); @@ -733,8 +733,8 @@ UTEST(sokol_fetch, load_file_throttle) { /* test parallel fetches on multiple channels */ #define LOAD_CHANNEL_NUM_CHANNELS (16) -uint8_t load_channel_buf[LOAD_CHANNEL_NUM_CHANNELS][500000]; -bool load_channel_passed[LOAD_CHANNEL_NUM_CHANNELS]; +static uint8_t load_channel_buf[LOAD_CHANNEL_NUM_CHANNELS][500000]; +static bool load_channel_passed[LOAD_CHANNEL_NUM_CHANNELS]; void load_channel_callback(const sfetch_response_t* response) { assert(response->channel < LOAD_CHANNEL_NUM_CHANNELS); @@ -781,15 +781,13 @@ UTEST(sokol_fetch, load_channel) { sfetch_shutdown(); } -bool load_file_cancel_passed = false; -void load_file_cancel_callback(const sfetch_response_t* response) { +static bool load_file_cancel_passed = false; +static void load_file_cancel_callback(const sfetch_response_t* response) { if (response->dispatched) { sfetch_cancel(response->handle); } - if (response->failed) { - if (response->cancelled && response->finished && (response->error_code == SFETCH_ERROR_CANCELLED)) { - load_file_cancel_passed = true; - } + if (response->cancelled && response->finished && response->failed && (response->error_code == SFETCH_ERROR_CANCELLED)) { + load_file_cancel_passed = true; } } @@ -811,3 +809,54 @@ UTEST(sokol_fetch, load_file_cancel) { T(load_file_cancel_passed); sfetch_shutdown(); } + +static bool load_file_cancel_before_dispatch_passed = false; +static void load_file_cancel_before_dispatch_callback(const sfetch_response_t* response) { + // cancelled, finished, failed and error code must all be set + if (response->cancelled && response->finished && response->failed && (response->error_code == SFETCH_ERROR_CANCELLED)) { + load_file_cancel_before_dispatch_passed = true; + } +} + +UTEST(sokol_fetch, load_file_cancel_before_dispatch) { + sfetch_setup(&(sfetch_desc_t){ + .num_channels = 1, + }); + sfetch_handle_t h = sfetch_send(&(sfetch_request_t){ + .path = "comsi.s3m", + .callback = load_file_cancel_before_dispatch_callback, + }); + sfetch_cancel(h); + sfetch_dowork(); + T(load_file_cancel_before_dispatch_passed); + sfetch_shutdown(); +} + +static bool load_file_cancel_after_dispatch_passed = false; +static void load_file_cancel_after_dispatch_callback(const sfetch_response_t* response) { + // when cancelled, then finished, failed and error code must all be set + if (response->cancelled && response->finished && response->failed && (response->error_code == SFETCH_ERROR_CANCELLED)) { + load_file_cancel_after_dispatch_passed = true; + } +} + +UTEST(sokol_fetch, load_file_cancel_after_dispatch) { + sfetch_setup(&(sfetch_desc_t){ + .num_channels = 1, + }); + sfetch_handle_t h = sfetch_send(&(sfetch_request_t){ + .path = "comsi.s3m", + .callback = load_file_cancel_after_dispatch_callback, + .buffer = SFETCH_RANGE(load_file_buf), + }); + int frame_count = 0; + const int max_frames = 10000; + while (sfetch_handle_valid(h) && (frame_count++ < max_frames)) { + sfetch_dowork(); + sfetch_cancel(h); + sleep_ms(1); + } + T(frame_count < max_frames); + T(load_file_cancel_after_dispatch_passed); + sfetch_shutdown(); +} |