aboutsummaryrefslogtreecommitdiff
path: root/tests/functional
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2023-10-03 14:39:54 +0200
committerAndre Weissflog <floooh@gmail.com>2023-10-03 14:39:54 +0200
commit9a1421dd1e4b6dad8312e66cf78e75d3fc7d2fc3 (patch)
treeb964166b974954ffb2d3f6fb4479d9fed5a8ed87 /tests/functional
parentdf394f8e0105030ead34776048e1a4236b1f3c69 (diff)
parent5bfa84212b7428ed8ca3b55ffce214aff9e4954b (diff)
Merge branch 'master' into sgfx-wgpu
Diffstat (limited to 'tests/functional')
-rw-r--r--tests/functional/sokol_args_test.c48
-rw-r--r--tests/functional/sokol_fetch_test.c77
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();
+}